gpt4 book ai didi

lm 使用插入符号火车的结果

转载 作者:行者123 更新时间:2023-12-04 10:46:37 26 4
gpt4 key购买 nike

我使用 caret R 包作为一个非常方便的建模包装器。虽然这是一个奇怪的用法,但在使用模型类型 =“lm”和“无”的交叉验证时,我在从模型中提取结果时遇到了一些麻烦。参见下面的示例:

library(caret)
## Make data
Xs <- matrix(rnorm(300*20), nrow = 300, ncol = 20)
Yvec <- rnorm(300)
## Make traincontrol, cv of "none"
tcontrol <- trainControl(method = "none")
## Fit lm model using train
fit <- train(x= Xs, y = Yvec, method = "lm", metric = "RMSE", trControl = tcontrol)

fit$results
[1] RMSE Rsquared parameter
<0 rows> (or 0-length row.names)

知道为什么 fit$results 是空的吗?对于所有其他模型和 cv 类型,这似乎都有效。例如使用 2 倍 CV:

tcontrol2 <- trainControl(method = "cv", number = 2)
fit2 <- train(x= Xs, y = Yvec, method = "lm", metric = "RMSE", trControl = tcontrol2)
fit2$results
parameter RMSE Rsquared RMSESD RsquaredSD
1 none 1.023666 0.0008921194 0.006499062 0.0003463973

我明白这是一个人为的例子,但这个模型和 cv 方法只是我正在测试的一个更大数字的组合(因此插入符包装器是理想的)。

最佳答案

其实,我想我可能有一个解决办法。当没有重采样时,我相信你仍然可以从 train 的输出中得到拟合值。如果为真,这将意味着单个模型的 RMSE/Rsq(即没有交叉验证/重采样)只是:

> caret::RMSE(pred = fit$finalModel$fitted.values, obs = Yvec)
[1] 0.9348365
> caret::R2(pred = fit$finalModel$fitted.values, obs = Yvec)
[1] 0.04692012

而这个 R^2 对应于如果您只是手动执行 lm 将得到的结果:

> dat <- cbind(Yvec, Xs) %>% as.data.frame()
> lm(Yvec ~., data=dat) %>% summary

Call:
lm(formula = Yvec ~ ., data = dat)

...

...Multiple R-squared: 0.04692...

认为这已经结案,但如果其他人发现它有帮助,我会保留它,我仍然很想听听是否有人可以证实/反驳这一点。

关于lm 使用插入符号火车的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com