機能の数を増やすと精度は低下しますが、prec / recallは増加します


15

機械学習は初めてです。現時点では、NLTKとpythonを使用して、ナイーブベイズ(NB)分類器を使用して、3つのクラスの小さなテキストをポジティブ、ネガティブ、またはニュートラルとして分類しています。

300,000のインスタンス(16,924のポジティブ7,477のネガと275,599のニュートラル)で構成されるデータセットを使用していくつかのテストを行った後、フィーチャの数を増やすと、精度は低下しますが、ポジティブおよびネガティブクラスの精度/リコールは増加することがわかりました。これは、NB分類器の通常の動作ですか?より多くの機能を使用する方が良いと言えますか?

一部のデータ:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

前もって感謝します...

2011/11/26を編集

Naive Bayes分類器を使用して、3つの異なる機能選択戦略(MAXFREQ、FREQENT、MAXINFOGAIN)をテストしました。最初に、精度とクラスごとのF1メジャーを示します。

ここに画像の説明を入力してください

次に、トップ100およびトップ1000の機能でMAXINFOGAINを使用するときに、トレーニングセットを増分してトレインエラーとテストエラーをプロットしました。

ここに画像の説明を入力してください

したがって、FREQENTを使用すると最高の精度が得られますが、MAXINFOGAINを使用したものが最適な分類器であるように思えますが、これは正しいですか?上位100個の機能を使用する場合、バイアスがあり(テストエラーはトレーニングエラーに近い)、トレーニングサンプルを追加しても役に立ちません。これを改善するには、さらに機能が必要です。1000個の機能を使用すると、バイアスは減少しますが、エラーは増加します... さらに機能を追加する必要がありますか?私はこれをどう解釈するか本当にわかりません...

再度、感謝します...


1
「最良の分類器」の意味に依存しますが、全体的に精度の高い分類器を作成する場合は、FREQENTを選択します。一方、ほとんどのレアクラス分類タスクのように、レアクラス(「ネガティブ」または「ポジティブ」クラスの可能性がある)をより適切に分類したい場合は、MAXINFOGAINを選択します。学習曲線の解釈は正しいと思います。100個の特徴ではバイアスがあり、それらを追加できますが、1000個では分散があり、削除できます。おそらく、より良い結果を得るために、100から1000の機能のトレードオフを試すことができます。
シモーヌ

助けてくれてありがとう、シモーネ!最後の部分を除いてすべてを理解しました... 1000の機能の大きな差異がどのように見えるか教えてください。テストや電車の誤差の違い...それはまだ私にはバイアスのように見えるそれだけではないようですので、
kanzen_master

返信にいくつか例を挙げます。曲線がそれほど近くない場合、問題は高分散として分類されます。あなたの場合、多分私はあなたに、機能が少なければパフォーマンスが良くなるので、1000個の機能では分散の問題になる可能性が高いと言ったかもしれません。トレーニングセットで計算された測定値を使用して特徴選択アルゴリズムの結果をプロットするのではなく、トレーニング(それらの2/3)と検証でデータを分割してから、トレーニングセットで特徴選択を実行し、テストセットで評価します。プロットの中央で最大値を見つける必要があります。
シモーヌ

返信いただきありがとうございます。更新された投稿の3番目の例(良好な結果、トレイン、テストエラーカーブは近すぎず、遠すぎません)は、1000個の機能を使用してプロットした学習曲線のように見えるので、約1000個の機能を使用すると「良い結果」になると思いました。ただし、この場合、エラーは大きくなり、良くありません。しかし、曲線間の距離を見るだけでは、1000個の特徴の高い分散は見られません...(ちなみに、すでにトレーニングセットとして2/3、テストセットとして1/3のデータを分割し、機能を実行していますトレーニングセットでの選択、テストセットでの評価...)
kanzen_master

