小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

手把手教你用Python玩轉(zhuǎn)時序數(shù)據(jù),從采樣、預(yù)測到聚類

 xiaoyimin 2019-02-14

原作 Arnaud Zinflou

郭一璞 編譯

量子位 出品 | 公眾號 QbitAI

時序數(shù)據(jù),也就是時間序列的數(shù)據(jù)。

像股票價格、每日天氣、體重變化這一類,都是時序數(shù)據(jù),這類數(shù)據(jù)相當(dāng)常見,也是所有數(shù)據(jù)科學(xué)家們的挑戰(zhàn)。

所以,如果你有朝一日碰到了時序數(shù)據(jù),該怎么用Python搞定它呢?

時序數(shù)據(jù)采樣

數(shù)據(jù)集

這里用到的例子,是2011年11月到2014年2月期間倫敦家庭的用電量。

可以看出,這個數(shù)據(jù)集是按照每半小時統(tǒng)計一次的節(jié)奏,記下每家每戶用了多少電??梢愿鶕?jù)這些數(shù)據(jù),生成一些圖表分析。

當(dāng)然,因為我們考慮的數(shù)據(jù)主要是時間和用電量兩個維度,所以可以把其他的維度刪掉。

重采樣

我們先從重采樣開始。重采樣意味著改變時序數(shù)據(jù)中的時間頻率,在特征工程中這個技能非常有用,給監(jiān)督學(xué)習(xí)模型補充一些結(jié)構(gòu)。

依靠pandas進行重采樣的方法類似groupby,通過下面的例子,可以更方便的理解。

首先,需要把采樣周期變成每周:

· data.resample() 用來重采樣數(shù)據(jù)幀里的電量(kWh)那一列。

· The ‘W’ 表示我們要把采樣周期變?yōu)槊恐埽╳eek)。

· sum()用來求得這段時間里的電量之和。

當(dāng)然,我們也可以依葫蘆畫瓢把采樣周期變成每天。

pandas里內(nèi)置了很多重采樣的選項,比如不同的時間段:

還有不同的采樣方式:

這些你可以直接用,也可以自己定義。

用Prophet建模

Facebook Prophet誕生于2017年,可以用Python和R語言操作。

Prophet天生就是分析時序數(shù)據(jù)的一把好手,適配任何時間尺度,還能很好的處理異常值和缺失數(shù)據(jù),對趨勢變化非常敏感,還考慮到了假期等特殊時間的影響,可以自定義變更點。

在使用Prophet之前,我們先重命名一下數(shù)據(jù)集中的每列。數(shù)據(jù)列為ds,我們要預(yù)測的值列為y。

下面的例子就是以每天為間隔的時序數(shù)列。

導(dǎo)入Prophet,創(chuàng)建模型,填充數(shù)據(jù)。

在Prophet里,changeprior prior scale這個參數(shù)可以控制對趨勢變化的敏感程度,參數(shù)越高越敏感,設(shè)置為0.15比較合適

為了實現(xiàn)預(yù)測功能,我們創(chuàng)建未來數(shù)據(jù)幀,設(shè)置預(yù)測未來多少時間和頻率,然后Prophet就可以開始預(yù)測了。

這里設(shè)置的是預(yù)測兩周,以天為單位。

搞定了,可以預(yù)測未來兩個月的家庭用電量了。

圖中,黑點為實際值,藍點為預(yù)測值,淺藍色陰影區(qū)域表示不確定性。

當(dāng)然,如果預(yù)測的時間很長,不確定性也會增大。

利用Prophet,我們還可以簡單地看到可視化的趨勢圖。

看上面第二張圖,以年份為單位,可以明顯看出秋冬家庭耗電量增大,春夏則減少;周日耗電量要比一周里的其他六天多。

LSTM預(yù)測

LSTM-RNN可以進行長序列觀察,這是LSTM內(nèi)部單元的架構(gòu)圖:

