Отличительный переоснащение против хорошего прогноза
Это вопросы о том, как рассчитать & 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 - регрессия тогда думает, что тексты коррелируют высоко.
Пожалуйста, ответьте на любой из вопросов, даже если вы не знаете их все. Спасибо!