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

Get predictions probability of 1 rather than [0;1] using Logistic Regression model

我在训练集和测试集上安装了 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

如您所见,class将每个用户定义在 0 和 1 之间。

我想要的是这样的:

Id            Answered_correctly
12992348            0.32
7268428             0.52
9497321             0.65

answered_correctly_对应于 class 1 的概率的值。

注意:使用 predict_proba 函数 returns 出错:

Exception: Data must be 1-dimensional

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

predict_proba returns 每个 class 的概率估计。鉴于您有两个 classes(0 和 1),它将 return 一个形状为 (n_samples, 2).

的数组

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

只将 class 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)