當前位置:
首頁 > 最新 > 基於sparkts的時間序列預測

基於sparkts的時間序列預測

一. Arima理論基礎

可自行google或參考:

http://www.cnblogs.com/bradleon/p/6827109.html

http://people.duke.edu/~rnau/411arim.htm

二. 基於sparkts進行實操(單機版)

/**

* 單機版 時間序列預測

*@authorNeilWang

*/

objectSingleTimeSeriesor{

defmain(args:Array[String]):Unit={

/**

* 讀取樣本數據:

* 2017/3/23,38716.188

* 2017/3/24,34687.2

* 2017/3/25,35339.844

*/

vallines=scala.io.Source.fromFile("/Users/wangjh/Desktop/program/sbt-project/dh-model/gmv_2017.csv").getLines()

valtsVector=Vectors.dense(lines.filter(!_.split(",")(1).equals("gmv")).map(_.split(",")(1).toDouble).toArray)

/**

* 檢查時序數據的穩定性:製圖查看

* 如何變穩定:Differencing--差分

*/

// 製圖,查看原始樣本 是否 數據穩定

valf_source=EasyPlot.ezplot(tsVector)

println(f_source)

// 一階差分,查看是否穩定

vald1vector=differencesOfOrderD(tsVector,1)

valf_d1=EasyPlot.ezplot(d1vector)

println(f_d1)

/**

* 通過對自相關圖和偏自相關圖的分析,得到最佳的階層 p 和階數 q

*/

// 自相關圖

valf_acf=EasyPlot.acfPlot(d1vector.toArray,50)

println(f_acf)

// 偏自相關圖

valf_pacf=EasyPlot.pacfPlot(d1vector.toArray,50)

println(f_pacf)

/**

* 圖中,上下兩條紅線之間是置信區間,p的值就是ACF第一次穿過上置信區間時的橫軸值。q的值就是PACF第一次穿過上置信區間的橫軸值。

* 所以從圖中可以得到p=6,q=28。

* 註:若圖中沒有穿過上置信空間,則增大參數 maxLag 重新製圖。

*/

valpdq=(6,1,28)

/**

* 得到參數估計值p,d,q之後,生成模型ARIMA(p,d,q)進行預測

*/

valarimaModel=ARIMA.fitModel(pdq._1,pdq._2,pdq._3,tsVector,true,"css-cgd")

valpredictedN=14

valforecast=arimaModel.forecast(tsVector,predictedN)

//取出預測值

valpartArray=forecast.toArray.mkString(",").split(",")

vari=partArray.length-predictedN

while(i

forecastArrayBuffer+=partArray(i).toDouble

i=i+1

}

println(s"forecast of next $predictedNobservations: "+forecastArrayBuffer.toArray.mkString(","))

}

}

三. 相關圖

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

TAG:全球大搜羅 |