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

时间:2014-10-15 21:19:42

标签: machine-learning classification weka

我有一个包含两个类的数据集,并试图使用Weka获得最佳分类器。我能获得的最佳分类器的准确率约为79%。然后我尝试通过对数据进行分类并在数据本身中保存此分类生成的概率分布,为数据添加属性。 当我重新修改数据的培训过程时,我的准确率超过了93%!我确定这是错的,但我无法弄清楚原因。 这些是我经历的确切步骤:

  1. 打开Weka中的数据。
  2. 点击添加过滤器,然后从AddClassification
  3. 中选择Supervised->attribute
  4. 选择分类器。我选择J48默认设置。
  5. 设置"输出分类"为false并将Output Distribution设置为true。
  6. 运行过滤器并将类恢复为原始名义类。请注意添加到属性列表末尾的其他属性。它们的名称为:distribution_yourFirstClassNamedistribution_yourSecondClassName
  7. 转到“分类”标签并选择分类器:我再次选择了J48
  8. 运行它。在这一步中,我注意到比以前更准确。
  9. 这是创建分类器的有效方法吗?我没有"作弊"通过在原始数据中添加分类信息?如果它是有效的,那么如何继续创建可以预测未标记数据的分类器?如何添加附加属性(分发)?

    我确实尝试使用FilteredClassifier复制相同的效果,但它没有效果。 感谢。

2 个答案:

答案 0 :(得分:1)

您似乎已经进行的过程似乎与Stacking集合方法有些接近,其中分类器输出用于生成集合输出(更多关于here)。

但是,在您的情况下,属性和先前训练的分类器输出正用于预测您的课程。大多数第二个J48模型的规则很可能都是基于第一个(因为类输出将与J48相比更强烈地与其他属性相关联),但需要进行一些微调以提高模型精度。在这种情况下,两个头的概念优于一个'用于改善模型的整体性能。

但并不是说这一切都很好。如果您需要将J48与未看到的数据一起使用,那么您将无法使用与属性相同的J48(除非您之前保存过它)。此外,通过使用多个分类器而不是单个J48,您将添加更多处理工作。还需要考虑这些成本来解决您正在解决的问题。

希望这有帮助!

答案 1 :(得分:1)

好的,这是我进行级联学习的方式:

  1. 我有数据集D并分成10个相等大小的分层折叠(D1到D10)而不重复。
  2. 我应用算法A1训练D1到D9的分类器C1然后就像你一样,在D10上应用C1给我额外的正负类分布。我将这个D10命名为另外两个(或更多,取决于您想要包含在D10中的C1的哪些信息)属性/特征为D10_new。
  3. 接下来,我应用相同的算法训练D1上的分类器C2到D8和D10然后就像你一样,在D9上应用C2给我额外的正负类分布。我将此D9命名为D9_new附加属性/功能。
  4. 通过这种方式,我创建了D1_new到D10_new。
  5. 然后我在这些D1_new上使用另一个分类器(可能是算法A2)到D10_new来预测标签(10倍CV是一个不错的选择)。
  6. 在此设置中,您在测试之前消除了查看数据的偏见。另外,建议A1和A2应该不同。