Рассчитать показатели оценки, используя cross_val_predict sklearn - PullRequest
0 голосов
/ 28 ноября 2018

На странице sklearn.model_selection.cross_val_predict указано:

Создание перекрестно проверенных оценок для каждой точки входных данных.Неуместно передавать эти прогнозы в метрику оценки.

Может кто-нибудь объяснить, что это значит?Если это дает оценку Y (прогноз y) для каждого Y (истинный Y), почему я не могу рассчитать такие показатели, как RMSE или коэффициент определения, используя эти результаты?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Просто, чтобы добавить немного ясности, легче понять разницу, если вы рассматриваете нелинейную функцию оценки, такую ​​как Maximum-Absolute-Error, вместо чего-то вроде средне-абсолютной ошибки.

cross_val_score () вычисляет максимальную абсолютную ошибку для каждого из 3-кратных значений (при условии 3-кратного перекрестного подтверждения) и сообщает совокупный результат (скажем, среднее?) по 3 таким показателям.То есть что-то вроде среднего значения (a, b, c), где a, b, c - максимальные погрешности abs для 3-кратного смещения соответственно.Я предполагаю, что можно безопасно возвращать возвращаемое значение как max-absolute-error вашей оценки в среднем или общем случае.

с помощью cross_val_predict () вы получите 3 набора прогнозов, соответствующих 3-кратномуи принятие максимальной абсолютной ошибки по совокупности (объединению) этих трех наборов прогнозов, безусловно, не совпадает с приведенным выше.Даже если прогнозируемые значения одинаковы в обоих сценариях, здесь вы получите максимум (a, b, c).Кроме того, max (a, b, c) будет необоснованной и чрезмерно пессимистичной характеристикой оценки max-absolute-error вашей модели.

0 голосов
/ 28 ноября 2018

Кажется, это основано на том, как выборки группируются и прогнозируются.Из руководства пользователя , связанного в cross_val_predict документах:

Предупреждение Примечание о нецелевом использовании cross_val_predict

Результат cross_val_predict может отличаться от полученныхиспользуя cross_val_score, так как элементы группируются по-разному.Функция cross_val_score принимает среднее значение по сгибам перекрестной проверки, тогда как cross_val_predict просто возвращает метки (или вероятности) из нескольких отдельных моделей без различия.Таким образом, cross_val_predict не является подходящей мерой ошибки обобщения.

Кажется, что cross_val_score говорит, что он усредняется по всем сгибам, тогда как cross_val_predict группирует отдельныхскладки и различные модели, но не все, и поэтому оно не обязательно будет обобщать.Например, используя пример кода со страницы sklearn:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_predict, cross_val_score
from sklearn.metrics import mean_squared_error, make_scorer
diabetes = datasets.load_diabetes()
X = diabetes.data[:200]
y = diabetes.target[:200]
lasso = linear_model.Lasso()
y_pred = cross_val_predict(lasso, X, y, cv=3)

print("Cross Val Prediction score:{}".format(mean_squared_error(y,y_pred)))

print("Cross Val Score:{}".format(np.mean(cross_val_score(lasso, X, y, cv=3, scoring = make_scorer(mean_squared_error)))))

Cross Val Prediction score:3993.771257795029
Cross Val Score:3997.1789145156217
...