【问题标题】:Python Scikit - bad input shape when calling sklearn.metrics.precision_recall_curvePython Scikit - 调用 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 
);   

【问题讨论】:

    标签: python pandas machine-learning scikit-learn jupyter-notebook


    【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 2018-02-12
      • 2016-02-15
      • 2020-01-04
      • 2015-08-12
      • 2013-12-18
      • 2014-02-17
      • 2020-12-16
      • 1970-01-01
      相关资源
      最近更新 更多