web-dev-qa-db-ja.com

サポートベクターの数とトレーニングデータおよび分類子のパフォーマンスの関係は何ですか?

LibSVMを使用していくつかのドキュメントを分類しています。最終結果が示すように、文書を分類するのは少し難しいようです。しかし、モデルのトレーニング中に何かに気付きました。つまり、私のトレーニングセットがたとえば1000の場合、約800がサポートベクトルとして選択されます。私はこれが良いことなのか悪いことなのかを見つけるためにあらゆるところを見てきました。つまり、サポートベクトルの数と分類子のパフォーマンスには関係がありますか?私はこの投稿を読みました 前の投稿 。ただし、パラメーターの選択を実行しており、特徴ベクトルの属性がすべて順序付けられていることも確認しています。関係を知る必要があるだけです。ありがとう。 p.s:線形カーネルを使用しています。

66
Hossein

サポートベクターマシンは最適化の問題です。彼らは、2つのクラスを最大のマージンで分割する超平面を見つけようとしています。サポートベクトルは、このマージン内にあるポイントです。単純なものからより複雑なものまで構築する場合、理解するのが最も簡単です。

ハードマージンリニアSVM

データが線形に分離可能で、ハードマージン(スラックは許可されない)を使用しているトレーニングセットでは、サポートベクトルは、支持超平面(エッジの分割超平面に平行な超平面)に沿った点です。マージン)

Hard-Margin SVM

すべてのサポートベクトルは、正確にマージンにあります。次元の数またはデータセットのサイズに関係なく、サポートベクトルの数は2になります。

ソフトマージン線形SVM

しかし、データセットが線形分離可能でない場合はどうでしょうか?ソフトマージンSVMを導入します。データポイントがマージンの外側にあることはもう必要ありません。データポイントの一部が線を越えてマージンに流れ込むことを許可します。これを制御するには、スラックパラメーターCを使用します。 (nu-SVMのnu)これにより、トレーニングデータセットのマージンが広くなり、エラーが大きくなりますが、一般化が向上し、線形分離不可能なデータの線形分離を見つけることができます。

Soft-margin Linear SVM

現在、サポートベクトルの数は、許容されるスラックの量とデータの分布に依存します。大量のスラックを許可する場合、多数のサポートベクターがあります。スラックをほとんど許可しない場合、サポートベクターはほとんどありません。精度は、分析されるデータの適切なレベルのスラックを見つけることに依存します。一部のデータでは、高レベルの精度を得ることができないため、できるだけ最適なものを見つける必要があります。

非線形SVM

これにより、非線形SVMが実現します。まだデータを線形に分割しようとしていますが、より高次元の空間でそれをしようとしています。これは、カーネル関数を介して行われます。カーネル関数には、独自のパラメーターセットがあります。これを元の機能空間に変換すると、結果は非線形になります。

enter image description here

現在、サポートベクトルの数は、許容されるスラックの量に依存しますが、モデルの複雑さにも依存します。入力空間の最終モデルの各ねじれと回転には、定義する1つ以上のサポートベクトルが必要です。最終的に、SVMの出力はサポートベクトルとアルファであり、本質的には、特定のサポートベクトルが最終決定にどの程度影響するかを定義します。

ここで、精度は、データをオーバーフィットする可能性のある高複雑度モデルと、より良い一般化のためにトレーニングデータの一部を誤って分類する大きなマージンとの間のトレードオフに依存します。サポートベクターの数は、データが完全に過剰適合している場合、ごく少数からすべてのデータポイントまでの範囲に及ぶ可能性があります。このトレードオフは、Cおよびカーネルとカーネルパラメーターの選択により制御されます。

パフォーマンスとは、正確さを指していると言ったのではないかと思いますが、計算の複雑さの観点からパフォーマンスについても話すと思いました。 SVMモデルを使用してデータポイントをテストするには、各サポートベクトルとテストポイントの内積を計算する必要があります。したがって、モデルの計算の複雑さは、サポートベクトルの数に比例します。サポートベクトルが少ないと、テストポイントの分類が速くなります。

優れたリソース: パターン認識のためのサポートベクターマシンに関するチュートリアル

144
karenu

基本的に1000のうち800は、SVMがトレーニングセットをエンコードするためにほぼすべてのトレーニングサンプルを使用する必要があることを示しています。これは基本的に、データにあまり規則性がないことを示しています。

トレーニングデータが不足しているという大きな問題があるようです。また、このデータをより適切に分離する特定の機能についても考えてください。

20
Chris A.

サンプルの数属性の数mayの両方がサポートベクターの数に影響し、モデルを作成しますより複雑です。属性として単語やngramを使用していると思うので、それらは非常に多くあり、自然言語モデル自体は非常に複雑です。したがって、1000個のサンプルの800個のサポートベクトルは問題ないようです。 (また、SV数に大きな影響を与えるC/nuパラメーターに関する@karenuのコメントにも注意してください)。

このリコールについて直感的に理解するために、SVMの主要なアイデアを思い出してください。 SVMは多次元特徴空間で動作し、与えられたすべてのサンプルを分離するhyperplaneを見つけようとします。サンプルが多く、2つのフィーチャ(2次元)しかない場合、データと超平面は次のようになります。

enter image description here

ここでは3つのサポートベクターのみがあり、他のすべてはそれらの背後にあるため、何の役割も果たしません。これらのサポートベクトルは、2つの座標のみで定義されることに注意してください。

ここで、3次元空間があり、サポートベクトルが3つの座標で定義されているとします。

enter image description here

これは、調整するパラメーター(座標)がもう1つあり、この調整では最適な超平面を見つけるためにより多くのサンプルが必要になる場合があることを意味します。つまり、最悪の場合、SVMはサンプルごとに1つの超平面座標のみを検出します。

データが適切に構造化されている(つまり、パターンを非常によく保持している)場合、必要なサポートベクターは数個だけです。他のすべてのベクターはそれらの背後にあります。しかし、テキストは非常に悪い構造化データです。 SVMは、可能な限りサンプルを近似しようと最善を尽くします。したがって、サポートベクトルとして、ドロップよりも多くのサンプルを使用します。サンプルの数が増えると、この「異常」は減少します(より重要でないサンプルが表示されます)が、サポートベクターの絶対数は非常に多くなります。

12
ffriend

SVM分類は、サポートベクトル(SV)の数で線形です。 SVの数は最悪の場合、トレーニングサンプルの数に等しいため、800/1000はまだ最悪の場合ではありませんが、それでもかなり悪いです。

この場合も、1000個のトレーニングドキュメントは小さなトレーニングセットです。 10000以上のドキュメントにスケールアップしたときに何が起こるかを確認する必要があります。状況が改善されない場合は、ドキュメント分類に LibLinear でトレーニングされた線形SVMの使用を検討してください。これらのスケールアップははるかに優れています(モデルサイズと分類時間は特徴の数に比例し、トレーニングサンプルの数とは無関係です)。

6
Fred Foo

ソース間にいくつかの混乱があります。たとえば、教科書ISLR 6th Edでは、Cは「境界違反予算」として説明されており、Cが高いほど境界違反とサポートベクターが多くなることがわかります。ただし、Rおよびpythonのsvm実装では、パラメーターCは反対の「違反ペナルティ」として実装され、Cの値が大きいほどサポートベクトルが少なくなることがわかります。

0
user9365328