4

これは、Tf-IDF(項頻度-逆ドキュメント頻度)を使用したngramによる線形回帰に関する質問です。これを行うために、線形回帰にnumpyスパース行列とsklearnを使用しています。

ユニグラムを使用すると、53のケースと6000を超える機能があります。予測は、LeaveOneOutを使用した相互検証に基づいています。

ユニグラムスコアのみのtf-idfスパース行列を作成すると、ユニグラム+バイグラムスコアのtf-idfスパース行列を作成する場合よりもわずかに良い予測が得られます。行列に追加する列(トリグラム、クアッドグラム、クイントグラムなどの列)が多いほど、回帰予測の精度は低くなります。

これは一般的ですか?これはどのように可能ですか?機能が多ければ多いほど良いと思いました。

4

2 に答える 2

15

バイグラムのパフォーマンスがユニグラムよりも悪くなることは一般的ではありませんが、それが発生する可能性がある状況があります。特に、機能を追加すると、過剰適合につながる可能性があります。n-gramが長くなることはまれであり、idf値が高くなるため、Tf-idfがこれを軽減する可能性は低いです。

あなたがどのような種類の変数を予測しようとしているのかわかりません。テキストに対して回帰を行ったことがありませんが、考えさせるための文献からの比較可能な結果を​​次に示します。

  • 小さな(しかし自明ではない)トレーニングセットを使用したランダムテキスト生成では、7グラムは入力テキストをほぼ逐語的に再構築する傾向があります。つまり、完全な過剰適合を引き起こしますが、トリグラムは「新しい」がまだある程度文法的/認識可能なテキストを生成する可能性が高くなります(Jurafsky&Martinを参照してください;どの章を思い出せないので、コピーが手元にありません)。
  • カーネルマシンで実行される分類スタイルのNLPタスクでは、2次カーネルは3次カーネルよりもうまくいく傾向があります。これは、3次カーネルがトレーニングセットに適合しないことが多いためです。ユニグラム+バイグラムの特徴は、二次カーネルの特徴空間のサブセット、および立方カーネルの{1,2,3}グラムの特徴空間と考えることができることに注意してください。

正確に何が起こっているかは、トレーニングセットによって異なります。単に小さすぎる可能性があります。

于 2012-09-03T12:27:29.977 に答える
9

larsmansが言ったように、変数/機能を追加すると、モデルが過剰適合しやすくなり、テストの精度が低下します。scikit-learnのマスターブランチにはmin_df、出現回数が少ない機能をカットオフするパラメーターがあります。したがってmin_df==2min_df==5偽のバイグラムを取り除くのに役立つかもしれません。

または、次のクラスのいずれかを使用して、L1またはL1 + L2ペナルティ付き線形回帰(または分類)を使用できます。

  • sklearn.linear_model.Lasso(回帰)
  • sklearn.linear_model.ElasticNet(回帰)
  • sklearn.linear_model.SGDRegressor(回帰)ペナルティ付き=='elastic_net'または'l1'
  • sklearn.linear_model.SGDClassifier(分類)ペナルティ付き=='elastic_net'または'l1'

これにより、偽の特徴を無視し、ノイズの多い特徴に対して多くのゼロの重みを持つスパースモデルを作成することが可能になります。ただし、正則化パラメーターのグリッド検索は非常に重要です。

scikit-learnのテキスト分類の例を実行するなど、単変量の特徴選択を試すこともできます(SelectKBestおよびchi2ユーティリティを確認してください)。

于 2012-09-03T12:41:34.107 に答える