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

标签 machine-learning classification weka

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

  1. 在 Weka 中打开数据。
  2. 点击添加过滤器并从Supervised->attribute 中选择AddClassification
  3. 选择一个分类器。我选择使用默认设置的 J48
  4. 将“输出分类”设置为 false,并将输出分布 设置为 true。
  5. 运行过滤器并将类别恢复为原始名义类别。请注意添加到属性列表末尾的附加属性。它们的名称为:distribution_yourFirstClassNamedistribution_yourSecondClassName
  6. 转到“分类”选项卡并选择一个分类器:我再次选择了 J48
  7. 运行它。在这一步中,我注意到比以前更加准确。

这是创建分类器的有效方法吗?我不是在原始数据中添加分类信息来“作弊”吗?如果它是有效的,那么如何继续创建一个可以预测未标记数据的分类器?它如何添加附加属性(分布)?

我确实尝试使用 FilteredClassifier 重现相同的效果,但它不起作用。 谢谢。

最佳答案

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

但是,在您的情况下,属性和先前训练的分类器输出将用于预测您的类别。第二个 J48 模型的大部分规则很可能将基于第一个(因为类输出与 J48 的相关性比其他属性更强),但会进行一些微调以提高模型的准确性。在本例中,使用“两个头优于一个”的概念来提高模型的整体性能。

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

希望这有帮助!

关于machine-learning - Weka 中级联分类器的错误方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392291/

相关文章:

python - 如何使用 scikit-learn 中的散列技巧对二元语法进行矢量化?

image-processing - 在哪里可以获得用于 haar 训练的背景/负样本图像?

python - Keras 返回二进制结果

Weka 线性回归 ClassNotFoundException

filter - WEKA 的重采样过滤器 - 如何解释结果

python - 不同的Python最小化函数给出不同的值,为什么?

python - 如何用新数据更新 SVM 模型

machine-learning - 不平衡标签 - 混淆矩阵中的更好结果

python - 如何在 2 列上训练 ML 模型来解决分类问题?

java - 如何在 serialVersionUID 更改后在 java 中加载 libsvm 模型