如何在R中使用glmnet进行分类问题

时间:2013-09-08 03:36:07

标签: r classification glmnet

我想用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 个答案:

答案 0 :(得分:4)

我再次阅读了手册,发现预测方法中的type =“response”会产生我想要的内容:

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

将输出[0,1]

之间的值

答案 1 :(得分:-1)

如果我们只输入对象名称或使用打印功能,则会显示每个步骤的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(通常靠近路径的末尾),那么程序就会提前停止。

我们可以在一个或多个λ

处获得实际系数

在序列范围内:

  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