处理具有大量零值特征的数据时,进行归一化/标准化是否有益

我的数据大约有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])。

无论如何,正如我所说,不要仅仅因为某些技术“应该有效”就使用它们。如果某些方法对你的问题或特定数据集不起作用,你有权不使用它(并且尝试理解为什么不起作用可能会带来一些有用的见解)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注