Как мне использовать cross_val_score, чтобы соответствовать моим тестовым данным? - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь понять использование cross_val_score (). Я понимаю, как это работает и все, и его цель. но давайте посмотрим на простой пример

reg = LinearRegression()
cv_scores = cross_val_score(reg, X_train, y_train, cv=5)
cv_scores = cross_val_score(reg, X_train, y_train, cv=10)

, предполагая, что средний балл скажем 0,91 и 0,84 с cv = 5 и cv = 10 соответственно. Как я могу использовать эту информацию, чтобы соответствовать моим тестовым данным?

Один из способов, который я могу придумать, - это использовать наилучшее значение для CV, т.е. 5 в этом случае в GridSearchCV, и подгонять обучающие данные и прогнозировать тестовые данные. ,Это правильно? и если да, то можете выполнить эту задачу без использования GridSearchCV?

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Здесь необходимо понять, что параметр cv не относится к вашей модели, а скорее к тому, как вы собираетесь выполнять перекрестную проверку. В этом случае вы сравниваете 5-кратную с 10-кратной перекрестной проверкой.

Помните, что при перекрестной проверке вы пытаетесь оценить ошибку при применении вашего метода к общей совокупности. В случае линейной регрессии по методу наименьших квадратов, ошибка CV при отсутствии ответа будет асимптотически CV с наименьшим смещением + дисперсия. Однако на практике разница не будет слишком большой, это в основном имеет значение только для небольших размеров выборки.

Теперь, почему вам нужна оценка "ошибки теста"? Потому что, когда вы решаете большинство моделей, то, что вы пытаетесь минимизировать, это именно функция ошибок при применении к данным обучения, поэтому, если вы не будете осторожны и ваша модель слишком сложна, вы получите отличные результаты на ваших данных обучения, но нев популяции. Резюме сделано, чтобы убедиться, что этого не происходит. В линейной регрессии обычно вы делаете CV, изменяя число функций (прямой выбор или используйте что-то вроде лассо, если вы не возражаете заплатить некоторую цену за ошибку смещения), и исправляете cv = 5 (или10, в большинстве случаев это не имеет значения)

1 голос
/ 29 октября 2019

Добро пожаловать в мир машинного обучения, где оценка производительности вашей модели является частью веселья.

k - это, в общем, заданный вами гиперпараметр, но как его выбрать? Ну, нет точного закона для этого. Правило большого пальца: k = min(10, sqrt(n)), где n - это количество точек данных, которые у вас есть.

Более интересно, что означает, что k является маленьким или большим? Малый k (например, 2) означает, что мы получаем много данных (50% от них) для проверки, наша модель может не охватить всю сложность наших данных, это приводит к увеличению смещения теста (модель недостаточно подходит). Большой k подразумевает, что мы не можем доверять нашей оценке ошибки из (небольшого) набора тестовых данных, поскольку она может не отражать всю сложность наших данных. Это приводит к высокой дисперсии теста.

Вот хороший пост в блоге, который объясняет все более подробно: https://codesachin.wordpress.com/2015/08/30/cross-validation-and-the-bias-variance-tradeoff-for-dummies/

В вашем конкретном случае я бы рекомендовал не смотреть только на среднее значениеваш cross_val_score, но и стандартное отклонение. Это даст вам более глубокое представление о том, как ваша модель может работать с тестовыми данными. GridSearchCV сам по себе является инструментом для поиска гиперпараметров для вашей модели, значение k является, так сказать, гипергиперпараметром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...