Benötigt die Testdatei in weka die gleiche oder eine geringere Anzahl von Funktionen als train?

Ich habe zwei verschiedene .arff-Dateien aus zwei verschiedenen Datensätzen vorbereitet, eine zum Testen und eine zum Trainieren. Jeder von ihnen hat gleiche Instanzen, aber unterschiedliche Merkmale, die die Dimensionalität des Merkmalsvektors für jede Datei ändern. Wenn ich Kreuzvalidierung auf jeder dieser Akten tat, arbeiten sie tadellos. Dies zeigt, dass .arff-Dateien ordnungsgemäß vorbereitet sind und keinen Fehler aufweisen.

Jetzt, wenn ich die Zugakte benutze, die eine geringere Abmessung als die Testakte hat, um sie zu bewerten. Ich erhalte folgende Fehlermeldung.

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)

Benötigt die Testdatei in weka die gleiche oder eine geringere Anzahl von Funktionen als train? Code zur Bewertung

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));
}
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage