我有大约60个特征的数据,大多数是零,大部分时间在我的训练数据中,只有2-3个科尔可能有值(准确地说,它的perf日志数据)。但是,我的测试数据将在其他列中有一些值。
我已经完成了标准化/标准化(分别进行了两次尝试),并将其提供给PCA/SVD(分别进行了两次尝试)。我使用这些特性来适应我的模型,但是,它给出了非常不准确的结果。
然而,如果我跳过归一化/标准化步骤,直接将数据提供给PCA/SVD,然后再输入到模型中,则其结果准确(几乎超过90%的准确率)。
P.S.:我必须做异常检测,所以使用隔离森林阿尔戈。
为什么这些结果是不同的?
发布于 2017-07-28 10:37:59
规范化和标准化(取决于它们有时被等效地使用的源,所以我不知道在本例中每一个都是什么意思,但这并不重要)是一个一般的建议,通常在数据分布或多或少都是均匀的问题上工作得很好。然而,根据定义,异常检测并不是这样的问题。如果您有一个数据集,其中大多数示例属于类A,只有少数属于类B,那么稀疏特性(几乎总是为零的特性)实际上对您的问题有很大的区别(如果不是必要的话)。规范化它们基本上会使它们变为零或几乎为零,使得分类器(或PCA/SVD)很难真正理解它们的重要性。因此,如果您跳过规范化,您就可以获得更好的准确性,而且您不应该因为“应该这么做”就觉得自己做得“不对”。
我没有异常检测的经验,但我有一些不平衡的数据集。您可以考虑某种形式的“加权归一化”,其中每个特征的均值和方差的计算都是加权的,其值与类中的示例数成反比(例如,examples_A ^ alpha / (examples_A ^ alpha + examples_B ^ alpha),alpha,一些小的负数)。如果您的稀疏特性具有非常不同的比例(例如,90%的情况下为0,10%的情况下为3,而90%的情况下为0,10%的情况下为80 ),则只需将它们缩放到一个公共范围(例如0,1)。
在任何情况下,正如我所说,不要仅仅因为它们应该起作用而应用技术。如果某些东西对您的问题或特定的数据集不起作用,那么您有理由不使用它(并且试图理解它不起作用的原因可能会产生一些有用的见解)。
发布于 2017-07-28 10:08:34
在训练集中只有零(或任何其他常量值)的任何特性对于任何ML模型都是无效的,也不可能有用。你应该抛弃他们。模型无法从它们那里学习到任何信息,所以测试数据是否有一些非零值并不重要。
通常,在为PCA/SVD提供数据之前,您应该进行规范化或标准化,否则这些方法会在数据中捕获错误的模式(例如,如果特征之间的比例不同)。
关于这种准确性差异背后的原因,我不确定。我想这与数据集的一些特性有关。
https://stackoverflow.com/questions/45370442
复制相似问题