1
OK。私は曲線を学ぶのは初めてで、あなたの例は本当に面白く、それらについての洞察を得ることができました。したがって、D Tに感謝します。はい、両方のケースにバイアスがあるかもしれません。私によると、あなたは非常に歪んだデータセットを持っているので、精度をテストするのではなく、F-メジャーを見ることが重要です。プロットを見てみると、機能が多ければ多いほど良いようです。実際、F尺度は改善されます。テキストの分類では、機能がテキストの単語頻度である場合、多くの機能を使用するのが一般的だと聞きました。ちなみに私はそれに慣れていないと私はあなたにそれ以上話すことができません。
シモーヌ

回答:


18

精度とFメジャー

まず、メトリックを使用するときは、それをゲームする方法を知っておく必要があります。精度は、すべてのクラスにわたって正しく分類されたインスタンスの比率を測定します。つまり、あるクラスが別のクラスよりも頻繁に発生する場合、結果の精度は明らかに支配クラスの精度によって支配されます。あなたの場合、インスタンスごとに「中立」を予測するモデルMを作成すると、結果の精度は次のようになります。

acc=neutral(neutral+positive+negative)=0.9188

良いが、役に立たない。

したがって、機能を追加すると、クラスを区別するNBのパワーが明らかに向上しましたが、「ポジティブ」と「ネガティブ」を予測することにより、ニュートラルを誤分類するため、精度が低下します(大雑把に言えば)。この動作は、NBとは無関係です。

多かれ少なかれ機能?

一般に、より多くの機能を使用するのではなく、適切な機能を使用することをお勧めします。機能選択アルゴリズムが最適なサブセットを見つけるための選択肢を多く持っている限り、より多くの機能が優れています(クロス検証の機能選択)。NBに関しては、高速で堅実な(ただし最適ではない)アプローチは、InformationGain(Ratio)を使用して機能を降順でソートし、上位kを選択することです。

繰り返しますが、このアドバイス(InformationGainを除く)は分類アルゴリズムとは無関係です。

編集27.11.11

正しい数のフィーチャを選択するためのバイアスと分散に関して多くの混乱がありました。したがって、このチュートリアルの最初のページを読むことをお勧めします:Bias-Variance tradeoff。キーエッセンスは次のとおりです。

  • 高バイアスとは、モデルが最適ではない、つまりテストエラーが高いことを意味します(シモーネが言うように、不十分です)。
  • 高分散とは、モデルがモデルの構築に使用されるサンプルに非常に敏感であることを意味します。つまり、エラーは使用するトレーニングセットに大きく依存するため、エラーの分散(異なる交差検証フォールドで評価)は非常に異なります。(オーバーフィット)

エラーがプロットされているため、プロットされた学習曲線は実際にバイアスを示しています。ただし、誤差の信頼区間はまったくプロットされないため、表示できないのは分散です。

例:3回のクロスバリデーションを6回実行すると(はい、異なるデータパーティションでの繰り返しが推奨され、Kohaviは6回の繰り返しを推奨します)、18個の値を取得します。私は今それを期待しています...

  • 特徴の数が少ない場合、平均誤差(バイアス)は低くなりますが、(18個の値の)誤差の分散は大きくなります。
  • フィーチャの数が多いと、平均誤差(バイアス)は高くなりますが、誤差(18の値)の分散は低くなります。

このエラー/バイアスの振る舞いは、まさにプロットで見られるものです。分散について声明を出すことはできません。曲線が互いに近いことは、テストセットがトレーニングセットと同じ特性を示すのに十分な大きさであり、したがって測定誤差が信頼できる可能性があることを示している可能性がありますが、これは(少なくとも私が理解した限りではそれ)(エラーの!)分散についてのステートメントを作成するには不十分です。

より多くのトレーニングサンプルを追加する場合(テストセットのサイズを固定したまま)、両方のアプローチ(機能の数が少ない場合と多い場合)の分散が減少すると予想されます。

ああ、トレーニングサンプルのデータのみを使用して、特徴選択の情報ゲインを計算すること忘れないでください!特徴選択に完全なデータを使用し、データのパーティション分割を実行して相互検証を適用したい場合がありますが、これは過剰適合につながります。私はあなたが何をしたのか分かりません、これは決して忘れてはならない警告です。


