我想用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],因此我用它来进行分类问题?
答案 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