Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Weka:如何指定分割百分比?_Java_Weka - Fatal编程技术网

Java Weka:如何指定分割百分比?

Java Weka:如何指定分割百分比?,java,weka,Java,Weka,我已经编写了创建模型并保存它的代码。它很好用。我的理解是,默认情况下,数据分为10倍。我希望在创建模型时将数据分成两组(训练和测试)。在WekaUI上,我可以使用“百分比分割”单选按钮来完成。我想知道如何通过代码来实现它。我想把它分成两部分,80%是培训,20%是测试。这是我的密码 FilteredClassifier model = new FilteredClassifier(); model.setFilter(new StringToWordVector(

我已经编写了创建模型并保存它的代码。它很好用。我的理解是,默认情况下,数据分为10倍。我希望在创建模型时将数据分成两组(训练和测试)。在WekaUI上,我可以使用“百分比分割”单选按钮来完成。我想知道如何通过代码来实现它。我想把它分成两部分,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();
此处的trainingSet已填充实例对象。有人能帮我吗

提前谢谢

在UI类的方法
startClassifier()
中,我找到了以下代码:

//分割百分比
int trainSize=(int)数学整数(inst.numInstances()*百分比
/ 100);
int testSize=inst numInstances()-列车尺寸;
实例列车=新实例(inst,0,列车大小);
实例测试=新实例(inst、TRAINSSIZE、testSize);
所以在对数据集进行随机化之后

trainingSet.randomize(新java.util.Random(0));
。。。我建议您以相同的方式拆分
培训集

int trainSize=(int)Math.round(trainingSet.numInstances()*0.8);
int testSize=trainingSet.numInstances()-trainSize;
实例序列=新实例(trainingSet,0,trainSize);
实例测试=新实例(trainingSet、trainSize、testSize);
然后使用
Classifier#buildClassifier(实例数据)
使用80%的设置实例训练分类器:

model.build分类器(train);

更新:多亏了@ChengkunWu的回答,我在上面添加了随机化步骤。

您可能还需要随机化分割

data.randomize(new java.util.Random(0));

答案是正确的。但在这种情况下,分解为训练集和测试集并不是随机的。如何将数据集随机拆分为训练和测试?我是说。。。从数据集中随机抽取数据,形成训练集和测试集。@Jan Eglinger这个简短但非常重要的注释应该添加到公认的答案中为什么我们需要将分割随机化?!你能在答复中具体说明这一点吗。感谢you@F505在分割之前,我将整个数据集随机化,这样我就可以更有信心在分割集中得到更好的类分布。例如,如果输入数据集是按标签排序的,这一点很重要,尽管它对严重倾斜的数据效果较差。