python数据预测代码_手把手教你用Python玩转时序数据,从采样、预测到聚类丨代码...
原標題:手把手教你用Python玩轉時序數據,從采樣、預測到聚類丨代碼
原作 Arnaud Zinflou
郭一璞 編譯
時序數據,也就是時間序列的數據。
像股票價格、每日天氣、體重變化這一類,都是時序數據,這類數據相當常見,也是所有數據科學家們的挑戰。
所以,如果你有朝一日碰到了時序數據,該怎么用Python搞定它呢?
時序數據采樣 數據集
這里用到的例子,是2011年11月到2014年2月期間倫敦家庭的用電量。
可以看出,這個數據集是按照每半小時統計一次的節奏,記下每家每戶用了多少電。可以根據這些數據,生成一些圖表分析。
當然,因為我們考慮的數據主要是時間和用電量兩個維度,所以可以把其他的維度刪掉。
重采樣
我們先從重采樣開始。重采樣意味著改變時序數據中的時間頻率,在特征工程中這個技能非常有用,給監督學習模型補充一些結構。
依靠pandas進行重采樣的方法類似groupby,通過下面的例子,可以更方便的理解。
首先,需要把采樣周期變成每周:
· data.resample() 用來重采樣數據幀里的電量(kWh)那一列。
· The ‘W’ 表示我們要把采樣周期變為每周(week)。
· sum()用來求得這段時間里的電量之和。
當然,我們也可以依葫蘆畫瓢把采樣周期變成每天。
pandas里內置了很多重采樣的選項,比如不同的時間段:
還有不同的采樣方式:
這些你可以直接用,也可以自己定義。
用Prophet建模
Facebook Prophet誕生于2017年,可以用Python和R語言操作。
Prophet天生就是分析時序數據的一把好手,適配任何時間尺度,還能很好的處理異常值和缺失數據,對趨勢變化非常敏感,還考慮到了假期等特殊時間的影響,可以自定義變更點。
在使用Prophet之前,我們先重命名一下數據集中的每列。數據列為ds,我們要預測的值列為y。
下面的例子就是以每天為間隔的時序數列。
導入Prophet,創建模型,填充數據。
在Prophet里,changeprior prior scale這個參數可以控制對趨勢變化的敏感程度,參數越高越敏感,設置為0.15比較合適
為了實現預測功能,我們創建未來數據幀,設置預測未來多少時間和頻率,然后Prophet就可以開始預測了。
這里設置的是預測兩周,以天為單位。
搞定了,可以預測未來兩個月的家庭用電量了。
圖中,黑點為實際值,藍點為預測值,淺藍色陰影區域表示不確定性。
當然,如果預測的時間很長,不確定性也會增大。
利用Prophet,我們還可以簡單地看到可視化的趨勢圖。
看上面第二張圖,以年份為單位,可以明顯看出秋冬家庭耗電量增大,春夏則減少;周日耗電量要比一周里的其他六天多。
LSTM預測
LSTM-RNN可以進行長序列觀察,這是LSTM內部單元的架構圖:
LSTM似乎很適合時序數據預測,讓它來處理一下我們按照一天為周期的數據:
LSTM對輸入數據的規模很敏感,特別是在使用sigmoid或tanh激活函數時。
你也可以把數據標準化,也就是將數據重新調整到[0,1]或[-1,1]的范圍,可以使用scikit-learn庫中的MinMaxScaler預處理類輕松地標準化數據集。
現在,把數據集分成訓練集和測試集。
下面的代碼把80%的數據分成訓練集,剩下的20%留著當測試集。
定義一個函數來創建新的數據集,用這個函數來準備建模。
LSTM網絡的輸入數據需要設置成特定的陣列結構:[樣本,時間步長,特征]。
現在用的是[樣本,特征],我們需要加上時間步長,通過下面的方法把訓練集和測試集變成我們想要的樣子
搞定,現在設計調試LSTM網絡。
從損失圖中,我們可以看到該模型在訓練集和測試集上的表現相似。
看下圖,LSTM在擬合測試集的時候表現的非常好。
聚類
最后,我們還要用我們例子中的數據集進行聚類。
聚類的方法很多,其中一種是分層聚類(clusters hierarchically)。
方法很簡單,導入原始數據,然后為一年中的某一天和一天中的某一小時添加兩列。
連接和樹形圖
連接函數將距離信息和分組對象根據相似性聚類,他們相互連接,創造更大的聚類。這個進程一直迭代,直到原始數據集中的所有對象都在分層樹里相互連接在一起。
這樣完成我們數據的聚類:
搞定,是不是很簡單?
不過,代碼里的ward是啥?
這是一種新的聚類方法,關鍵詞ward讓連接函數使用ward方差最小化算法。
現在,看一下聚類樹形圖:
x軸上就是標簽,或者說是樣本索引;
y軸上是距離;
豎線是聚類合并;
橫線表示哪些集群/標簽是合并的一部分,形成新聚類;
豎線的長度是形成新聚類的距離。
簡化一下,更清楚:
傳送門
https://towardsdatascience.com/playing-with-time-series-data-in-python-959e2485bff8
— 完—
量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字“交流群”,獲取入群方式;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進專業群請在量子位公眾號(QbitAI)對話界面回復關鍵字“專業群”,獲取入群方式。(專業群審核較嚴,敬請諒解)返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的python数据预测代码_手把手教你用Python玩转时序数据,从采样、预测到聚类丨代码...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python离线安装依赖包_python
- 下一篇: python 网络编程 异步io_异步I