【问题标题】:Is it good to normalization/standardization data having large number of features with zeros对具有大量零特征的规范化/标准化数据有好处吗
【发布时间】:2018-01-04 08:14:22
【问题描述】:

我有大约 60 个特征的数据,并且大多数时候在我的训练数据中大部分时间都是零,只有 2-3 列可能有值(准确地说是它的性能日志数据)。但是,我的测试数据在其他一些列中会有一些值。

我已经完成了标准化/标准化(分别尝试)并将其提供给 PCA/SVD(分别尝试)。我使用这些功能来拟合我的模型,但是它给出的结果非常不准确。

然而,如果我跳过归一化/标准化步骤,直接将我的数据提供给 PCA/SVD,然后提供给模型,它会给出准确的结果(准确率几乎超过 90%)。

P.S.:我必须使用隔离森林算法进行异常检测。

为什么这些结果各不相同?

【问题讨论】:

    标签: python machine-learning pca svd normalize


    【解决方案1】:

    规范化和标准化(取决于它们有时被等效使用的来源,所以我不确定在这种情况下你的意思是什么,但这并不重要)是一般性建议,通常适用于以下问题数据或多或少是均匀分布的。然而,根据定义,异常检测不是那种问题。如果您有一个数据集,其中大多数示例属于A 类,而只有少数属于B 类,那么稀疏特征(几乎总是为零的特征)可能(如果没有必要)实际上非常歧视你的问题。归一化它们基本上会将它们变成零或几乎为零,使得分类器(或 PCA/SVD)很难真正掌握它们的重要性。因此,如果您跳过规范化,您可以获得更好的准确性并不是不合理的,并且您不应该仅仅因为您“应该这样做”而觉得自己做“错”了

    我没有异常检测方面的经验,但我有一些不平衡数据集的经验。您可以考虑某种形式的“加权归一化”,其中每个特征的均值和方差的计算使用与类中示例数量成反比的值加权(例如examples_A ^ alpha / (examples_A ^ alpha + examples_B ^ alpha)alpha 一些小的负数数字)。如果您的稀疏特征具有非常不同的比例(例如,一个在 90% 的情况下为 0,在 10% 的情况下为 3,在 90% 的情况下为 0,在 10% 的情况下为 80),您可以将它们缩放到公共范围(例如 [0, 1])。

    无论如何,正如我所说,不要仅仅因为它们应该起作用而应用技术。如果某些东西对您的问题或特定数据集不起作用,您有权不使用它(尝试了解它为什么不起作用可能会产生一些有用的见解)。

    【讨论】:

    • 谢谢。这有帮助!几乎每个博客都提到在应用于 PCA 之前对数据进行标准化,这就是为什么想知道如果在我的特殊情况下跳过这一步会怎样。是的,您在标准化之后将那些具有“0”值的特征分配给非常微不足道的值,例如 10^-8 范围。
    【解决方案2】:

    任何在训练集中只有零(或任何其他常数值)的特征,对任何机器学习模型都没有用处,也不能用处。你应该丢弃它们。模型无法从中学习任何信息,因此测试数据是否具有一些非零值并不重要。

    通常,您应该在为 PCA/SVD 提供数据之前进行标准化或标准化,否则这些方法会捕捉到数据中的错误模式(例如,如果特征之间的尺度不同)。

    关于准确性差异背后的原因,我不确定。我想这与数据集的某些特性有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-06
      • 2019-11-08
      • 2021-05-28
      • 1970-01-01
      • 2021-03-01
      • 2020-03-16
      • 1970-01-01
      • 2017-04-05
      相关资源
      最近更新 更多