丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給三川
發(fā)送

0

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

本文作者: 三川 2017-05-08 19:03
導(dǎo)語:機器學(xué)習(xí)方法是可以用來解決時間序列預(yù)測問題的。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

雷鋒網(wǎng)按:本文作者 Jason Brownlee 為澳大利亞知名機器學(xué)習(xí)專家,對時間序列預(yù)測尤有心得。原文發(fā)布于其博客。雷鋒網(wǎng)編譯。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

 Jason Brownlee

機器學(xué)習(xí)方法,比如深度學(xué)習(xí),是可以用來解決時間序列預(yù)測問題的。

但在使用機器學(xué)習(xí)之前,時間序列問題需要被轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題。從僅僅是一個序列,變成成對的輸入、輸出序列。

這篇教程里,你將學(xué)到如何把單變量、多變量時間序列問題轉(zhuǎn)為機器學(xué)習(xí)算法能解決的監(jiān)督學(xué)習(xí)問題。本教程包含:

  1. 如何創(chuàng)建把時間序列數(shù)據(jù)集轉(zhuǎn)為監(jiān)督學(xué)習(xí)數(shù)據(jù)集的函數(shù);

  2. 如何讓單變量時間序列數(shù)據(jù)適配機器學(xué)習(xí)

  3. 如何讓多變量時間序列數(shù)據(jù)適配機器學(xué)習(xí)

現(xiàn)在我們開始。

時間序列 vs. 監(jiān)督學(xué)習(xí)

正式開始前,我們需要更好地理解時間序列和監(jiān)督學(xué)習(xí)的數(shù)據(jù)形式。時間序列是一組按照時間指數(shù)排序的數(shù)字序列,可被看成是一列有序的值。比如:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

監(jiān)督學(xué)習(xí)問題由輸入(X)和輸出(y)速成,其算法能學(xué)習(xí)如何根據(jù)輸入模式預(yù)測輸出模式。

比如:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

Pandas shift() 函數(shù)

對于把時間序列數(shù)據(jù)轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題,這是一個關(guān)鍵的函數(shù)。

給定一個 DataFrame, shift() 函數(shù)可被用來創(chuàng)建數(shù)據(jù)列的副本,然后 push forward (NaN 值組成的行添加到前面)或者 pull back(NaN 值組成的行添加到末尾)。為了給時間序列數(shù)據(jù)集創(chuàng)建滯后觀察(lag observation)列以及預(yù)測觀察(forecast observation)列,并按照監(jiān)督學(xué)習(xí)的格式來,這是必須的操作。

我們來看看一些 shift 函數(shù)的實操例子。

我們可以定義一個由 10 個數(shù)字序列組成的偽時間序列數(shù)據(jù)集,該例子中,DataFrame 中的單個一列如下所示:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程運行該例子,輸出時間序列數(shù)據(jù),每個觀察要有對應(yīng)的行指數(shù)。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

我們通過在頂端插入新的一行,用一個時間步(time step)把所有的觀察降檔(shift down)。由于新的一行不含數(shù)據(jù),可以用 NaN 來表示“無數(shù)據(jù)”。

Shift 函數(shù)能完成該任務(wù)。我們可以把處理過的列插入到原始序列旁邊。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行該例子,使數(shù)據(jù)集有了兩列。第一列是原始觀察,第二列是 shift 過新產(chǎn)生的列。

可看到,把序列向前 shift 一個時間步,產(chǎn)生了一個原始的監(jiān)督學(xué)習(xí)問題,雖然  X 、y 的順序不對。無視行標(biāo)簽的列。由于 NaN 值,第一行需要被拋棄。第二行第二列(輸入 X)現(xiàn)實輸入值是 0.0,第一列的值是 1 (輸出 y)。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

我們能看到,如果在 shift 2、3 ……重復(fù)該過程,要如何創(chuàng)建能用來預(yù)測輸出值 y 的長輸出序列(X)。