1
返事、非常に明確な説明をありがとう。機能選択戦略として最大の情報ゲインを使用し、5倍の交差検証を使用してテストしています。どの上位kの特徴を取るべきかを知るために、毎回特徴の数を増やしてアルゴリズムを繰り返しテストし、最高のf_scoreを与えるkを取る必要があると思います。ただし、「top k」はデータセットによって変わる可能性が高いと思います...
kanzen_master

1
正しい。ただし、新しいデータセットが古いデータセットに似ている場合(同じ分布を持つ同じ機能)、kは同じままです。遺伝的アルゴリズムを追加して、可能性のある解の空間をより高速に検索したり、遺伝的アルゴリズムを使用してInformationGainに依存しない最適な特徴のサブセットを見つけたりすることができます。
ステフェン

1
スタンフォード大学の講義によると、トレーニング例の数が異なる、よく分離されたトレーニング曲線とテスト曲線を見ると、実際には分散があることを意味します。もちろん、より良いアプローチは、信頼区間を推定することです。
シモーヌ

1
@DT 1.私は講義を知らないので、アンドリューグの説明を自分の説明と結び付けることはできません。ごめんなさい。2.いいえ。少数のフィーチャ=>オーバーフィッティング=>低バイアス、高分散。多数のフィーチャ=>アンダーフィッティング=>高バイアス、低分散。異なる数の機能とトレーニング例について、cvフォールドの誤差の分散をプロットすることを本当にお勧めします。
ステフェン

2
1. steffen、講義はこちらから入手できます:ml-class.org/course/video/preview_list (パートX、セクション「学習曲線」)2.なるほど。トレーニング中に学習した多くの機能=>モデルが複雑になり、トレーニングセット=>分散を
オーバーフィットすると考えていました

5

より多くの機能を使用することが有用かどうかを知るために、学習曲線をプロットします。:私は、これは明らかにあなたがここに見つけることができることを、「機械学習を適用するためのアドバイス」という名前のスタンフォード大学の機械学習クラス、第10回の単位で説明だと思いhttp://www.ml-class.org/course/video/preview_list

問題が高バイアスであるか高分散であるかを理解できる学習曲線をプロットします。トレーニングの例の数を増やす限り、トレーニングエラーテストエラー(つまり1-accuracy)をプロットする必要があります。後者は、異なるデータセットで推定された分類器のエラーです。これらの曲線が互いに近い場合、高バイアスの問題が発生するため、より多くの機能を挿入することがおそらく有益です。一方、トレーニングサンプルの数を増やす限り、曲線が完全に分離されている場合は、分散の問題が大きくなります。この場合、使用する機能の数を減らす必要があります。

編集

学習曲線の例をいくつか追加します。これらは、正規化されたロジスティック回帰で得られた学習曲線です。異なるプロットは異なるに関連していますλ

λ分散大きくなります。

高分散

λ高バイアスを

高バイアス

λ=1

良い結果


すごい!どうもありがとうございました!両方の回答は本当に役に立ちましたが、両方を返信としてマークすることはできないため、最初の回答を回答としてマークします。しかし、これは間違いなくチェックする最良の方法だと思います。
kanzen_master

ところで、最大情報ゲインスコアを持つ上位100個の機能を使用する分類器の学習曲線をプロットしようとしています。トレーニングデータセットのサイズを増やしながら、トレーニングエラーとテストエラーをプロットします。最初のトレインデータセット(徐々に増加する)とテストデータセット(すべてのテストで静的)のサイズはどれですか?再びありがとう...
kanzen_master

2
データセットをトレーニングセットとテストセットに分割します。ごく少数のトレーニング記録から始めて、記録を追加し続けます。反復ごとに、分類器のトレーニングに使用したレコードでトレーニングセットエラーを計算し、常にすべてのテストレコードでテストセットエラーを計算します。私はこれが一般的な実践で使用される標準的な方法であることを知っています。結果を見るのは面白いでしょう!乾杯、シモーヌ。
シモーヌ

1
シモーネ、最初の投稿を更新し、精度、f1尺度、学習曲線の結果、および下部の解釈を確認してください。ありがとう...
kanzen_master
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.