【问题标题】:how to get probabilities between 0 and 1 using glmnet logistic regression如何使用 glmnet 逻辑回归获得 0 和 1 之间的概率
【发布时间】:2015-01-04 13:53:28
【问题描述】:

考虑以下示例

rm(list = ls(all=T))
library(ISLR)
library(glmnet)

Hitters=na.omit(Hitters)

# Binary proble - Logistic regression
Hitters$Salary <- ifelse(Hitters$Salary > 1000, 1, 0)
Hitters$Salary <- as.factor(Hitters$Salary)

# the class is unbalanced
# > table(Hitters$Salary)
# 0   1 
# 233  30 

# cls <- sapply(Hitters, class)
# for(j in names(cls[cls == 'integer'])) Hitters[,j] <- as.double(Hitters[,j])

x = model.matrix(~ . -1, Hitters[,names(Hitters)[!names(Hitters) %in% c('Salary')]] )

inx_train <- 1:200
inx_test <- 201:dim(Hitters)[1]

x_train <- x[inx_train, ]
x_test <- x[inx_test, ]
y_train <- Hitters[inx_train, c('Salary')]
y_test <- Hitters[inx_test, 'Salary']

fit = cv.glmnet(x=x_train, y=y_train, alpha=1, type.measure='auc', family = "binomial")
plot(fit)

pred = predict(fit, s='lambda.min', newx=x_test)

quantile(pred)
# 0%       25%       50%       75%      100% 
# -5.200853 -3.704760 -2.883836 -1.937052  1.386215 

鉴于上述概率,我应该使用/修改预测中的哪个函数或参数将它们在 0 和 1 之间转换?

【问题讨论】:

    标签: r logistic-regression glmnet


    【解决方案1】:

    在您的预测调用中,您需要设置type="response" 参数。根据文档,它返回拟合的概率。

    pred = predict(fit, s='lambda.min', newx=x_test, type="response")
    

    另外,如果你只是想要分类标签,你可以使用type="class"

    【讨论】:

    • 添加s='lambda.min'在我的情况下似乎不起作用,添加s=0.01确实有效。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2015-05-04
    • 2013-12-24
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2018-04-20
    • 2019-04-04
    相关资源
    最近更新 更多