Shift 操作器可以接受一個負(fù)整數(shù)值。這起到了通過在末尾插入新的行,來拉起觀察的作用。下面是例子:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行該例子顯示出,新的一列的最后一個值是一個 NaN 值??梢钥吹?,預(yù)測列可被作為輸入 X,第二行作為輸出值  (y)。輸入值 0 就可以用來預(yù)測輸出值 1。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

技術(shù)上,在時間序列預(yù)測術(shù)語里,當(dāng)前時間是(t),未來是(t+1, t+n) 它們都是預(yù)測時間。過去的觀察 (t-1, t-n) 被用來做預(yù)測。對于一個監(jiān)督學(xué)習(xí)問題,在一個有輸入、輸出模式的時間序列里,我們可以看到如何用正負(fù) shift 來生成新的 DataFrame 。

這不僅可用來解決經(jīng)典的 X -> y 預(yù)測問題, 還可用到輸入、輸出都是序列的 X -> Y 上。

另外,shift 函數(shù)也在所謂的多元時間序列問題上有效。這種情況下,并不是時間序列不只有一組觀察,而是多組(舉個例子,氣溫和氣壓)。所有時間序列中的變量可被向前或向后 shift,來創(chuàng)建多元輸入輸出序列。更多詳情下文會提到。

The series_to_supervised() 函數(shù)

給定理想的輸入、輸出序列長度,我們可以用 Pandas 里的 shift() 函數(shù)自動生成時間序列問題的框架。

這是一個很有用的工具。它幫助我們用機器學(xué)習(xí)算法探索同一個時間序列問題的不同框架,來找出哪一個將會產(chǎn)生具有更好效果的模型。這部分中,我們?yōu)?series_to_supervised() ,一個新的 Python 函數(shù)定義。它能把單變量、多變量時間序列轉(zhuǎn)化為監(jiān)督學(xué)習(xí)數(shù)據(jù)集。

該函數(shù)有四個參數(shù):

  • Data:作為一個列表或 2D NumPy 陣列的觀察序列。必需。

  • n_in: 作為輸入 X 的 lag observation 的數(shù)量。值可能在 [1..len(data)] 之間??蛇x。默認(rèn)為 1 。

  • n_out: 作為輸出 y 的觀察的數(shù)量。值可能在 [0..len(data)-1] 之間??蛇x。默認(rèn)為 1 。

  • dropnan: 不管隨著 NaN 值是否丟掉一些行,它都是布爾值(Boolean)??蛇x。默認(rèn)為 True。

函數(shù)返回一個單個的值:

  • return: 序列的 Pandas DataFrame 轉(zhuǎn)為監(jiān)督學(xué)習(xí)。

新數(shù)據(jù)集創(chuàng)建為一個 DataFrame,每一列通過變量字?jǐn)?shù)和時間步命名。這使得開發(fā)者能設(shè)計各種各樣時間步序列類型的預(yù)測問題。

當(dāng) DataFrame 被返回,你可以決定怎么把它的行,分為監(jiān)督學(xué)習(xí)的 X 和 y 部分。這里可完全按照你的想法。該函數(shù)用默認(rèn)參數(shù)定義,因此,如果你僅僅用你的數(shù)據(jù)調(diào)用它。它會創(chuàng)建一個 X 為 t-1,y 是 t 的 DataFrame。

該函數(shù)兼容 Python 2 和 Python 3。完整函數(shù)在下面,包括注解。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

有了整個的函數(shù),現(xiàn)在可以開始探索怎么用它。

一步的單變量預(yù)測

在時間序列預(yù)測中,使用滯后觀察(比如 t-1)作為輸入變量來預(yù)測當(dāng)前時間不,是通用做法。這被稱為一步預(yù)測(one-step forecasting)。下面的例子,展示了如何一個滯后時間步( t-1)預(yù)測當(dāng)前時間步(t).

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行例子,輸出改造過的時間序列的輸出。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

可看到,觀察被命名為“var1”,輸入觀察被命名為  (t-1),輸出時間步被命名為 (t)。還可以看到,NaN 值得行,已經(jīng)自動從 DataFrame 中移除。我們可以用隨機數(shù)字長度的輸入序列重復(fù)該例子,比如 3。這可以通過把輸入序列的長度確定為參數(shù)來實現(xiàn)。比如:


