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

4
我希望使用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个回答

6

我已经再次阅读了手册,并发现在预测方法中使用type="response"将产生我想要的结果:

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

将输出介于[0,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)和λ的值。

虽然默认情况下glmnet调用100个lambda值,但如果`%dev%`从一个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

这里是Hastie的原始解释,获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接