例如,学习算法的目标函数中使用的许多元素(例如支持向量机的 RBF 核或线性模型的 l1 和 l2 正则化器)假设所有特征都以零为中心并且具有相同顺序的方差。
这是来自scikit-learn
当有人说平均值预计为零时,有人可以指定他们指的是哪些元素。
我知道算法的方差应该在相似的范围内,以便为每个特征赋予相同的意义。但是有什么东西也必然期望数据中的均值为零吗?
换句话说,如果我知道每个特征的方差已经在同一范围内,那么仍然会出现问题,因为它说一些“元素”期望零均值。
例如,学习算法的目标函数中使用的许多元素(例如支持向量机的 RBF 核或线性模型的 l1 和 l2 正则化器)假设所有特征都以零为中心并且具有相同顺序的方差。
这是来自scikit-learn
当有人说平均值预计为零时,有人可以指定他们指的是哪些元素。
我知道算法的方差应该在相似的范围内,以便为每个特征赋予相同的意义。但是有什么东西也必然期望数据中的均值为零吗?
换句话说,如果我知道每个特征的方差已经在同一范围内,那么仍然会出现问题,因为它说一些“元素”期望零均值。
原因是一样的。
我假设您了解不同比例的特征如何产生问题
但仅缩放并不总是使它们具有相似的比例,因为标准偏差取决于特征的范围。
因此,如果一个特征非常大但范围很小,那么简单地缩放它不会有帮助。
让我们看一个有两个特征的例子
import numpy as np
np.set_printoptions(precision=2)
feat_A = np.array([1,2,3,4,5])
feat_B = np.array([10000000,10000001,10000002,10000003,10000005])
# Case I - Only Std
print(feat_A/feat_A.std())
print(feat_B/feat_B.std())
# Case II - Mean and Std
print((feat_A-feat_A.mean())/feat_A.std())
print((feat_B-feat_B.mean())/feat_B.std())
案例 - 我- [你可能会看到,这并不能解决问题]
[0.71 1.41 2.12 2.83 3.54]
[5812381.94 5812382.52 5812383.1 5812383.68 5812384.84]
案例 - II - [这就是我们要找的]
[-1.41 -0.71 0. 0.71 1.41]
[-1.28 -0.7 -0.12 0.46 1.63]
居中似乎不太可能会受到伤害,所以我建议无论如何都要这样做。
从理论上讲,在具有正则化的广义线性模型中,不,居中不会改变任何东西。这是因为截距项可以吸收任何变化;换档通过 100 可以简单地重写:
但是,在尝试在 中进行测试时sklearn
,我遇到了一些麻烦(笔记本):使用和不使用居中进行缩放会在惩罚逻辑回归中给出不同的结果,具体取决于求解器!(saga
给出不同的结果,但lbfgs
给出几乎相同的系数。)我还不确定这是否是一些数字问题(我以前见过,但数据集的规模更大)还是我的误解。惩罚线性回归似乎工作正常。
最后,对于带有 rbf 内核的 SVM。我对非线性内核 SVM 的理解相当有限,但是 rbf 内核应该对中心保持不变。但是,请参阅特征空间中的数据中心( pdf ),它假定在内核空间中居中可能会有所帮助。无论是出于理论还是数值原因,上述笔记本中的分类和回归版本在居中后都显示出不同的结果。