日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 xiaoyimin 2019-02-14

原作 Arnaud Zinflou

郭一璞 編譯

量子位 出品 | 公眾號(hào) QbitAI

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

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

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

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

數(shù)據(jù)集

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

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

當(dāng)然,因?yàn)槲覀兛紤]的數(shù)據(jù)主要是時(shí)間和用電量兩個(gè)維度,所以可以把其他的維度刪掉。

重采樣

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

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

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

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

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

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

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

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

還有不同的采樣方式:

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

用Prophet建模

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

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

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

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

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

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

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

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

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

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

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

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

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

LSTM預(yù)測

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

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

LSTM對(duì)輸入數(shù)據(jù)的規(guī)模很敏感,特別是在使用sigmoid或tanh激活函數(shù)時(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)測試集。

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

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

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

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

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

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

聚類

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

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

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

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

連接和樹形圖

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

這樣完成我們數(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社群開始招募啦,歡迎對(duì)AI感興趣的同學(xué),在量子位公眾號(hào)(QbitAI)對(duì)話界面回復(fù)關(guān)鍵字“交流群”,獲取入群方式;

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

進(jìn)專業(yè)群請(qǐng)?jiān)诹孔游还娞?hào)(QbitAI)對(duì)話界面回復(fù)關(guān)鍵字“專業(yè)群”,獲取入群方式。(專業(yè)群審核較嚴(yán),敬請(qǐng)諒解)

誠摯招聘

量子位正在招募編輯/記者,工作地點(diǎn)在北京中關(guān)村。期待有才氣、有熱情的同學(xué)加入我們!相關(guān)細(xì)節(jié),請(qǐng)?jiān)诹孔游还娞?hào)(QbitAI)對(duì)話界面,回復(fù)“招聘”兩個(gè)字。

喜歡就點(diǎn)「好看」吧 !

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多