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