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!