13

libsvm はデータをスケーリングするためのツールを提供しますが、Scikit-Learn (SVC 分類子の libSVM に基づく必要があります) では、データをスケーリングする方法が見つかりません。

基本的に、私は 4 つの機能を使用したいと考えています。そのうちの 3 つは 0 から 1 までの範囲で、最後の機能は「大きな」非常に変化しやすい数値です。

libSVM に 4 番目の機能を含めると (データを自動的にスケーリングする easy.py スクリプトを使用)、非常に優れた結果 (96% の精度) が得られます。Scikit-Learn に 4 番目の変数を含めると、精度は ~78% に低下しますが、それを除外すると、その機能を除外したときに libSVM で得られるのと同じ結果が得られます。したがって、スケーリングが欠落しているという問題があると確信しています。

SVM のスケーリング プロセスをプログラムで (つまり、svm-scale を呼び出さずに) 複製するにはどうすればよいですか?

4

2 に答える 2

9

あなたはその機能を持っていますsklearn.preprocessing

>>> from sklearn import preprocessing
>>> X = [[ 1., -1.,  2.],
...      [ 2.,  0.,  0.],
...      [ 0.,  1., -1.]]
>>> X_scaled = preprocessing.scale(X)

>>> X_scaled                                          
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

データの平均と単位分散はゼロになります。

于 2012-11-10T17:08:48.117 に答える