Вопрос по scikit-learn, numpy, regression, python, machine-learning – Отличительный переоснащение против хорошего прогноза

33

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

У меня очень небольшая выборка текстов, и я пытаюсь предсказать значения, связанные с ними. Я использовал 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

Довольно хорошо! Использование нграмм (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

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

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

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

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

если модель очень хорошо работает на тренировочном наборе, но очень плохо на неизвестном тестовом наборе, вы переобучаетесь ... Joran Beasley
Итак, как же модель может делать точные прогнозы, используя нграм размером с сами тексты? Если это не переоснащение, что еще это может быть? Zach
Он не работает плохо на тестовом наборе. Это хорошо работает. LeaveOneOut используется для выбора наборов для тестирования и обучения. Zach
@Zach: n-грамм, пока целые обучающие выборки, по всей вероятности, не будут присутствовать в проверочных выборках, т.е. функция будет иметь значение 0 и, следовательно, не будет влиять на прогнозы. Ваша модель, вероятно, соответствует им, но перекрестная проверка не может это показать. Fred Foo
тогда это, вероятно, не переоснащение (если вы держите только один набор данных в качестве своего необучающего набора, это не может быть правдой) ... создайте несколько новых примеров, чтобы проверить его ... если он плохо работает на новых это наряд ... Если все комплекты одинаковы, тогда это все равно может быть наряд ... Обычно я выбираю тренировочные наборы и выбираю тестовые наборы вручную ... Joran Beasley

Ваш Ответ

1   ответ
34

how would you normally tell that the model is over-fitting?

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

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

What is the best way of preventing over-fitting (in this situation) to be sure that the prediction results are good or not?

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

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

If LeaveOneOut cross validation is used, how can the model possibly over-fit with good results?

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

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

Смотрите такжеэта интересная история.

Похожие вопросы