線形カーネル SVM で使用するために特徴ベクトルを正規化する適切な方法は何ですか?
LIBSVM を見ると、各機能を単一の標準的な上限/下限の範囲に再スケーリングするだけで完了しているように見えます。ただし、PyML がこの方法でデータをスケーリングする方法を提供しているようには見えません。代わりに、ベクトルを長さで正規化し、標準偏差で再スケーリングしながら各特徴値を平均でシフトするオプションがあります。
いくつかの数値を除いて、ほとんどの機能がバイナリである場合を扱っています。
私はこれの専門家ではありませんが、SVM で使用するために特徴ベクトルを正規化する一般的な方法は、その平均を減算し、その後標準偏差で割ることによって、各特徴ベクトルをセンタリングおよびスケーリングすると考えています。R では、scale 関数を使用してこれを行うことができます。
もう 1 つの方法は、各特徴ベクトルを [0,1] の範囲に変換することです。
(x - min(x)) / (max(x) - min(x))
分布が非常に歪んでいる場合、一部の機能は対数変換の恩恵を受ける可能性がありますが、これは分布を「移動」するだけでなく、分布の形状も変更します。
PyMLが正規化メソッドで行うように、L1またはL2ノルムでベクトルを正規化することにより、SVM設定で何が得られるかわかりません。バイナリ機能 (0 または 1) を正規化する必要はないと思います。