首页 > 解决方案 > 支持向量回归中的 epsilon 是否应该缩放?

问题描述

当使用来自 Scikit-learn 的支持向量回归 (SVR) 时,建议对数据进行缩放,因为支持向量机算法不是缩放不变的(请参阅用户指南)。这可以通过standardScaler()或来完成MinMaxScaler()

但是,我是否也应该缩放参数 Epsilon 的可能值?

Epsilon 指定在训练损失函数中没有惩罚与在距实际值距离 epsilon 内预测的点相关联的 epsilon 管。如果我理解正确,这意味着如果我想建立一个模型来预测房价并且我允许我的预测是 5000 欧元(即更高或更低),那么我的 epsilon 可能是“5000”。

由于 SVR 算法不知道原始房价,只知道缩放的价格,因此使用相同的过程也可以缩放 epsilon 值是有意义的。这个对吗?

例如,如果我在 0 和 1 之间调整房价。

prices = np.array([[0], [100000], [150000], [200000], [180000]])
scaler_x = MinMaxScaler(feature_range=(0, 1))
prices_scaled = scaler_x.fit_transform(prices) 
print(prices_scaled )
>>> [[0.  ]
 [0.5 ]
 [0.75]
 [1.  ]
 [0.9 ]]

我应该在 epsilon 上使用相同的缩放比例(即 5000 --> 0.025)吗?

cv = ShuffleSplit(n_splits = 10, test_size = 0.25, random_state = 0)
grd = GridSearchCV(estimator=SVR(kernel='linear'),
                        param_grid={'C': c_list,
                                    'epsilon': [0.025]}, #scaled epsilon instead of 5000?
                        cv=cv, scoring='r2')

grid_result = grd.fit(predictors_scaled, prices_scaled )

请注意,预测变量也被缩放,但使用另一种缩放。

在这个例子中,预测变量和响应都被缩放了,但是没有提到 epsilon 也应该被缩放。

如果不必缩放 epsilon,那么我应该使用哪些值?

标签: pythonmachine-learningscikit-learnsvm

解决方案


由于epsilon决定了实际与预测的灵活性,我们也需要重新调整它。现在,您是否需要完全相同级别的缩放,这是我不确定的。虽然从理论上讲,这听起来是这样(检查 eq. 4 of the tutorial),但我的直觉说它将给出一个粗略的(仍然足够好)的 epsilon 范围测量(实际上)研究。


推荐阅读