我正在尝试更好地理解我的特征向量的值如何可能影响结果。例如,假设我有一个如下所示的向量,最后一个值是结果(这是一个使用SVC的分类问题):
0.713, -0.076, -0.921, 0.498, 2.526, 0.573, -1.117, 1.682, -1.918, 0.251, 0.376, 0.025291666666667, -200, 9, 1
你会注意到,大多数值都集中在0附近,但是有一个值的数量级要小得多,为-200。
我担心这个值会使预测结果偏斜,并且由于这个值与其他值差异很大,它会被不公平地赋予更高的权重。
在创建特征向量时,这是需要担心的问题吗?还是我用来评估向量的统计测试会根据我提供的训练集来控制这个大(或小)值?在sci-kit learn中是否有你推荐的专门用于标准化向量的方法?
谢谢你的帮助!
回答:
是的,这是你应该担心的问题。SVM对任何特征尺度的变化都非常敏感,因此你需要使用预处理技术来减少这种可能性,以下是最常用的几种方法:
- 将每个特征维度线性缩放到[0,1]或[-1,1]区间
- 标准化每个特征维度,使其均值为0,方差为1
- 通过变换
sigma^(-1/2)*X
来去相关值,其中sigma = cov(X)
(数据协方差矩阵)
这些都可以使用scikit-learn轻松实现(虽然要实现第三种方法,你需要scipy来进行矩阵的平方根和求逆)