使用逻辑回归模型获得 1 而不是 [0;1] 的预测概率

Posted

技术标签:

【中文标题】使用逻辑回归模型获得 1 而不是 [0;1] 的预测概率【英文标题】:Get predictions probability of 1 rather than [0;1] using Logistic Regression model 【发布时间】:2021-10-30 13:43:39 【问题描述】:

我在训练集和测试集上拟合了LogisticRegression,准确率约为 80%

然后我想对测试集进行预测,根据answered_correctly 是否为每个student_id 给出分数[1 表示是,0 表示否]。

我这样做了:

features_X = X.columns # getting columns names of X 

# X_test is an array created from a previous train_test_split step.
test_df = pd.DataFrame(columns=features_X, data=X_test)

predictions = grid_logit.predict(test_df[features_X])
#Create a  DataFrame with predictions
submission = pd.DataFrame('Id':test_df['student_id'],'Answered_correctly':predictions)

#Visualize the first 5 rows
submission.head()

Id           Answered_correctly
12992348        0
7268428         0
9497321         1 
588792          1
5045118         1

如您所见,它将每个用户分类在 0 和 1 之间。

我想要的是这样的:

Id            Answered_correctly
12992348            0.32
7268428             0.52
9497321             0.65

answered_correctly_values 对应于属于第 1 类的概率。

注意:使用predict_probafunction 返回错误:

Exception: Data must be 1-dimensional

编辑: 我用predict_proba(test_df[[features_X]]) 替换了predict 但它返回一个错误:None of [[ features_X cols]] are in the [columns]

【问题讨论】:

predict_proba 为您提供所需的内容。您没有显示您尝试调用它的代码 @krisograbek 我没有显示它,因为我只是在上面的代码中替换了它。 grid_logit.predict_proba 【参考方案1】:

predict_proba 返回每​​个类的概率估计值。假设您有两个类(0 和 1),它将返回一个形状为 (n_samples, 2) 的数组。

错误消息来自 pandas 数据框,因为它要求您仅传递一维数据。如上所述,predictions 只是一个二维输出。

仅将第 1 类 (predictions[:, 1]) 的概率估计值传递给数据框构造函数,它应该可以正常工作:

submission = pd.DataFrame('Id': test_df['student_id'], 'Answered_correctly': predictions[:, 1])

补充说明:

如果test_df 具有features_X 给出的所有列,则不需要传递test_df[features_X],因为test_df 应该足够了:

predictions = grid_logit.predict_proba(test_df)

【讨论】:

以上是关于使用逻辑回归模型获得 1 而不是 [0;1] 的预测概率的主要内容,如果未能解决你的问题,请参考以下文章

使用逻辑回归进行特征选择

Andrew Ng机器学习:逻辑回归

具有逻辑链接功能的 SVM 回归?

各个模型的损失函数

逻辑回归和判别分析的区别

逻辑回归(logistic regression)