首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带截距的GLMNET预测

带截距的GLMNET预测
EN

Stack Overflow用户
提问于 2016-09-05 02:54:42
回答 2查看 3.6K关注 0票数 1

我有两个关于使用GLMNET进行预测的问题--特别是关于拦截。

我给出了一个关于列车数据创建、GLMNET估计和火车数据预测的小例子(稍后我将更改为Test data):

代码语言:javascript
复制
# Train data creation
Train <- data.frame('x1'=runif(10), 'x2'=runif(10))
Train$y <- Train$x1-Train$x2+runif(10)
# From Train data frame to x and y matrix
y <- Train$y
x <- as.matrix(Train[,c('x1','x2')])
# Glmnet model
Model_El <- glmnet(x,y)
Cv_El <- cv.glmnet(x,y)
# Prediction
Test_Matrix <- model.matrix(~.-y,data=Train)[,-1]
Test_Matrix_Df <- data.frame(Test_Matrix)
Pred_El <- predict(Model_El,newx=Test_Matrix,s=Cv_El$lambda.min,type='response')

我想在估计公式中截取。这段代码给出了一个关于Test_Matrix矩阵的尺寸的错误,除非我删除了矩阵的(Intercept)列,如

代码语言:javascript
复制
Test_Matrix <- model.matrix(~.-y,data=Train)[,-1]

我的问题是:

  • 这是正确的方法,以获得预测-当我想要预测公式包括截距?
  • 如果这是正确的方法:为什么我必须删除矩阵中的截距?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 03:40:49

如果你想用截距来预测一个模型,你必须用截距来拟合一个模型。您的代码使用模型矩阵x <- as.matrix(Train[,c('x1','x2')]),它是无拦截的,因此,如果您在使用predict时提供了一个拦截,则会得到一个错误。

您可以执行以下操作:

代码语言:javascript
复制
x <- model.matrix(y ~ ., Train)    ## model matrix with intercept
Model_El <- glmnet(x,y)
Cv_El <- cv.glmnet(x,y)
Test_Matrix <- model.matrix(y ~ ., Train)   ## prediction matrix with intercept
Pred_El <- predict(Model_El, newx = Test_Matrix, s = Cv_El$lambda.min, type='response')

注意,你不必这么做

代码语言:javascript
复制
model.matrix(~ . -y)

model.matrix将忽略该公式的LHS,因此使用它是合法的。

代码语言:javascript
复制
model.matrix(y ~ .)
票数 2
EN

Stack Overflow用户

发布于 2016-09-05 03:53:56

输入到x函数中的矩阵glmnet不包含截取列。因此,在构造测试矩阵时,您应该尊重这种格式:即只需执行model.matrix(y ~ . - 1, data = Train)

默认情况下,glmnet中适合拦截(请参阅glmnet函数中的intercept参数)。因此,当您调用glmnet(x, y)时,您在技术上正在执行glmnet(x, y, intercept = T)。因此,即使您的x矩阵没有拦截,其中一个适合您。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39323328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档