作者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/cn.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