Weka 分类问题使用 Java API

Classification issues weka using Java API

我正在使用 10 折交叉验证技术来训练 20 万条记录。目标 class 索引就像

Status {PASS,FAIL}

通过的实例数约为 144K,失败的实例数约为 6K。

同时使用 J48 训练模型。它无法找到故障。准确率为 95%,但大多数情况下它预测只是成功。在我们的例子中,我们需要找到实际发生的故障。

所以我的问题主要是假设分析

  1. 在训练过程中 class 个实例之间的分布真的很重要吗(在我的例子中是通过,失败)。

  2. weka J48 树中有哪些可能的值可以更好地训练,因为我看到每 1000 条记录中有 2% 的失败。因此,如果我们增加成功场景,成功率就会增加。

  3. 他们之间的比例应该是多少,才能更好的训练他们。

就比率而言,我在 API 中找不到任何东西。

我没有添加代码,因为 Java API 和 weka GUI 工具都会发生这种情况。

非常感谢。

这里的问题是你的数据集很不平衡。关于如何帮助完成 class 化任务,您确实有一些选择:

  1. 使用 SMOTE 等算法为您的少数群体 class 生成合成实例。这应该会提高您的表现。
  2. 并非在所有情况下都可行,但您可以尝试将大多数 class 分成几个较小的 class。这将有助于平衡。
  3. 我相信 Weka 有一个 One Class Classifier。这允许查看较大 class 的决策边界,并将少数 class 视为异常值,从而有望实现更好的 class 化。请参阅 here 了解 Weka 的实现。

编辑: 您还可以使用 classifier 来根据它们是否正确对 classifications 进行加权。同样,Weka 将其作为元 classifier 可以应用于大多数基础 classifier,请再次参阅 here