2017-02-09 11 views
0

私はsklearnのサポートベクトル回帰モデルを使って回帰問題に取り組んでいますが、MinMaxを使ってそのフィーチャをスケールしていますが、それを使って回帰の結果が違うのですが、意味がありますか? MinMaxスケーラを使用機能のスケーリングが回帰の予測に影響するのはなぜですか?

model.fit(X_training,Y_training) 
print model.predict(X_training)[0:10] 

array([ 4.99980599, 6.99479293, 4.9784396 , 5.03911175, 6.99557904, 
     6.57214885, 6.99454049, 5.60940831, 6.99989978, 5.98628179]) 

:スケーリング無し

import pandas as pd 
import numpy as np 
from sklearn import svm 
from sklearn.preprocessing import MinMaxScaler 

np.random.seed(0) 
X_training = np.random.rand(100,15)*10 
Y_training = np.random.rand(100,1)*10 
model = svm.SVR() 

予測は、同じ大きさのオーダーであるが

scaler = MinMaxScaler() 
X_scaled = scaler.fit_transform(X_training) 
model.fit(X_scaled,Y_training) 
model.predict(X_scaled)[0:10] 

array([ 5.63521939, 6.70378514, 5.83393228, 5.33274858, 6.47539108, 
     5.61135278, 5.7890052 , 5.74425789, 6.15799404, 6.1980326 ]) 

は両方のケースの間に有意な差があります。

答えて

0

通常の線形回帰の場合、フィーチャ値のスケーリングは効果がないはずです。違いは、sklearnのデフォルトのSVMカーネルは線形ではないという点です。 svm.SVRためdocsに基づいて

  • カーネルパラメータ:何も指定されていない場合は、「rbfは」が使用されます。

  • ガンマパラメータ: 'rbf'、 'poly'、 'sigmoid'のカーネル係数。ガンマが 'auto'の場合、代わりに1/n_featuresが使用されます。

RBFカーネルは複雑に見えますが、そうではありません。特徴ベクトルが基底ベクトルと一致する場合、基本的には1.0を生成し、遠くなるにつれて0に近い数を生成します。ガンマパラメータは、距離とともに減少する方法を制御します。 sklearnのデフォルトのガンマパラメータは、明らかにあなたが持っているフィーチャの数に基づいて固定値です。したがって、フィーチャベクタを拡大/縮小すると、わずかに異なる結果が期待されます。

kernel=‘linear’に変更すると、まったく同じ予測が得られると思います。

関連する問題