33

これらは、機械学習の過剰適合を計算して減らす方法に関する質問です。機械学習の初心者の多くも同じ質問をするだろうと思うので、ここでの回答が他の人に役立つことを願って、例と質問を明確にしようとしました。

私はテキストの非常に小さなサンプルを持っており、それらに関連する値を予測しようとしています。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であるため、テキスト間に強い重複があります。回帰では、テキストは高度に相関していると見なされます。

すべてを知らなくても、質問に答えてください。ありがとう!

4

1 に答える 1

34

通常、モデルが過剰適合していることをどのように判断しますか?

経験則の1つは、モデルのパフォーマンスが、保持されている検証セットや相互検証設定よりも、独自のトレーニングセットの方がはるかに優れている場合、過剰適合になる可能性があることです。しかし、それだけではありません。

私がリンクしたブログエントリでは、過剰適合をテストする手順について説明しています。トレーニングセットと検証セットのエラーをトレーニングセットのサイズの関数としてプロットします。プロットの右端に安定したギャップが見られる場合は、おそらく過剰適合です。

予測結果が良好かどうかを確認するために(この状況で)過剰適合を防ぐための最良の方法は何ですか?

差し出されたテストセットを使用します。モデルの選択(ハイパーパラメータ調整)が完全に完了した場合にのみ、このセットの評価を行ってください。トレーニングしたり、(相互)検証に使用したりしないでください。テストセットで得られるスコアは、モデルの最終評価です。これは、検証セットを誤って過剰適合させたかどうかを示す必要があります。

[機械学習会議は、コンテストのように設定されることがあります。この場合、テストセットは、最終モデルを主催者に提供するまで研究者に提供されません。その間、たとえば交差検定を使用してモデルをテストすることにより、トレーニングセットを好きなように使用できます。Kaggleは似たようなことをします。]

交差検定を使用する場合LeaveOneOut、モデルがどのように適合しすぎて良好な結果が得られる可能性がありますか?

この相互検証設定では、CVでほぼ完全に機能するまで、モデルを必要なだけ調整できるためです。

極端な例として、本質的に乱数ジェネレーターである推定量を実装したとします。交差検定で非常に低いエラーを生成する「モデル」にヒットするまで、ランダムシードを試し続けることができますが、それは正しいモデルにヒットしません。これは、交差検定に過剰適合していることを意味します。

この興味深い物語も参照してください。

于 2012-09-03T22:06:01.153 に答える