Отличительный переоснащение против хорошего прогноза

Это вопросы о том, как рассчитать & 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 - регрессия тогда думает, что тексты коррелируют высоко.

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

Ответы на вопрос(1)

Ваш ответ на вопрос