2015-01-31 12 views
7

Ich habe eine Zeitreihendaten uni-variate. Also nur TimeStamp und Value. Jetzt möchte ich diesen Wert für den nächsten Tag/Monat/Jahr extrapolieren (prognostizieren). Ich weiß, es gibt Methoden wie Box-Jenkins (ARIMA) etc.Wie mache ich eine einfache Zeitreihe?

Spark hat lineare Regression und ich habe es versucht, aber ich habe keine zufriedenstellenden Ergebnisse erhalten. Hat irgendjemand in Spark eine Zeitreihe einfacher Vorhersage probiert? Kann ihren Implementierungsansatz teilen?

PS: Ich überprüfe bei User Mailing Liste für dieses Problem, fast alle Fragen zu diesem Thema sind dort unbeantwortet.

+0

Sie könnten näher auf * "Spark hat lineare Regression und ich habe es versucht, aber ich habe keine befriedigenden Ergebnisse" * - der Link zu Sparks Algorithmus + was Sie bereits versucht haben und die Ergebnisse mit einer Notiz, wo sie nicht ' t erfüllen Sie Ihre Erwartungen. –

+0

Bitte sieh dir das an. Fühlen Sie sich frei, dort zu kommentieren, ich habe Daten und Algorithmus hinzugefügt https://gist.github.com/codeAshu/2ebd84b1b48834fce89b – Rusty

+0

Ich schaute auch auf diese Frage, aber _ "partitionBy" _ gibt mir Fehler [http://stackoverflow.com/questions/23402303/apache-spark-moving-average] – Rusty

Antwort

0

Ja ich habe bereits ARIMA in Funken für uni verschiedene Zeitreihen angewendet.

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

Dieser Code funktioniert für mich. Hier werden alle Werte, die Sie prognostizieren möchten, als Eingabedaten übergeben.

+0

wo sind die Werte? – Waqas

Verwandte Themen