#python #scikit-learn #logistic-regression #cross-validation
#python #scikit-учиться #логистическая регрессия #перекрестная проверка
Вопрос:
Я сталкиваюсь со странной ситуацией, когда моя LogisticRegressionCV
модель sklearn, по-видимому, получает 100% точность (отсутствие перетасовки является преднамеренным). Однако, когда я прошу модель сообщить свои оценки точности, оценки точности для обратной регуляризации намного ниже 100%. Что я делаю не так?
Модель:
decoder = LogisticRegressionCV(
penalty='l1', # want sparse parameters
cv=KFold(n_splits=5, shuffle=False),
Cs=np.logspace(-1, 2, 3),
random_state=0, # reproducibility
dual=False, # Prefer dual=False when n_samples > n_features.
solver='liblinear', # for l1 penalty, must use liblinear or saga
max_iter=1e5, # give plenty of time to get good performance
fit_intercept=False,
class_weight='balanced',
).fit(X, y)
y_hat = decoder.predict(X)
y_hat_probs = decoder.predict_proba(X)
print(classification_report(y, y_hat))
print(confusion_matrix(y, y_hat))
результаты
precision recall f1-score support
0.0 1.00 1.00 1.00 374
1.0 1.00 1.00 1.00 105
accuracy 1.00 479
macro avg 1.00 1.00 1.00 479
weighted avg 1.00 1.00 1.00 479
[[374 0]
[ 0 105]]
Запрос значений decoder.scores_
результатов не приближается к 100%:
{1.0: array([[0.35416667, 0.60416667, 0.61458333],
[0.64583333, 0.64583333, 0.65625 ],
[0.59375 , 0.65625 , 0.64583333],
[0.54166667, 0.57291667, 0.59375 ],
[0.17894737, 0.61052632, 0.65263158]])}
Почему существует это несоответствие?
Ответ №1:
decoder.scores_
получаются во время перекрестной проверки, что означает, что они вычисляются на основе данных, которые не использовались во время обучения (для проверки всегда остается 1 часть данных).
y_hat = decoder.predict(X)
— Здесь вы вычисляете показатели на обучающем наборе. Модель видела все эти данные во время обучения, поэтому у нее было легче сделать правильные прогнозы по сравнению с примером CV.
Вы не хотите оценивать свою модель на обучающем наборе, потому что результат такой оценки может быть чрезмерно оптимистичным.
Наличие большой разницы между точностью прогнозирования в обучающем наборе по сравнению с набором проверки обычно означает, что модель переобучает данные — вместо изучения полезных представлений она просто запоминает отображение ввода / вывода.