我正在使用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 ])
虽然预测的数量级相同,但两种情况之间存在显着差异。
答案 0 :(得分:0)
对于正态线性回归,正确的是缩放特征值应该没有效果。这里的区别在于sklearn的默认SVM内核不是线性的。
基于svm.SVR的docs:
内核参数:如果未指定,则会使用“rbf”。
gamma 参数:'rbf','poly'和'sigmoid'的内核系数。如果gamma为'auto',则将使用1 / n_features。
RBF内核看起来很复杂,但事实并非如此。如果特征向量与基础向量匹配,它基本上只产生1.0,并且当它们变得更远时产生一个接近0的数字。伽玛参数控制它如何随距离而下降。根据您拥有的功能数量,sklearn默认伽马参数显然是固定值。因此,如果您向上和向下缩放特征向量,您会得到略微不同的结果。
我希望如果你改为kernel=‘linear’
,你会得到完全相同的预测。