为什么我们在weka评估函数中使用训练数据?

时间:2016-05-14 05:50:44

标签: java classification weka

我正在使用weka进行分类。我正在使用不同的火车和测试数据集。我注意到在评估测试数据集时,我们在评估函数中使用训练数据。有谁知道为什么我们使用训练数据?为什么不测试数据?我的意思是在下面的代码中,为什么我们在第6行使用火车?为什么不测试?

        1.  trainsource = new DataSource(train_file_path);
        2.  trains = trainsource.getDataSet();
        3.  trains.setClassIndex(0);

        4.  testsource = new DataSource(test_file_path);
        5.  tests = testsource.getDataSet();


        6.  evaluation= new Evaluation(**trains**);     
        7. model.buildClassifier(trains);
        8. evaluation.evaluateModel(model, tests);

谢谢!提前!!

1 个答案:

答案 0 :(得分:1)

因为这是机器学习的方式。他们通过使用“训练数据”来训练分类器。 WEKA通常以“arff格式”获取培训文件。 训练数据在属性下有很多数据。培训文件示例:

@relation maitre

@attribute patrons {none, some, full}
@attribute waitEstation {0-10,10-30,30-60,>60}
@attribute reservation {TRUE, FALSE}
@attribute bar {TRUE, FALSE}
@attribute alternative {TRUE, FALSE}
@attribute sit {yes, no}

@data
some,0-10,TRUE,FALSE,TRUE,yes
full,30-60,FALSE,FALSE,TRUE,no
some,0-10,FALSE,TRUE,FALSE,yes
full,10-30,FALSE,FALSE,TRUE,yes
full,>60,TRUE,FALSE,TRUE,no
some,0-10,TRUE,TRUE,FALSE,yes
none,0-10,FALSE,TRUE,FALSE,no
some,0-10,TRUE,FALSE,FALSE,yes
full,>60,FALSE,TRUE,FALSE,no
full,10-30,TRUE,TRUE,TRUE,yes
none,0-10,FALSE,FALSE,FALSE,no
full,30-60,FALSE,TRUE,TRUE,no

现在分类器可以是任何类型,例如:朴素贝叶斯分类器,J48,SVM等。当使用训练数据集训练分类器时,它根据WEKA创建“模型”。现在,您可以使用此创建的“模型”验证您的“测试集”。所以'测试数据'用于验证模型。

现在,如果您使用上述训练数据集训练分类器,您现在可以预测未知类。例如,如果要预测属性“sit”。您将需要以下测试数据:

@relation maitretest

@attribute patrons {none, some, full}
@attribute waitEstation {0-10,10-30,30-60,>60}
@attribute reservation {TRUE, FALSE}
@attribute bar {TRUE, FALSE}
@attribute alternative {TRUE, FALSE}
@attribute sit {yes, no}

@data
some,0-10,TRUE,FALSE,TRUE,?
full,30-60,FALSE,FALSE,TRUE,?

注意?标记代替属性'sit'。您现在可以预测未知类。希望这能解决你的疑虑:)