在是否WEKA测试文件要求相同或更少的多项功能为火车?(Does test file in weka

2019-06-25 08:48发布

我从两个不同的数据集,一个用来测试和其他培训准备了两个不同的.arff文件。 他们每个人都有平等的实例,但不同的功能改变特征向量的维数为每个文件。 当我做了这些文件的交叉验证,他们是完美的工作。 这说明.arff文件是妥善准备,并没有任何错误。

现在,如果我使用相比,评价测试文件具有较少维度火车文件。 我得到了下面的错误。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5986
at  weka.classifiers.bayes.NaiveBayesMultinomial.probOfDocGivenClass(NaiveBayesMultinomial.java:295)
at weka.classifiers.bayes.NaiveBayesMultinomial.distributionForInstance(NaiveBayesMultinomial.java:254)
at weka.classifiers.Evaluation.evaluationForSingleInstance(Evaluation.java:1657)
at weka.classifiers.Evaluation.evaluateModelOnceAndRecordPrediction(Evaluation.java:1694)
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1574)
at TrainCrossValidateARFF.main(TrainCrossValidateARFF.java:44)

在是否WEKA测试文件要求相同或更少的多项功能为火车? 规范评价

public class TrainCrossValidateARFF{
    private static DecimalFormat df = new DecimalFormat("#.##");
    public static void main(String args[]) throws Exception
    {
            if (args.length != 1 && args.length != 2) {
                    System.out.println("USAGE: CrossValidateARFF <arff_file> [<stop_words_file>]");
                    System.exit(-1);
            }
            String TrainarffFilePath = args[0];
            DataSource ds = new DataSource(TrainarffFilePath);
            Instances Train = ds.getDataSet();
            Train.setClassIndex(Train.numAttributes() - 1);

            String TestarffFilePath = args[1];
            DataSource ds1 = new DataSource(TestarffFilePath);
            Instances Test  = ds1.getDataSet();
            // setting class attribute
            Test.setClassIndex(Test.numAttributes() - 1);

            System.out.println("-----------"+TrainarffFilePath+"--------------");
            System.out.println("-----------"+TestarffFilePath+"--------------");
            NaiveBayesMultinomial naiveBayes = new NaiveBayesMultinomial();
            naiveBayes.buildClassifier(Train);

            Evaluation eval = new Evaluation(Train);
            eval.evaluateModel(naiveBayes,Test);
            System.out.println(eval.toSummaryString("\nResults\n======\n", false));
}
}

Answer 1:

在是否WEKA测试文件要求相同或更少的多项功能为火车? 规范评价

的功能相同数量是必要的。 您可能需要插入? 类属性了。

据Weka的建筑师马克·霍尔

为了兼容,两套实例的报头信息需要相同的 - 相同数量的属性,在同一顺序相同的名称。 此外,任何名义属性必须在两套实例的相同顺序声明相同的值。 在您的测试设置未知类值只设置每个丢失的价值 - 即“?”。



Answer 2:

据Weka中的维基 ,特征的数量必须是两者相同的训练和测试集。 也将这些特征的类型(例如,名义上的,数字,等)需要是相同的。

另外,我认为你没有应用任何Weka的过滤器,或者您的数据集。 该数据集往往成为不相容的 ,如果你在每个数据集(即使是相同的过滤器)单独应用滤镜。



Answer 3:

如何把一个数据集为训练和测试集?

您可以使用RemovePercentage过滤器(包weka.filters.unsupervised.instance)。

在资源管理器只是做到以下几点:

训练集:

-load完整数据集

- 选择所述RemovePercentage滤波器在预处理面板

-set为分体式正确的百分比

-apply过滤器

-SAVE所生成的数据作为新文件

测试设置:

-load完整数据集(或只使用撤消恢复的变更到数据集)

- 选择的RemovePercentage过滤器,如果尚未选择

-set的invertSelection属性为true

-apply过滤器

-SAVE所生成的数据作为新的文件



文章来源: Does test file in weka requires same or less number of features as train?