【问题标题】:Change coefficient of cv.glmnet fitted regression in RR中cv.glmnet拟合回归的变化系数
【发布时间】:2020-10-18 10:04:49
【问题描述】:

我知道如何从 cv.glmnet 中“提取”系数。但是有没有办法改变拟合对象的系数?我知道这是一种 hack,但我想手动调整拟合对象的系数,只是为了我自己的实验。

Extracting coefficient variable names from glmnet into a data.frame

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    glmnet 的系数存储在$glmnet.fit$beta 下:

    library(glmnet)
    library(Matrix)
    
    fit = cv.glmnet(x=as.matrix(mtcars[,-1]),y=mtcars[,1])
    
    head(fit$glmnet.fit$beta)
    6 x 79 sparse Matrix of class "dgCMatrix"
       [[ suppressing 79 column names ‘s0’, ‘s1’, ‘s2’ ... ]]
                                                                            
    cyl  . -0.01192151 -0.1447790 -0.2658654 -0.376195 -0.4770942 -0.5686616
    disp .  .           .          .          .         .          .        
    hp   .  .           .          .          .         .          .        
    drat .  .           .          .          .         .          .        
    wt   . -0.45776130 -0.7006176 -0.9218541 -1.123436 -1.3065806 -1.4739808
    qsec .  .           .          .          .         .          .        
    

    对于每个测试的 lambda,它是一列,当您调用 coefficients() 时,默认情况下您会拉出与 fit$lambda.1se 对应的列。假设我们要更改该列:

    coefficients(fit,s=fit$lambda.1se)
    
    11 x 1 sparse Matrix of class "dgCMatrix"
                           1
    (Intercept) 33.940487806
    cyl         -0.843038418
    disp         .          
    hp          -0.006965929
    drat         .          
    wt          -2.365917424
    qsec         .          
    vs           .          
    am           .          
    gear         .          
    carb         .       
    
    wh = which(fit$lambda==fit$lambda.1se)
    fit$glmnet.fit$beta[,wh] = runif(nrow(fit$glmnet.fit$beta))
    
    coefficients(fit,s=fit$lambda.1se)
    
    11 x 1 sparse Matrix of class "dgCMatrix"
                          1
    (Intercept) 33.94048781
    cyl          0.45636267
    disp         0.28286532
    hp           0.04186184
    drat         0.55084730
    wt           0.35273817
    qsec         0.96165338
    vs           0.79227125
    am           0.01036681
    gear         0.47738589
    carb         0.17170791
    

    和其他列和截距保持不变:

    11 x 1 sparse Matrix of class "dgCMatrix"
                          1
    (Intercept) 36.38102033
    cyl         -0.87610600
    disp         .         
    hp          -0.01377978
    drat         .         
    wt          -2.75934250
    qsec         .         
    vs           .         
    am           0.16806977
    gear         .         
    carb        -0.01384960
    

    这样做真的很奇怪。如果您想更改系数以进行预测,您可以随时提取系数,更改并再次将它们与您的数据矩阵相乘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 2019-07-28
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多