为什么缩放功能会影响回归的预测?

时间:2017-02-09 05:27:35

标签: python machine-learning regression svm

我正在使用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])

使用MinMax缩放器:

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

虽然预测的数量级相同,但两种情况之间存在显着差异。

1 个答案:

答案 0 :(得分:0)

对于正态线性回归,正确的是缩放特征值应该没有效果。这里的区别在于sklearn的默认SVM内核不是线性的。

基于svm.SVR的docs

  • 内核参数:如果未指定,则会使用“rbf”。

  • gamma 参数:'rbf','poly'和'sigmoid'的内核系数。如果gamma为'auto',则将使用1 / n_features。

RBF内核看起来很复杂,但事实并非如此。如果特征向量与基础向量匹配,它基本上只产生1.0,并且当它们变得更远时产生一个接近0的数字。伽玛参数控制它如何随距离而下降。根据您拥有的功能数量,sklearn默认伽马参数显然是固定值。因此,如果您向上和向下缩放特征向量,您会得到略微不同的结果。

我希望如果你改为kernel=‘linear’,你会得到完全相同的预测。