Python Scikit - 调用 sklearn.metrics.precision_recall_curve 时输入形状错误

Posted

技术标签:

【中文标题】Python Scikit - 调用 sklearn.metrics.precision_recall_curve 时输入形状错误【英文标题】:Python Scikit - bad input shape when calling sklearn.metrics.precision_recall_curve 【发布时间】:2019-05-11 17:08:57 【问题描述】:

我正在尝试为CatBoostClassifier 构建PRC(精确召回曲线)。

但是当我打电话给sklearn.metrics.precision_recall_curve(y_test, y_score) 时,我得到的是ValueError: bad input shape (11912, 2)

我目前的方法可能有什么问题?我需要在这里修复什么以提供正确的形状?

import sklearn 
from sklearn import metrics 
y_score = model.predict_proba(X_test) 
prc_auc = sklearn.metrics.precision_recall_curve(y_test, y_score)

//这是我构建模型的方法

model = CatBoostClassifier( 
iterations=50, 
random_seed=63, 
learning_rate=0.15, 
custom_loss=['Accuracy', 'Precision', 'Recall', 'AUC']
) 

model.fit( 
X_train, y_train, 
cat_features=cat_features, 
eval_set=(X_test, y_test), 
verbose=10, 
plot=True 
);   

【问题讨论】:

【参考方案1】:

简单的答案是CatBoostClassifier.model.predict_proba 返回一个二维数组; sklearn.model.precision_recall_curve 需要一个一维数组(或一列的二维数组,以两者为准)。

CatBoostClassifier 的文档说predict_proba() 返回numpy.array,并且没有提供有关此方法的其他信息。所以我现在讨厌这个包的文档。

浏览一些注释不佳的代码让我明白:

    if prediction_type == 'Probability':
        predictions = np.transpose([1 - predictions, predictions])
        return predictions

我猜第 0 列是第 0 类的概率,第 1 列是第 1 类的概率。所以选择你的测试与这些东西中的任何一个并只使用该列。

prc_auc = sklearn.metrics.precision_recall_curve(y_test, y_score[:, 1])

【讨论】:

以上是关于Python Scikit - 调用 sklearn.metrics.precision_recall_curve 时输入形状错误的主要内容,如果未能解决你的问题,请参考以下文章

sklearn数据库-老鱼学sklearn

如何在 Python 中使用带有 Keras 的 scikit-learn 评估指标函数?

scikit-opt的使用

使用 Scikit-learn 谷歌应用引擎

nltk 和 scikit-learn 的安装

kmeans scikit-learn 教程