Подтвердить что ты не робот

Отличительная переоценка против хорошего прогноза

Это вопросы о том, как рассчитать и уменьшить переобучение в машинных процессах. Я думаю, что у многих новых для машинного обучения будут одни и те же вопросы, поэтому я попытался понять мои примеры и вопросы в надежде, что ответы здесь могут помочь другим.

У меня очень маленький образец текстов, и я пытаюсь предсказать связанные с ними значения. Я использовал sklearn для вычисления tf-idf и вставлял их в регрессионную модель для прогнозирования. Это дает мне 26 образцов с 6323 функциями - не много. Я знаю:

>> count_vectorizer = CountVectorizer(min_n=1, max_n=1)
>> term_freq = count_vectorizer.fit_transform(texts)
>> transformer = TfidfTransformer()
>> X = transformer.fit_transform(term_freq) 
>> print X.shape

(26, 6323)

Вставка этих 26 образцов из 6323 функций (X) и связанных с ними оценок (y) в модель LinearRegression дает хорошие прогнозы. Они получаются с использованием проверки перекрестного разрешения "с одного раза", от cross_validation.LeaveOneOut(X.shape[0], indices=True):

using ngrams (n=1):
     human  machine  points-off  %error
      8.67    8.27    0.40       1.98
      8.00    7.33    0.67       3.34
      ...     ...     ...        ...
      5.00    6.61    1.61       8.06
      9.00    7.50    1.50       7.50
mean: 7.59    7.64    1.29       6.47
std : 1.94    0.56    1.38       6.91

Довольно хорошо! Используя ngrams (n = 300) вместо униграмм (n = 1), возникают аналогичные результаты, что, очевидно, неверно. В любом из текстов не встречается 300 слов, поэтому предсказание должно завершиться неудачно, но это не так:

using ngrams (n=300):
      human  machine  points-off  %error
       8.67    7.55    1.12       5.60
       8.00    7.57    0.43       2.13
       ...     ...     ...        ...
mean:  7.59    7.59    1.52       7.59
std :  1.94    0.08    1.32       6.61

Вопрос 1: Это может означать, что модель прогнозирования перенастраивает данные. Я знаю только это, потому что я выбрал экстремальное значение для ngrams (n = 300), которое я ЗНАЮ, не могу дать хороших результатов. Но если бы у меня не было этих знаний, как бы вы обычно сказали, что модель перегружена? Другими словами, если бы использовалась разумная мера (n = 1), как бы вы знали, что хорошее предсказание было результатом того, что он набирал обороты против хорошо работающей модели?

Вопрос 2:. Каков наилучший способ предотвращения переустановки (в этой ситуации), чтобы убедиться, что результаты прогнозирования хороши или нет?

Вопрос 3: Если используется проверка перекрестной проверки LeaveOneOut, как модель может быть переполнена с хорошими результатами? Переопределение означает, что точность предсказания будет страдать - так почему он не страдает от предсказания для текста, который не учитывается? Единственная причина, по которой я могу думать: в разреженной матрице tf-idf, в основном, 0s, существует сильное совпадение между текстами, потому что так много терминов 0s - регрессия тогда думает, что тексты сильно коррелируют.

Пожалуйста, ответьте на любой из вопросов, даже если вы не знаете их всех. Благодарю!

4b9b3361

Ответ 1

как вы обычно скажете, что модель перегружена?

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

В записи блога, с которой я связан, описывается процедура тестирования для наложения: настройка набора сюжета и проверка ошибки проверки в зависимости от размера установленного набора. Если они показывают стабильный пробел в правом конце графика, вы, вероятно, переработаете.

Каков наилучший способ предотвращения переустановки (в этой ситуации), чтобы убедиться, что результаты прогнозирования хороши или нет?

Использовать тестовый набор . Выполняйте оценку только в этом случае, когда вы полностью выполнили выбор модели (настройка гиперпараметра); не тренируйтесь на нем, не используйте его в (поперечной) проверке. Оценка, которую вы получаете на тестовом наборе, является окончательной оценкой модели. Это должно показать, случайно ли вы набрали набор проверки.

[Конференции по компьютерному обучению иногда устанавливаются как соревнование, где набор тестов не предоставляется исследователям до тех пор, пока они не представили свою окончательную модель организаторам. Между тем, они могут использовать набор для обучения, как им заблагорассудится. путем тестирования моделей с использованием перекрестной проверки. Kaggle делает что-то подобное.]

Если LeaveOneOut используется перекрестная проверка, как модель может быть переполнена с хорошими результатами?

Поскольку вы можете настроить модель столько, сколько хотите, в этой настройке перекрестной проверки, пока она не будет почти идеально соответствовать CV.

В качестве крайнего примера предположим, что вы внедрили оценку, которая по существу является генератором случайных чисел. Вы можете продолжать пробуждать случайные семена, пока не нажмете "модель", которая производит очень низкую ошибку при перекрестной проверке, но это не значит, что вы попали в правильную модель. Это означает, что вы перешли на перекрестную проверку.

См. также эту интересную военную сцену.