使用SVC偏差的特征向量中的非常大(或非常小)的值是否会产生? [scikit学习]

时间:2013-10-04 16:44:44

标签: vector machine-learning scikit-learn svc supervised-learning

我想更好地了解我的特征向量的值如何影响结果。例如,假设我有以下向量,最终值为结果(例如,这是使用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中是否有可用的方法专门学习您建议将载体标准化?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

是的,这是应该关注的事情。 SVM受到任何特征尺度差异的严重影响,因此您需要一种预处理技术,以便从最受欢迎的方法中减少它的可能性:

  1. 将每个要素尺寸线性重新缩放为[0,1]或[-1,1]间隔
  2. 规范化每个要素尺寸,使其具有均值= 0和方差= 1
  3. 通过转化sigma^(-1/2)*X解除相关值,其中sigma = cov(X)(数据协方差矩阵)
  4. 每个都可以使用scikit-learn轻松执行(虽然为了实现第三个,你需要一个scipy用于矩阵平方根和反演)

答案 1 :(得分:1)

  

我想更好地理解我的特征向量的值如何影响结果。

然后这是你的数学。我们将线性内核作为一个简单的例子。它需要一个样本x和一个支持向量sv,并计算它们之间的点积。点产品的天真Python实现将是

def dot(x, sv):
    return sum(x_i * sv_i for x_i, sv_i in zip(x, sv))

现在,如果其中一个功能的范围远远超过所有其他功能(在xsv中,或者更糟,在两者中),那么与此功能对应的术语将会支配总和。

多项式和RBF内核也出现了类似的情况。多核只是线性内核的(移位)功率:

def poly_kernel(x, sv, d, gamma):
    return (dot(x, sv) + gamma) ** d

并且RBF内核是xsv之间距离的平方,乘以常数:

def rbf_kernel(x, sv, gamma):
    diff = [x_i - sv_i for x_i, sv_i in zip(x, sv)]
    return gamma * dot(diff, diff)

在每种情况下,如果一个特征具有极端范围,它将主导结果,其他特征将被有效忽略,除了打破关系。

scikit-learn工具,用于处理sklearn.preprocessing模块中的实时工具:MinMaxScalerStandardScalerNormalizer