使用Logistic Regression模型获取1的预测概率而不是[0;1]范围内的值

我在训练集和测试集上拟合了一个LogisticRegression模型,并获得了约80%的准确率

然后我想在测试集上进行预测,根据每个student_id是否answered_correctly给出评分(如果回答正确为1,如果回答错误为0)。

我做了以下操作:

features_X = X.columns # 获取X的列名 # X_test是之前train_test_split步骤中创建的数组test_df = pd.DataFrame(columns=features_X, data=X_test)predictions = grid_logit.predict(test_df[features_X])# 创建一个包含预测结果的DataFramesubmission = pd.DataFrame({'Id':test_df['student_id'],'Answered_correctly':predictions})# 查看前5行submission.head()Id           Answered_correctly12992348        07268428         09497321         1 588792          15045118         1

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

但我想要的是这样的结果:

Id            Answered_correctly12992348            0.327268428             0.529497321             0.65

answered_correctly_值对应于属于类别1的概率。

注意:使用predict_proba函数会返回一个错误:

Exception: Data must be 1-dimensional

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


回答:

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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注