首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WEKA预测插件

WEKA预测插件
EN

Stack Overflow用户
提问于 2012-08-31 23:44:34
回答 2查看 3.5K关注 0票数 1

我的问题与Weka Forecasting Plugin有关。我正在尝试使用Weka Forecaster在6的预测范围内预测sin(x)的值,算法是SMOReg,我尝试使用不同的滞后(1- 24 )。为此,我使用了一个循环。我写的程序运行得很好,但问题是我从我的程序中获得的结果与直接使用Weka GUI不同,我不知道为什么?有什么想法吗?

我确保使用算法的相同“选项”,但结果仍然是不同的。

代码如下:

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-02 22:58:38

我在预测三个不同的变量时也遇到了同样的问题。我使用了MLPRegressorSMOreg

我在包管理器中检查了来自WEKA-GUIpdm-timseriesforecasting包的包版本,并将相同的包版本放入我的WEKA代码中(我使用maven存储库实现代码),问题就解决了。

票数 0
EN

Stack Overflow用户

发布于 2014-03-17 19:00:35

我也面临着同样的问题。我认为它是关于周期性配置(object TSLagMaker)的。

如果您从here运行代码,

它将生成与GUI相同的结果。如果删除以下行,结果将有所不同:

代码语言:javascript
复制
// add a month of the year indicator field
forecaster.getTSLagMaker().setAddMonthOfYear(true);

// add a quarter of the year indicator field
forecaster.getTSLagMaker().setAddQuarterOfYear(true);

我认为GUI以某种方式自动检测到它。

希望这对你有帮助,洪扎

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12218657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档