我的数据大约有60个特征,大多数时间这些特征在训练数据中都是零值,只有2-3列可能有数值(确切地说,这是性能日志数据)。然而,我的测试数据在其他一些列中会有一些值。
我尝试了归一化/标准化(分别尝试了两种方法),并将数据输入到PCA/SVD(也分别尝试了两种方法)。我使用这些特征来拟合我的模型,但结果非常不准确。
然而,如果我跳过归一化/标准化步骤,直接将数据输入到PCA/SVD,然后再输入到模型中,结果非常准确(几乎超过90%的准确率)。
附注:我需要进行异常检测,因此使用了隔离森林算法。
为什么这些结果会有所不同?
回答:
归一化和标准化(根据不同的来源,它们有时被等同使用,所以我不确定你在这两种方法中具体指的是什么,但这并不重要)通常是在数据大致均匀分布的问题中推荐使用的。异常检测本质上并不是这种类型的问题。如果你的数据集中大多数样本属于类A
,只有少数属于类B
,那么稀疏特征(几乎总是零的特征)实际上可能对你的问题非常有区分性。对它们进行归一化基本上会使它们变成零或接近零,使得分类器(或PCA/SVD)难以真正理解它们的重要性。因此,如果你跳过归一化步骤得到更好的准确率,这是合理的,你不应该因为“应该这样做”而觉得自己做错了什么。
我没有异常检测的经验,但我对不平衡数据集有一些经验。你可以考虑某种形式的“加权归一化”,其中每个特征的均值和方差的计算是用一个与类中样本数量成反比的值加权的(例如examples_A ^ alpha / (examples_A ^ alpha + examples_B ^ alpha)
,其中alpha
是一个小的负数)。如果你的稀疏特征具有非常不同的尺度(例如,一个在90%的情况下为0,在10%的情况下为3,另一个在90%的情况下为0,在10%的情况下为80),你可以将它们缩放到一个共同的范围(例如[0, 1])。
无论如何,正如我所说,不要仅仅因为某些技术“应该有效”就使用它们。如果某些方法对你的问题或特定数据集不起作用,你有权不使用它(并且尝试理解为什么不起作用可能会带来一些有用的见解)。