2017-02-09 104 views
0

我正在使用sklearn支持向量迴歸模型和使用MinMax來縮放功能的迴歸問題,但通過使用它我得到了不同的迴歸結果,這是否有意義?爲什麼縮放功能會影響迴歸的預測?

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() 

不結垢:

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]) 

使用最小最大縮放:

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內核不是線性的。

基礎上docs爲svm.SVR:

  • 內核參數:如果沒有給出,「rbf」將被使用。

  • 伽馬參數:內核係數爲「RBF」,「聚」和「S形」。如果gamma是'auto',那麼將會使用1/n_features。

RBF內核看起來很複雜,但事實並非如此。如果特徵向量與基向量相匹配,它基本上只產生1.0,並且當它們變得更遠時產生接近於0的數字。伽馬參數控制着它如何隨着距離而下降。 sklearn默認伽瑪參數顯然是一個基於您擁有多少功能的固定值。因此,如果您按比例放大或縮小特徵向量,則會得到稍微不同的結果。

我想如果您更改爲kernel=‘linear’,您會得到完全相同的預測結果。

相關問題