【问题标题】:Can a very large (or very small) value in feature vector using SVC bias results? [scikit-learn]使用 SVC 偏差结果可以在特征向量中获得非常大(或非常小)的值吗? [scikit-学习]
【发布时间】:2013-10-11 18:26:42
【问题描述】:

我试图更好地了解我的特征向量的值如何影响结果。例如,假设我有以下向量,其最终值为结果(例如,这是使用 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 中是否有可用的方法,您会推荐用于规范化向量?

感谢您的帮助!

【问题讨论】:

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


    【解决方案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)
    

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

    sklearn.preprocessing 模块中处理此问题的 scikit-learn 工具:MinMaxScalerStandardScalerNormalizer

    【讨论】:

      【解决方案2】:

      是的,这是您应该关心的事情。 SVM 受到任何特征尺度差异的严重影响,因此您需要一种预处理技术,以降低最流行的可能性:

      1. 将每个特征维度线性重新缩放到 [0,1] 或 [-1,1] 区间
      2. 标准化每个特征维度,使其均值=0,方差=1
      3. 通过变换 sigma^(-1/2)*X 其中sigma = cov(X)(数据协方差矩阵)对值进行去相关

      每个都可以使用 scikit-learn 轻松执行(尽管为了实现第三个,您需要一个用于矩阵平方根和求逆的 scipy)

      【讨论】:

      • 您好,感谢您的回复。我非常感谢您的意见。我尝试了以下方法:我在 scikit-learn 上使用了这里的方法来“标准化”我的训练集和测试特征向量:scikit-learn.org/0.11/modules/preprocessing.html。当我进行一些测试时,我发现我的未归一化的特征向量比归一化的特征向量表现更好。您认为这反映了我发现的结果?
      • 如果一切都已正确完成(您应该仔细检查,因为最可能的原因是错误)这意味着您的不成比例实际上有助于分类器做出正确的决定 - 所以由于缺乏标准化而引入的这种偏差正在以“正确的方式”移动决策边界。简而言之 - 不执行标准化,因为它将保证更好的结果。执行它是因为我们假设我们不知道先验哪些特征更好,哪些更差
      • @T.S.:这可能是一个特征是正确类别的强预测因子,而其余的只是噪声。特征选择可能有助于清除无用的特征。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      相关资源
      最近更新 更多