LSTM似乎很適合時序數(shù)據(jù)預(yù)測,讓它來處理一下我們按照一天為周期的數(shù)據(jù):

LSTM對輸入數(shù)據(jù)的規(guī)模很敏感,特別是在使用sigmoid或tanh激活函數(shù)時。

你也可以把數(shù)據(jù)標(biāo)準(zhǔn)化,也就是將數(shù)據(jù)重新調(diào)整到[0,1]或[-1,1]的范圍,可以使用scikit-learn庫中的MinMaxScaler預(yù)處理類輕松地標(biāo)準(zhǔn)化數(shù)據(jù)集。

現(xiàn)在,把數(shù)據(jù)集分成訓(xùn)練集和測試集。

下面的代碼把80%的數(shù)據(jù)分成訓(xùn)練集,剩下的20%留著當(dāng)測試集。

定義一個函數(shù)來創(chuàng)建新的數(shù)據(jù)集,用這個函數(shù)來準(zhǔn)備建模。

LSTM網(wǎng)絡(luò)的輸入數(shù)據(jù)需要設(shè)置成特定的陣列結(jié)構(gòu):[樣本,時間步長,特征]。

現(xiàn)在用的是[樣本,特征],我們需要加上時間步長,通過下面的方法把訓(xùn)練集和測試集變成我們想要的樣子

搞定,現(xiàn)在設(shè)計調(diào)試LSTM網(wǎng)絡(luò)。

從損失圖中,我們可以看到該模型在訓(xùn)練集和測試集上的表現(xiàn)相似。

看下圖,LSTM在擬合測試集的時候表現(xiàn)的非常好。

聚類

最后,我們還要用我們例子中的數(shù)據(jù)集進行聚類。

聚類的方法很多,其中一種是分層聚類(clusters hierarchically)。

分層的方法有兩種:從頂部開始分,和從底部開始分。我們這里選擇從底部開始。

方法很簡單,導(dǎo)入原始數(shù)據(jù),然后為一年中的某一天和一天中的某一小時添加兩列。

連接和樹形圖

連接函數(shù)將距離信息和分組對象根據(jù)相似性聚類,他們相互連接,創(chuàng)造更大的聚類。這個進程一直迭代,直到原始數(shù)據(jù)集中的所有對象都在分層樹里相互連接在一起。

這樣完成我們數(shù)據(jù)的聚類:

搞定,是不是很簡單?

不過,代碼里的ward是啥?

這是一種新的聚類方法,關(guān)鍵詞ward讓連接函數(shù)使用ward方差最小化算法。

現(xiàn)在,看一下聚類樹形圖:

x軸上就是標(biāo)簽,或者說是樣本索引;

y軸上是距離;

豎線是聚類合并;

橫線表示哪些集群/標(biāo)簽是合并的一部分,形成新聚類;

豎線的長度是形成新聚類的距離。

簡化一下,更清楚:

傳送門

https:///playing-with-time-series-data-in-python-959e2485bff8

—完—

加入社群

量子位AI社群開始招募啦,歡迎對AI感興趣的同學(xué),在量子位公眾號(QbitAI)對話界面回復(fù)關(guān)鍵字“交流群”,獲取入群方式;

此外,量子位專業(yè)細分群(自動駕駛、CV、NLP、機器學(xué)習(xí)等)正在招募,面向正在從事相關(guān)領(lǐng)域的工程師及研究人員。

進專業(yè)群請在量子位公眾號(QbitAI)對話界面回復(fù)關(guān)鍵字“專業(yè)群”,獲取入群方式。(專業(yè)群審核較嚴(yán),敬請諒解)

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關(guān)村。期待有才氣、有熱情的同學(xué)加入我們!相關(guān)細節(jié),請在量子位公眾號(QbitAI)對話界面,回復(fù)“招聘”兩個字。

喜歡就點「好看」吧 !

內(nèi)容來自騰訊新聞

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多