[英]R glmnet classification - family = 'binomial', type = 'class', no errors, why am I still getting regression predictions?
[英]predict.glmnet() gives same predictions for type = "link" and "response" using family = "binomial"
以這種情況為例(邏輯回歸的經典螃蟹數據):
> 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
預測新值:
根據文檔,我可以使用predict.glmnet
:
類型
所需的預測類型。 “鏈接”類型給出了“二項式”、“多項式”、“泊松”或“cox”模型的線性預測器; 對於“高斯”模型,它給出了擬合值。 “響應”類型給出了“二項式”或“多項式”的擬合概率,[...]
所以這就是我所做的:
> 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
?
在數據包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
,並讓 R 在內部解析要使用的函數。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.