SVMを使用する場合、なぜ機能を拡張する必要があるのですか?


9

scikit-learn のStandardScalerオブジェクトのドキュメントによると:

たとえば、学習アルゴリズムの目的関数で使用される多くの要素(サポートベクターマシンのRBFカーネル、線形モデルのL1およびL2正則化器など)は、すべての特徴が0を中心とし、同じ順序で分散があると仮定します。ある特徴の分散が他のものよりも桁違いに大きい場合、それは目的関数を支配し、推定量が期待どおりに他の特徴から正しく学習できなくなる可能性があります。

分類する前に機能をスケーリングする必要があります。なぜこれを行うべきなのかを示す簡単な方法はありますか?科学論文への参照はさらに良いでしょう。私はすでに見つかったものを他の多くのは、おそらくあります。

回答:


16

すべてのカーネルメソッドは距離に基づいています。RBFカーネル関数は(を使用してシンプルさ)。κ(u,v)=exp(uv2)γ=1

与えられた3つの特徴ベクトル:

x1=[1000,1,2],x2=[900,1,2],x3=[1050,10,20].

次に、であることをにおそらくより類似しているその後に。κ(x1,x2)=exp(10000)κ(x1,x3)=exp(2905)x1x3x2

と: の相対的な違いx1

x2[0.1,0,0],x3[0.05,10,10].

だから、スケーリングせずに、私たちは、と結論付けてに似ているより、たとえ間の機能ごとに相対的な差異とはおよびものよりもはるかに大きい。x1x3x2x1x3x1x2

言い換えると、すべての特徴を比較可能な範囲にスケーリングしない場合、最大の範囲を持つ特徴がカーネル行列の計算で完全に支配されます。

これを説明する簡単な例は、次のペーパーにあります。サポートベクトル分類の実践ガイド(セクション2.2)。


また、正則化についても検討する必要があります。重みのスケールは入力のスケールに依存します...
seanv507

正則化の効果は、スケーリングが異なると、最適なも異なることを意味します。これは、この特定の問題に対してある程度直交しています。C
Marc Claesen、2015年

2
しかし、実際には、1つの次元に沿った近接性がより重要である可能性があります。したがって、目標はすべてのフィーチャに同じ差異を持たせることではなく、すべてのフィーチャに沿った距離がタスクに対してほぼ同じ重要性を持つようにスケーリングすることです。
isarandi

@Marc Claesen、変数の桁数が異なる場合、重みも桁違いになり、l2ノルムは分散が小さく、それに応じて重みが大きい入力に焦点を合わせます。別の言い方をすれば、重みノルムの正則化により、「小さな」入力が小さな効果を持つことが保証されます。これは、たとえば変数を正規化することによって(入力全体で)「小さい」を標準化した場合にのみ意味があります
seanv507

1
線形SVMにのみ適用される@ seanv507。
Marc Claesen、2015年

0

使用しているカーネルによって異なります。これまでで最も一般的に使用されている(線形を除く)は、次の形式のガウスカーネルです。

f=exp(||x1x2||22σ2)

SVMはこの関数を受け取り、それを使用してポイント()の類似性をトレーニングセット内の他のすべてのポイントと比較します。x1

(x1l1)2+(x2l2)2...+(xnln)2

ここで、は例であり、の値はランドマークです。xl

機能範囲が0〜50,000で、機能範囲が0〜0.01の場合、が合計を支配することがわかります。による影響はほとんどありません。このため、カーネルを適用する前に機能をスケーリングする必要があります。x1x2x1x2

詳細については、スタンフォードオンラインコースのCourseraの機械学習のモジュール12(サポートベクターマシン)をお勧めします(無料でいつでもご利用いただけます):https : //www.coursera.org/course/ml

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.