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