Возможно ли использовать те же k-сгибы в cross_val_predict, что и в cross_val_score?

#python #pandas #dataframe #scikit-learn #classification

#python #pandas #фрейм данных #scikit-learn #классификация

Вопрос:

Привет, если мы сделаем следующее для вычисления точности перекрестной проверки:

 cv_acc = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')    
  

Возможно ли оценить прогнозы y и создать матрицу путаницы (как показано ниже), используя те же входные данные для k-сгибов в cross_val_score ?

 y_pred = cross_val_predict(model, X_train, y_train, cv=5)
conf_mat = confusion_matrix(y_test, y_pred)
  

Есть ли способ сохранить, как k-сгибы точно разделены в cross_val_score , чтобы обеспечить сопоставимую матрицу путаницы?

Приветствия 🙂

Ответ №1:

Должно сработать следующее:

 from sklearn.model_selection import KFold, cross_val_score, cross_val_predict
k_folds = KFold(n_splits=5)
splits = list(k_folds.split(X_train, y_train)) # note list here as k_folds.split is a one-off generator
cv_acc = cross_val_score(model, X_train, y_train, cv=splits, scoring='accuracy')
y_pred = cross_val_predict(model, X_train, y_train, cv=splits)
  

Подробнее см. Документы для cross_val_score и cross_val_predict.

Полный рабочий пример:

 from sklearn.model_selection import KFold, cross_val_score, cross_val_predict
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression

k_folds = KFold(n_splits=5)
X_train, y_train = make_classification(1000)
splits = list(k_folds.split(X_train, y_train))
model = LogisticRegression()
cv_acc = cross_val_score(model, X_train, y_train, cv=splits, scoring='accuracy')
y_pred = cross_val_predict(model, X_train, y_train, cv=splits)
  

Комментарии:

1. Спасибо, приятель!! Отличная помощь 🙂