以此案例(逻辑回归的经典螃蟹数据):
> library(glmnet)
> X <- read.table("http://www.da.ugent.be/datasets/crab.dat", header=T)[1:10,]
> Y <- factor(ifelse(X$Sa > 0, 1, 0))
> Xnew <- data.frame('W'=20,'Wt'=2000)
> fit.glmnet <- glmnet(x = data.matrix(X[,c('W','Wt')]), y = Y, family = "binomial")
现在我想预测来自Xnew
的新值:
根据docs,我可以使用predict.glmnet
:
输入
需要的预测类型。输入&#34;链接&#34;给出线性预测变量 for&#34; binomial&#34;,&#34; multinomial&#34;,&#34; poisson&#34;或&#34;考克斯&#34;楷模;对于 &#34;高斯&#34;它给出了拟合值的模型。输入&#34;响应&#34;给 &#34;二项式&#34;的拟合概率或&#34; multinomial&#34;,[...]
所以这就是我的所作所为:
> predict.glmnet(object = fit.glmnet, type="response", newx = as.matrix(Xnew))[,1:5]
s0 s1 s2 s3 s4
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386
> predict.glmnet(object = fit.glmnet, type="link", newx = as.matrix(Xnew))[,1:5]
s0 s1 s2 s3 s4
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386
link
作为response
预测的值相同,这不是我所期望的。使用predict
似乎给了我正确的值:
> predict(object = fit.glmnet, type="response", newx = as.matrix(Xnew))[,1:5]
s0 s1 s2 s3 s4
0.3000000 0.2835386 0.2678146 0.2528080 0.2384968
> predict(object = fit.glmnet, type="link", newx = as.matrix(Xnew))[,1:5]
s0 s1 s2 s3 s4
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386
这是一个错误,还是我以错误的方式使用predict.glmnet
?
答案 0 :(得分:1)
在数据包glmnet
中,您的对象属于lognet
类:
> class(object)
[1] "lognet" "glmnet"
这就是为什么你没有使用predict.glmnet
得到正确的结果,而type="response"
在内部不支持predict.lognet
,但如果你使用> predict.lognet(object = fit.glmnet, newx = as.matrix(Xnew), type="response")[,1:5]
s0 s1 s2 s3 s4
0.3000000 0.2835386 0.2678146 0.2528080 0.2384968
> predict.lognet(object = fit.glmnet, newx = as.matrix(Xnew), type="link")[,1:5]
s0 s1 s2 s3 s4
-0.8472979 -0.9269763 -1.0057390 -1.0836919 -1.1609386
,你会得到它:
predict
无论如何,我建议您使用java -Djetty.port=9999 -jar start.jar
,并让R在内部解决使用哪个功能。
希望它有所帮助。