看板 DataScience 關於我們 聯絡資訊
作業系統: 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://www.ptt.cc/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
choral: 我過去的經驗是打亂的表現會比較好,不過也得看hidden s04/12 01:15
choral: ize和 layer number的搭配,這種應該一層就很有效了04/12 01:15
choral: 我沒講到重點,RNN的bp只在[n1…n20]間執行,所以到下一04/12 01:24
choral: 個index時,grad會重新計算,RNN不會記錄跨index的因果關04/12 01:24
choral: 係,差別在於訓練時index打亂讓權重比較不會容易往某一個04/12 01:24
choral: 趨向靠攏04/12 01:24
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
choral: 我猜測是learning rate 同時也注意一下 loss的起伏 也許 04/12 11:46
choral: 有overfitting的可能性 04/12 11:46
choral: 有個測試方法 你取訓練集最後100或200個來訓練,看看效果 04/12 11:52
choral: 是不是和整個訓練集差不多,如果是,代表這個dataset具有 04/12 11:52
choral: 短期時效性,遠期的資料根本用處不大 04/12 11:52
choral: 因此打亂的效果並不好 04/12 11:53
yougigun: 簡單來說 打亂就是偷看答案 而且不符合你想要預測模式 04/15 00:45
yougigun: 因為基本上你預測方式就是看歷史十筆預測第十一筆 但是 04/15 00:45
yougigun: 為什麼你隨機打亂mse低 就是因為model已經偷看過答案 在 04/15 00:45
yougigun: 訓練時 假設訓練到一組data 是看 第二筆倒地十一比預測 04/15 00:45
yougigun: 第十二筆 然候你test data 好死不死因為隨機抽 有一比是 04/15 00:45
yougigun: 看第一筆倒地十筆預測地十一比 因為這組data 跟 train 04/15 00:45
yougigun: data 相似度極高 預測的範圍基本不會差太多 導致mse較 04/15 00:45
yougigun: 低 但另一種切割方式 造時間切兩半 沒有這個問題 04/15 00:45
shaform: 你可以用 [785:] 當測試集,然後訓練集拿 [0:784] 中的 04/20 00:33
shaform: 80%,這樣就可以測試在同樣的測試集的情況下 04/20 00:33
shaform: 到底是拿不要打亂的 80% ([0:627]) 還是拿打亂的 80% 04/20 00:33
shaform: 來訓練,會在同樣的測試集 [784:] 表現最好呢? 04/20 00:34
shaform: 嗯,不要打亂的 80% 也可能是 [157:784] ,這樣跟測試集 04/20 00:35
shaform: 比較近一些 04/20 00:35
shaform: 假設這樣做之後打亂真的還表現比較好,就能反駁yougigun 04/20 00:37
shaform: 的偷看說了 04/20 00:37
shaform: 至於為何測試集一定要拿最後呢?因為你最後學完的模型 04/20 00:40
shaform: 拿出來用的時候本來就是拿來預測「未來」,所以本來就會 04/20 00:40
shaform: 是在所有訓練資料的後面 04/20 00:40
yougigun: s大 你提的兩種方式在他的定義點 都是屬於沒打亂 我想 04/23 06:47
yougigun: 解釋的是為什麼打亂MSE會下降的沒打亂多 再來不能因為下 04/23 06:47
yougigun: 降比較多 就選擇打亂的方式訓練模型 因為同你所說 是預 04/23 06:47
yougigun: 測未來 切資料應該要以時間點切 04/23 06:47