これらは、機械学習の過剰適合を計算して減らす方法に関する質問です。機械学習の初心者の多くも同じ質問をするだろうと思うので、ここでの回答が他の人に役立つことを願って、例と質問を明確にしようとしました。
私はテキストの非常に小さなサンプルを持っており、それらに関連する値を予測しようとしています。sklearnを使用してtf-idfを計算し、それらを回帰モデルに挿入して予測しました。これにより、6323の機能を備えた26のサンプルが得られます-それほど多くはありません..私は知っています:
>> 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)
6323個の特徴(X)と関連するスコア(y)の26個のサンプルをモデルに挿入するとLinearRegression
、適切な予測が得られます。これらは、以下から、leave-one-out相互検証を使用して取得され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 = 1)の代わりにngram(n = 300)を使用すると、同様の結果が発生しますが、これは明らかに正しくありません。どのテキストにも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:これは、予測モデルがデータに過剰適合していることを意味している可能性があります。これを知っているのは、私が知っているngram(n = 300)に極値を選択したため、良い結果が得られないためです。しかし、私がこの知識を持っていなかったとしたら、通常、モデルが過剰適合していることをどのように判断しますか?言い換えると、妥当な尺度(n = 1)が使用された場合、モデルが適切に機能しているのに対して、過剰適合の結果として適切な予測が行われたことをどのように知ることができますか?
質問2:予測結果が良好かどうかを確認するために(この状況で)過剰適合を防ぐための最良の方法は何ですか?
質問3:交差検定を使用する場合LeaveOneOut
、モデルがどのように適合しすぎて良好な結果が得られる可能性がありますか?過剰適合とは、予測の精度が低下することを意味します。では、テキストが省略されている場合の予測に影響が出ないのはなぜですか。私が考えることができる唯一の理由:主に0のtf-idfスパース行列では、非常に多くの用語が0であるため、テキスト間に強い重複があります。回帰では、テキストは高度に相関していると見なされます。
すべてを知らなくても、質問に答えてください。ありがとう!