normalization/standardization 具有大量零特征的数据好吗

Is it good to normalization/standardization data having large number of features with zeros

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

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

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

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

为什么这些结果不同?

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

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

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

规范化和标准化(取决于来源,它们有时被等同使用,所以我不确定在这种情况下你所说的每一个到底是什么意思,但这并不重要)是一个一般性的建议,通常在数据或多或少均匀分布的问题。然而,根据定义,异常检测不是那种问题。如果你有一个数据集,其中大多数示例属于 class A 而只有少数属于 class B,则可能(如果没有必要)稀疏特征(几乎总是零的特征)实际上对你的问题很有鉴别力。规范化它们基本上会将它们变为零或几乎为零,使 classifier(或 PCA/SVD)很难真正掌握它们的重要性。所以如果你跳过归一化你会得到更好的准确性并不是没有道理的,你不应该觉得你正在做它 "wrong" 只是因为你是 "supposed to do it"

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

无论如何,正如我所说,不要仅仅因为它们应该起作用就应用这些技术。如果某些东西对你的问题或特定数据集不起作用,你不使用它是正确的(并且试图理解为什么它不起作用可能会产生一些有用的见解)。