我的数据大约有 60 个特征,在我的训练数据中大多数时候大多数都是零,只有 2-3 列可能有值(准确地说是性能日志数据)。但是,我的测试数据在其他一些列中会有一些值。
我已经完成了归一化/标准化(分别尝试了两者)并将其提供给 PCA/SVD(分别尝试了两者)。我使用这些功能来拟合我的模型,但是它给出的结果非常不准确。
然而,如果我跳过归一化/标准化步骤,直接将数据输入 PCA/SVD,然后输入模型,它会给出准确的结果(几乎高于 90% 的准确度)。
P.S.:我必须使用隔离森林算法进行异常检测。
为什么这些结果会有所不同?
最佳答案
标准化和标准化(取决于它们有时等效使用的来源,所以我不确定在这种情况下每一个的确切含义,但这并不重要)是一般建议,通常在以下问题中效果很好数据或多或少是均匀分布的。然而,根据定义,异常检测并不是那种问题。如果您有一个数据集,其中大多数示例属于 A 类,只有少数属于 B 类,则稀疏特征(如果没有必要)是可能的(如果没有必要)几乎总是为零的特征)实际上对您的问题非常具有歧视性。对它们进行标准化基本上会将它们变成零或几乎为零,从而使分类器(或 PCA/SVD)很难真正掌握它们的重要性。因此,如果跳过标准化,您会获得更好的准确性,这并不是没有道理的,并且您不应该仅仅因为“应该这样做”而觉得自己做“错”了
我没有异常检测的经验,但我有一些不平衡数据集的经验。您可以考虑某种形式的“加权归一化”,其中每个特征的均值和方差的计算使用与类中示例数量成反比的值进行加权(例如 examples_A ^ alpha/(examples_A ^ alpha + example_B ^ alpha)
,其中 alpha
是一些小的负数)。如果你的稀疏特征具有非常不同的尺度(例如,一个在 90% 的情况下为 0,在 10% 的情况下为 3,另一个在 90% 的情况下为 0,在 10% 的情况下为 80),你可以将它们缩放到公共(public)范围(例如 [0, 1])。
无论如何,正如我所说,不要仅仅因为技术应该有效就应用它们。如果某些东西不适用于您的问题或特定数据集,您有理由不使用它(并且尝试理解为什么它不起作用可能会产生一些有用的见解)。
关于python - 对具有大量零特征的数据进行归一化/标准化是否有利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370442/