【问题标题】:How to use glmnet in R for classification problems如何在 R 中使用 glmnet 解决分类问题
【发布时间】:2013-09-11 20:58:27
【问题描述】:

我想用 R 中的 glmnet 来做分类问题。

样本数据如下:

y,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11
1,0.766126609,45,2,0.802982129,9120,13,0,6,0,2
0,0.957151019,40,0,0.121876201,2600,4,0,0,0,1
0,0.65818014,38,1,0.085113375,3042,2,1,0,0,0

y 是二进制响应(0 或 1)。

我使用了以下 R 代码:

prr=cv.glmnet(x,y,family="binomial",type.measure="auc")
yy=predict(prr,newx, s="lambda.min")

但是,glmnet 预测的 yy 分散在 [-24,5] 之间。

如何将输出值限制为 [0,1] 以便我用它来解决分类问题?

【问题讨论】:

    标签: r classification glmnet


    【解决方案1】:

    我再次阅读了手册,发现 predict 方法中的 type="response" 会产生我想要的:

    lassopre2=predict(prr,newx, type="response")
    

    将输出[0,1]之间的值

    【讨论】:

      【解决方案2】:

      如果我们只是输入对象名称或使用打印功能,则会显示每一步glmnet路径的摘要:

        print(fit)
      
        ## 
        ## Call:  glmnet(x = x, y = y) 
        ## 
        ##       Df   %Dev  Lambda
        ##  [1,]  0 0.0000 1.63000
        ##  [2,]  2 0.0553 1.49000
        ##  [3,]  2 0.1460 1.35000
        ##  [4,]  2 0.2210 1.23000
      

      它从左到右显示非零系数的数量 (Df)、解释的偏差百分比 (%dev) 和 λ 的值

      (拉姆达)。虽然默认情况下 glmnet 调用 100 个 lambda 值,但如果 `%dev% 从一个 lambda 到下一个 lambda 没有充分变化(通常在路径末尾附近),程序会提前停止。

      我们可以得到一个或多个λ处的实际系数

      在序列范围内:

        coef(fit,s=0.1)
      
        ## 21 x 1 sparse Matrix of class "dgCMatrix"
        ##                     1
        ## (Intercept)  0.150928
        ## V1           1.320597
        ## V2           .       
        ## V3           0.675110
        ## V4           .       
        ## V5          -0.817412
      

      Here is the original explanation for more information by Hastie

      【讨论】:

        猜你喜欢
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        相关资源
        最近更新 更多