使用Weka进行类别预测不正确

我使用的是WEKA API weka-stable-3.8.1
我尝试使用J48决策树(Weka的C4.5实现)。我的数据大约有22个特征和一个名义类,有两个可能的值:不是
在使用以下代码进行评估时:

Classifier model = (Classifier) weka.core.SerializationHelper.read(trainedModelDestination);Evaluation evaluation = new Evaluation(trainingInstances);evaluation.evaluateModel(model, testingInstances);System.out.println("Number of correct predictions : "+evaluation.correct());

我得到的所有预测都是正确的。但是,当我使用以下代码单独尝试这些测试用例时:

for(Instance i : testingInstances){    double predictedClassLabel = model.classifyInstance(i);    System.out.println("predictedClassLabel : "+predictedClassLabel);}

我总是得到相同的输出,即0.0

为什么会这样?


回答:

应该早点更新。这是我如何解决这个问题的:

训练阶段,模型从你的训练集学习。在学习过程中,它也会遇到分类/名义特征。

大多数算法需要数值来工作。为了处理这个问题,算法将变量映射到特定的数值。这里有更详细的解释

由于算法在训练阶段已经学会了这一点,Instances对象保存了这些信息。在测试阶段,你必须使用在训练阶段创建的相同Instances对象。否则,测试分类器将无法正确地将你的名义值映射到预期的值。

注意:

这种编码在非树形模型中会导致偏见的训练结果,在这种情况下应该使用独热编码

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注