2017-02-09 99 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’,您会得到完全相同的预测结果。

相关问题