使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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