1

私の質問は Weka Forecasting Pluginに関連しています。Weka Forecaster を使用して 6 の予測期間で sin(x) の値を予測しようとしています。アルゴリズムは SMOReg で、さまざまなラグ (1 - 24) を使用しようとしています。そのためにループを使用しています。私が書いたプログラムは完璧に動作していますが、問題は、プログラムから取得した結果が、Weka GUI を直接使用した場合とは異なることであり、その理由がわかりません。何か案は?

アルゴリズムの同じ「オプション」を使用するようにしましたが、それでも結果は異なります。

コードは次のとおりです。

import java.io.*;
import java.util.*;
import java.util.List;
import weka.core.Instances;
import weka.classifiers.Evaluation;
import weka.classifiers.functions.*;
import weka.classifiers.rules.*;
import weka.classifiers.meta.*;
import weka.classifiers.trees.*;
import weka.classifiers.evaluation.NumericPrediction;
import weka.classifiers.timeseries.WekaForecaster;
import weka.classifiers.timeseries.core.TSLagMaker;
import weka.classifiers.timeseries.core.TSLagMaker.Periodicity;
import weka.classifiers.timeseries.eval.TSEvaluation;
import weka.classifiers.timeseries.eval.ErrorModule;
import weka.core.converters.ConverterUtils.DataSource;

public class TimeSeriesSin {
    static Scanner console = new Scanner(System.in);
    public static void main(String[] args) throws FileNotFoundException{
        try {
            String pathToSinData = "C:/Users/khouloud/Desktop/AUSmaster/thesis/summer/chapter1/sin_10.arff";

            PrintWriter out = new PrintWriter("C:/Users/khouloud/Desktop/AUSmaster/thesis/summer/chapter1/try_sin_10.txt");

            DataSource source = new DataSource(pathToSinData);
            Instances diab = source.getDataSet();

            for(int i = 1; i <= 24; i++) {
                WekaForecaster forecaster = new WekaForecaster();
                forecaster.setFieldsToForecast("sin");
                SMOreg tr = new SMOreg();

                String options = "weka.classifiers.functions.SMOreg -C 1.0 -N 0 -I \"weka.classifiers.functions.supportVector.RegSMOImproved -L 0.001 -W 1 -P 1.0E-12 -T 0.001 -V\" -K \"weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0\"";
                tr.setOptions(weka.core.Utils.splitOptions(options));

                forecaster.setBaseForecaster(tr);
                forecaster.getTSLagMaker().setMinLag(1);

                forecaster.getTSLagMaker().setMaxLag(i);
                forecaster.buildForecaster(diab, System.out);
                forecaster.primeForecaster(diab);
                List<List<NumericPrediction>> forecast = forecaster.forecast(6, System.out);

                TSEvaluation eval = new TSEvaluation(diab, 0.3);
                eval.setHorizon(6);
                eval.setEvaluateOnTestData(true);
                eval.setEvaluateOnTrainingData(false);
                eval.evaluateForecaster(forecaster, System.out);
                out.println("lag= " + i);
                out.println(eval.toSummaryString()); 
            }

            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
4

2 に答える 2

0

3 つの異なる変数を予測するために同じ問題が発生しました。と を使用MLPRegressorSMOregました。

pdm-timseriesforecastingパッケージマネージャーでパッケージのパッケージバージョンを確認しWEKA-GUI、同じパッケージバージョンをWEKAコードに入れました(コード実装にmavenリポジトリを使用していました)。問題は解決しました。

于 2014-04-02T14:58:37.613 に答える