data = series_to_supervised(values, 3)


完整例子如下:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

再一次,運行例子輸出改造的序列??梢钥吹捷斎胄蛄惺钦_的從左到右的順序。輸出變量在最右邊進行預(yù)測。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

多步驟預(yù)測還是序列預(yù)測

有另一類預(yù)測問題,是用過去的觀察,來預(yù)測出將來貫徹的一個序列。這可以被稱作序列預(yù)測或者多步驟預(yù)測。通過確定另一個參數(shù),我們能把一個時間序列轉(zhuǎn)化為序列預(yù)測。比如,我們可以把一個輸入序列為兩個過去觀察,要預(yù)測兩個未來觀察的序列問題,進行如下轉(zhuǎn)化:


data = series_to_supervised(values, 2, 2)


完整例子如下:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行該例子,顯示出分別把 (t-n)、(t+n) 作為輸入、輸出變量,以及把當(dāng)前觀察 (t)作為輸出之間的區(qū)別。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

多元預(yù)測

另一種重要的時間序列類型被稱為多元時間序列。這時有對多個不同度量(measure)的觀察,以及我們對預(yù)測其中的一個或更多的興趣。比如說,也許有兩組時間序列觀察 obs1 和 obs2 ,我們想要預(yù)測其中之一,或者兩個都預(yù)測。我們可用同樣的方法調(diào)用 series_to_supervised()。舉個例子:

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行這個例子會輸出數(shù)據(jù)的新框架,顯示出兩個變量在一個時間步下的輸入模式,以及兩個變量一個時間不的輸出模式。

取決去問題的具體內(nèi)容。可以隨機把列分為 X 和 Y 部分,比如說,如果當(dāng)前觀察 var1 也被作為輸入提供,那么只有 var2 會被預(yù)測。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

通過上面這樣確定具體的輸入輸出序列長度,可輕松完成多元時間序列的預(yù)測。下面是一個把一個時間步作為輸入,兩個時間步作為預(yù)測序列的轉(zhuǎn)化例子。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

運行該例子會顯示改造過的大 DataFrame。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

建議:拿你自己的數(shù)據(jù)集做實驗,試試多個不同的框架來看哪個效果更好。

由淺入深,清華大學(xué)鄧志東教授的神經(jīng)網(wǎng)絡(luò)培訓(xùn)!

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

該課程將系統(tǒng)介紹人工智能中的神經(jīng)網(wǎng)絡(luò),特別是深度學(xué)習(xí)的發(fā)展現(xiàn)狀、基本原理和主要方法。包括:人工智能綜述,生物神經(jīng)系統(tǒng),人工神經(jīng)元模型,BP網(wǎng)絡(luò),Hopfield網(wǎng)絡(luò),深度卷積神經(jīng)網(wǎng)絡(luò)(CNN),長短期記憶網(wǎng)絡(luò)(LSTM)和深度強化學(xué)習(xí)等。重點分析若干典型CNN模型,并結(jié)合具體應(yīng)用案例,進行編程實操剖析。

課程將補充介紹最新的科研成果與前沿領(lǐng)域(提供50篇以上最原始與最新的人工神經(jīng)網(wǎng)絡(luò)代表性英文論文,包括深度學(xué)習(xí)2016年的最新論文),強調(diào)各種理論方法在解決實際問題中的綜合應(yīng)用。雷鋒網(wǎng)傾情推薦!

視頻地址:http://www.mooc.ai/course/65 

相關(guān)文章:

手把手教你用 Python 實現(xiàn)針對時間序列預(yù)測的特征選擇

時間序列預(yù)測教程:如何利用 Python 預(yù)測波士頓每月持械搶劫案數(shù)量?

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

如何把時間序列問題轉(zhuǎn)化為監(jiān)督學(xué)習(xí)問題?通俗易懂的 Python 教程

分享:
相關(guān)文章

用愛救世界
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說