作者avonasac0800 (Adolph)
看板DataScience
標題[問題] 時間序列資料的訓練集切法
時間Thu Apr 11 22:28:47 2019
作業系統: Win 10
問題類別: RNN/CNN
使用工具: Python3.6 + Keras/TensorFlow
問題內容:
各位大大晚安,
小弟想請教, 如果我的資料如下所示(共1,000筆, 只是示意):
index date value
0 20190101 5.1
1 20190102 6.6
2 20190103 4.8
3 20190104 2.7
... ... ...
... ... ...
999 2021xxxx 12
而我要以過去20天的資料預測第21天的數值, 如:
INDEX X Y
0 [x0, x1, x2... x19] x20
1 [x1, x2, x3... x20] x21
... ... ...
... ... ...
979 [x979, x980... x998] x999
假設我要拿總資料的80%來當作訓練集,
請問我可以將INDEX打亂後再拿裡面的80%出來嗎?
或者非得拿INDEX[0:784]當作訓練集呢?
若打亂後再加以訓練,
其測試集(test)的MAE可以比未打亂的MAE少50%,
所以才有這樣的疑問,
我在書上及網路上看到的時間序列模型都是以INDEX[0:784]作為訓練集,
但它們都沒有提及原因,
只有一個人說到"你總不會想拿那麼遠的資料做測試吧".
如果我就是想這樣建模型, 請問會有甚麼潛在的問題嗎?
請各位大大不吝賜教, 謝謝orz
--
--
發現不論哪個姑娘的名字,後頭加個".rmvb"或者".avi",看上去頓時就有了一種.....
別樣的曖昧與風騷……
#1EkG2-EJ (Gossiping)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.19.228
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DataScience/M.1554992957.A.F64.html
※ 編輯: avonasac0800 (114.32.19.228), 04/11/2019 22:30:20
※ 編輯: avonasac0800 (114.32.19.228), 04/11/2019 22:30:34
1F:推 choral: 我過去的經驗是打亂的表現會比較好,不過也得看hidden s04/12 01:15
2F:→ choral: ize和 layer number的搭配,這種應該一層就很有效了04/12 01:15
3F:→ choral: 我沒講到重點,RNN的bp只在[n1…n20]間執行,所以到下一04/12 01:24
4F:→ choral: 個index時,grad會重新計算,RNN不會記錄跨index的因果關04/12 01:24
5F:→ choral: 係,差別在於訓練時index打亂讓權重比較不會容易往某一個04/12 01:24
6F:→ choral: 趨向靠攏04/12 01:24
7F:→ choral: 如有錯誤 還請大德們不吝指正 感謝04/12 01:26
謝謝合唱大的分享,
您提到RNN不會紀錄跨index的關係,
那如果我今天是以CNN來訓練這樣的資料
(MAE又會少一個數量級)
請問這樣子打亂後,
模型是不是反而會學到不應該學到的東西呢?
會這樣問是我將0:784打亂後訓練出的CNN模型,
在INDEX 784後的表現比baseline還要差勁的關係。
※ 編輯: avonasac0800 (42.73.12.202), 04/12/2019 08:55:17
8F:推 choral: 我猜測是learning rate 同時也注意一下 loss的起伏 也許 04/12 11:46
9F:→ choral: 有overfitting的可能性 04/12 11:46
10F:推 choral: 有個測試方法 你取訓練集最後100或200個來訓練,看看效果 04/12 11:52
11F:→ choral: 是不是和整個訓練集差不多,如果是,代表這個dataset具有 04/12 11:52
12F:→ choral: 短期時效性,遠期的資料根本用處不大 04/12 11:52
13F:→ choral: 因此打亂的效果並不好 04/12 11:53
14F:推 yougigun: 簡單來說 打亂就是偷看答案 而且不符合你想要預測模式 04/15 00:45
15F:→ yougigun: 因為基本上你預測方式就是看歷史十筆預測第十一筆 但是 04/15 00:45
16F:→ yougigun: 為什麼你隨機打亂mse低 就是因為model已經偷看過答案 在 04/15 00:45
17F:→ yougigun: 訓練時 假設訓練到一組data 是看 第二筆倒地十一比預測 04/15 00:45
18F:→ yougigun: 第十二筆 然候你test data 好死不死因為隨機抽 有一比是 04/15 00:45
19F:→ yougigun: 看第一筆倒地十筆預測地十一比 因為這組data 跟 train 04/15 00:45
20F:→ yougigun: data 相似度極高 預測的範圍基本不會差太多 導致mse較 04/15 00:45
21F:→ yougigun: 低 但另一種切割方式 造時間切兩半 沒有這個問題 04/15 00:45
22F:推 shaform: 你可以用 [785:] 當測試集,然後訓練集拿 [0:784] 中的 04/20 00:33
23F:→ shaform: 80%,這樣就可以測試在同樣的測試集的情況下 04/20 00:33
24F:→ shaform: 到底是拿不要打亂的 80% ([0:627]) 還是拿打亂的 80% 04/20 00:33
25F:→ shaform: 來訓練,會在同樣的測試集 [784:] 表現最好呢? 04/20 00:34
26F:→ shaform: 嗯,不要打亂的 80% 也可能是 [157:784] ,這樣跟測試集 04/20 00:35
27F:→ shaform: 比較近一些 04/20 00:35
28F:→ shaform: 假設這樣做之後打亂真的還表現比較好,就能反駁yougigun 04/20 00:37
29F:→ shaform: 的偷看說了 04/20 00:37
30F:推 shaform: 至於為何測試集一定要拿最後呢?因為你最後學完的模型 04/20 00:40
31F:→ shaform: 拿出來用的時候本來就是拿來預測「未來」,所以本來就會 04/20 00:40
32F:→ shaform: 是在所有訓練資料的後面 04/20 00:40
33F:→ yougigun: s大 你提的兩種方式在他的定義點 都是屬於沒打亂 我想 04/23 06:47
34F:→ yougigun: 解釋的是為什麼打亂MSE會下降的沒打亂多 再來不能因為下 04/23 06:47
35F:→ yougigun: 降比較多 就選擇打亂的方式訓練模型 因為同你所說 是預 04/23 06:47
36F:→ yougigun: 測未來 切資料應該要以時間點切 04/23 06:47