【问题标题】:How to do time-series simple forecast?如何做时间序列的简单预测?
【发布时间】:2015-03-30 16:44:39
【问题描述】:

我有一个时间序列单变量数据。所以只是时间戳和价值。现在我想推断(预测)第二天/月/年的这个值。我知道有 Box-jenkins (ARIMA) 等方法。

Spark 有线性回归,我试过了,但没有得到满意的结果。有人在 Spark 中尝试过时间序列简单预测吗?可以分享一下他们的实现方法吗?

PS:我在用户邮件列表中查看了这个问题,几乎所有关于这个问题的问题都在那里没有答案。

【问题讨论】:

标签: scala apache-spark time-series


【解决方案1】:

是的,我已经在单变量时间序列的 spark 中应用了 ARIMA。

public static void main(String args[])
{
    System.setProperty("hadoop.home.dir", "C:/winutils");  

     SparkSession spark = SparkSession
              .builder().master("local")
              .appName("Spark-TS Example")
              .config("spark.sql.warehouse.dir", "file:///C:/Users/abc/Downloads/Spark/sparkdemo/spark-warehouse/")
              .getOrCreate();

    Dataset<String> lines = spark.read().textFile("C:/Users/abc/Downloads/thunderbird/Time series/trainingvector_arima.csv");

    Dataset<Double> doubleDataset = lines.map(line>Double.parseDouble(line.toString()),
            Encoders.DOUBLE());

    List<Double> doubleList = doubleDataset.collectAsList();
    //scala.collection.immutable.List<Object> scalaList = new

    Double[] doubleArray = new Double[doubleList.size()];
    doubleArray = doubleList.toArray(doubleArray);

    double[] values = new double[doubleArray.length];
    for(int i = 0; i< doubleArray.length; i++)
    { 
        values[i] = doubleArray[i];
    }

    Vector tsvector = Vectors.dense(values);

    System.out.println("Ts vector:" + tsvector.toString());

    //ARIMAModel arimamodel = ARIMA.fitModel(1, 0, 1, tsvector, true, "css-bobyqa", null);
    ARIMAModel arimamodel = ARIMA.autoFit(tsvector, 1, 1, 1);

    Vector forcst = arimamodel.forecast(tsvector, 10);

    System.out.println("forecast of next 10 observations: " + forcst);
   }

此代码对我有用。此处您要预测的任何值都作为输入数据传递。

【讨论】:

  • 值在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2020-10-05
  • 2020-07-24
  • 2014-01-17
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多