【问题标题】:GLMNET prediction with intercept带截距的 GLMNET 预测
【发布时间】:2017-01-12 09:29:41
【问题描述】:

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

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

# 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) 列 - 如

Test_Matrix <- model.matrix(~.-y,data=Train)[,-1]

我的问题是:

  • 当我希望预测公式包含截距时,这样做是否是正确的方法以获得预测?

  • 如果是正确的方法:为什么我必须去除矩阵中的截距?

提前致谢。

【问题讨论】:

    标签: r prediction intercept glmnet


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果要预测具有截距的模型,则必须拟合具有截距的模型。您的代码使用了无截距的模型矩阵x &lt;- as.matrix(Train[,c('x1','x2')]),因此如果您在使用predict 时提供截距,则会出现错误。

      您可以执行以下操作:

      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')
      

      注意,你不必这样做

      model.matrix(~ . -y)
      

      model.matrix会忽略公式的LHS,所以使用是合法的

      model.matrix(y ~ .)
      

      【讨论】:

      • 非常感谢您的回答,它有效!我错过了y~。语法。
      • 这段代码的输出是:coef(Cv_EL) = 4 x 1 sparse Matrix of class "dgCMatrix" 1 (Intercept) 0.3311910 (Intercept) 。 x1 1.3281315 x2 -0.8116813 截距是什么。术语?
      猜你喜欢
      • 2021-05-22
      • 2014-09-28
      • 2022-07-22
      • 2021-10-16
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      相关资源
      最近更新 更多