我编写了代码来创建模型并保存它.它工作正常.我的理解是,默认情况下,数据分为10倍.我想在创建模型时将数据分成两组(训练和测试).在Weka UI上,我可以使用"Percentage split"单选按钮来完成.我想知道如何通过代码来完成它.我希望它分为两部分,80%是培训,20%是测试.这是我的代码.
FilteredClassifier model = new FilteredClassifier();
model.setFilter(new StringToWordVector());
model.setClassifier(new NaiveBayesMultinomial());
try {
model.buildClassifier(trainingSet);
} catch (Exception e1) { // TODO Auto-generated catch block
e1.printStackTrace();
}
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(
"/Users/me/models/MyModel.model"));
oos.writeObject(model);
oos.flush();
oos.close();
Run Code Online (Sandbox Code Playgroud)
trainingSet这里已经填充了Instances对象.有人可以帮我弄这个吗?
提前致谢!
Jan*_*ger 22
在UI类ClassifierPanel的方法中startClassifier(),我找到了以下代码:
// Percent split
int trainSize = (int) Math.round(inst.numInstances() * percent
/ 100);
int testSize = inst.numInstances() - trainSize;
Instances train = new Instances(inst, 0, trainSize);
Instances test = new Instances(inst, trainSize, testSize);
Run Code Online (Sandbox Code Playgroud)
所以随机化你的数据集......
trainingSet.randomize(new java.util.Random(0));
Run Code Online (Sandbox Code Playgroud)
......我建议你trainingSet以同样的方式分裂你:
int trainSize = (int) Math.round(trainingSet.numInstances() * 0.8);
int testSize = trainingSet.numInstances() - trainSize;
Instances train = new Instances(trainingSet, 0, trainSize);
Instances test = new Instances(trainingSet, trainSize, testSize);
Run Code Online (Sandbox Code Playgroud)
然后使用Classifier#buildClassifier(Instances data)80%的设置实例来训练分类器:
model.buildClassifier(train);
Run Code Online (Sandbox Code Playgroud)
更新:感谢@ ChengkunWu的回答,我在上面添加了随机化步骤.
小智 8
您可能还想将分组随机化.
data.randomize(new java.util.Random(0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12363 次 |
| 最近记录: |