Machine learning Weka中级联分类器的错误方法

Machine learning Weka中级联分类器的错误方法,machine-learning,classification,weka,Machine Learning,Classification,Weka,我有一个包含两个类的数据集,并试图使用Weka获得最佳分类器。我能得到的最佳分类器的准确率约为79%。然后我尝试将属性添加到数据中,方法是对数据进行分类,并将该分类生成的概率分布保存在数据本身中。 当我在修改后的数据上重新运行训练过程时,我获得了93%以上的准确率!!我肯定这是错的,但我不知道为什么。 以下是我所经历的确切步骤: 在Weka中打开数据 单击添加过滤器并从Supervised->attribute中选择AddClassification 选择一个分类器。我选择带有默认设置的J48

我有一个包含两个类的数据集,并试图使用Weka获得最佳分类器。我能得到的最佳分类器的准确率约为79%。然后我尝试将属性添加到数据中,方法是对数据进行分类,并将该分类生成的概率分布保存在数据本身中。 当我在修改后的数据上重新运行训练过程时,我获得了93%以上的准确率!!我肯定这是错的,但我不知道为什么。 以下是我所经历的确切步骤:

  • 在Weka中打开数据
  • 单击添加过滤器并从
    Supervised->attribute
    中选择
    AddClassification
  • 选择一个分类器。我选择带有默认设置的
    J48
  • 将“输出分类”设置为false,并将
    输出分布设置为true
  • 运行筛选器并将类还原为原始的标称类。请注意添加到属性列表末尾的其他属性。他们的名字是:
    distribution\u yourFirstClassName
    distribution\u yourSecondClassName
  • 转到分类选项卡并选择分类器:我再次选择了
    J48
  • 运行它。在这一步中,我注意到比以前更准确
  • 这是创建分类器的有效方法吗?我不是通过在原始数据中添加分类信息来“作弊”吗?如果它是有效的,我们将如何继续创建一个能够预测未标记数据的分类器?它如何添加附加属性(分发)

    我确实尝试过用
    FilteredClassifier
    复制同样的效果,但没有成功。
    谢谢。

    您所执行的过程似乎有点接近叠加集成方法,即使用分类器输出生成集成输出(更多信息)

    然而,在您的例子中,属性和先前训练的分类器输出用于预测您的类。第二个J48模型的大多数规则很可能基于第一个(因为类输出与J48的相关性比其他属性更强),但需要进行一些微调以提高模型精度。在这种情况下,使用“两个头比一个头好”的概念来提高模型的整体性能

    但这并不是说一切都好。如果您需要将J48用于看不见的数据,那么您将无法使用用于属性的J48(除非您以前保存了它)。此外,与单个J48相比,您使用多个分类器增加了更多的处理工作。这些成本也需要针对您正在解决的问题进行考虑


    希望这有帮助

    好的,下面是我如何进行级联学习的:

  • 我有数据集D,并划分为10个大小相等的分层褶皱(D1到D10),没有重复
  • 我应用算法A1在D1到D9上训练分类器C1,然后像你一样,在D10上应用C1,给我正类和负类的额外分布。我用附加的两个(或更多,取决于您希望在D10中包含哪些C1信息)属性/特性将此D10命名为D10_new
  • 接下来,我应用相同的算法在D1到D8和D10上训练分类器C2,然后像你一样,在D9上应用C2来给我正类和负类的额外分布。我将这个带有附加属性/特性的D9命名为D9_new
  • 通过这种方式,我将D1_new创建为D10_new
  • 然后我在这些D1_new到D10_new上应用了另一个分类器(可能使用算法A2)来预测标签(10倍CV是一个不错的选择)

  • 在此设置中,您消除了在测试数据之前查看数据的偏差。此外,建议A1和A2应不同。

    我不确定这种方法是否与堆叠类似。在堆叠过程中(据我所知有限),你训练几个分类器,然后训练一个元分类器在第一个分类器的结果之间进行“选择”。在我的例子中,第一个分类器生成的分布保存在数据中,然后第二个分类器将运行。这意味着第二个分类器不仅基于先前的结果,而且基于前一阶段所有结果的“分布”。如果这就像叠加一样,我应该得到同样的结果,如果我叠加两个J48。我试过了,但没有得到相同的结果。完全正确,ABT。我描述了它的相似性,即有一个一级分类器,然后有一个二级分类器,除了属性之外还获取第一个输出。它不会产生与使用堆叠方法的两个分类器相同的结果。我在一个标准数据集上试用了你提出的方法,准确率从72%提高到91%,因此该方法肯定会改善结果,但数据需要通过两个分类器来获得结果,而不是一个。有趣的方法。自从我提出这个问题以来,我就发现自从第一个分类器“看到”了整个数据之后,我基本上是在测试我的训练集,即使它使用了一个新的分类器。所以现在的问题可能是:它起作用了吗?准确度的“提升”有多大意义?最后一点:你如何使用这种方法预测未标记的数据?是的,我得到了统计上显著的提升。进行了t检验以确认这一点(尽管即使未进行试验也可以看到增压)。由于10倍CV结果令人满意,我会遵循经验法则:我会将D1_new和D10_new放在一起创建一个D_new,用A2训练分类器,并将其应用于完全看不见的测试数据集。我可以补充一点:在我的研究中,我发现当我在10倍CV设置的数据集上单独应用A1和A2时,A1对阳性类的分类很好,A2对阴性类的分类很好。也许这就是为什么