Distinção entre overfitting e boa previsão

Estas são perguntas sobre como calcular e reduzir o overfitting no aprendizado de máquina. Eu acho que muitos novos no aprendizado de máquina terão as mesmas perguntas, então eu tentei ser claro com meus exemplos e perguntas na esperança de que as respostas aqui possam ajudar os outros.

Eu tenho uma amostra muito pequena de textos e estou tentando prever valores associados a eles. Eu usei o sklearn para calcular o tf-idf e inseri-lo em um modelo de regressão para previsão. Isso me dá 26 amostras com 6323 recursos - não muito .. eu sei:

>> 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)

Inserindo essas 26 amostras de 6323 características (X) e pontuações associadas (y), em umLinearRegression modelo, dá boas previsões. Estes são obtidos usando validação cruzada leave-one-out, decross_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

Muito bom! Usando ngrams (n = 300) em vez de unigrams (n = 1), resultados semelhantes ocorrem, o que obviamente não está correto. Não há 300 palavras em nenhum dos textos, então a previsão deve falhar, mas não:

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

Questão 1: Isso pode significar que o modelo de previsão éoverfitting os dados. Eu só sei disso porque eu escolhi um valor extremo para os ngrams (n = 300) que eu sei não pode produzir bons resultados. Mas se eu não tivesse esse conhecimento, como você normalmente diria que o modelo é muito adequado? Em outras palavras, se uma medida razoável (n = 1) fosse usada, como você saberia que a boa previsão foi o resultado de ser um overfit contra o modelo funcionando bem?

Questão 2: Qual é a melhor maneira de evitar o ajuste excessivo (nessa situação) para ter certeza de que os resultados da previsão são bons ou não?

Questão 3: E seLeaveOneOut validação cruzada é usada, como o modelo pode possivelmente se encaixar com bons resultados? O ajuste excessivo significa que a precisão da predição vai sofrer - então por que não sofre com a previsão de que o texto seja deixado de fora? A única razão pela qual consigo pensar: em uma matriz esparsa de tf-idf de principalmente 0s, há uma forte sobreposição entre os textos porque muitos termos são 0s - a regressão então acha que os textos se correlacionam altamente.

Por favor, responda a qualquer uma das perguntas, mesmo que você não as conheça. Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion