Python Scikit - неправильная форма ввода при вызове sklearn.metrics.precision_recall_curve - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь построить PRC (кривую точного возврата) для CatBoostClassifier.

Но когда я звоню 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 Ответ

0 голосов
/ 10 декабря 2018

Тривиальный ответ: CatBoostClassifier.model.predict_proba возвращает двумерный массив;sklearn.model.precision_recall_curve требует 1d массива (или 2d массива с одним столбцом, в зависимости от того).

Документация для 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])
...