代码之家  ›  专栏  ›  技术社区  ›  floodking

如何在R中使用glmnet来解决分类问题

  •  4
  • floodking  · 技术社区  · 12 年前

    我想用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],从而使用它来解决分类问题?

    2 回复  |  直到 12 年前
        1
  •  6
  •   Julius Vainora    12 年前

    我重新阅读了手册,发现预测方法中的type=“response”会产生我想要的结果:

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

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

        2
  •  -1
  •   Dr. Turkuaz    10 年前

    如果我们只输入对象名称或使用打印功能,则会显示每个步骤的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)和

    (Lambda)。尽管默认情况下,glmnet调用100个lambda值,但如果“/dev/”在一个lambda到下一个lambda之间没有足够的变化(通常在路径的末尾附近),程序会提前停止

    我们可以在一个或多个位置获得实际系数

    s在序列范围内:

      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