作者kiloxx (名器)
看板Python
标题[问题] ML CV分法导致结果差距
时间Fri Mar 16 00:23:25 2018
大家好,想请问一个CV(cross validation)的问题
我用sklearn model_selection 两个不同CV的方法
1. train_test_split
2. StratifiedKFold
结果同一个model train出来
1. train acc ~90%, test acc ~75%(overfitting)
2. train acc ~90%, test acc ~30%(average acc)
为什麽在testing上差距会这麽大啊?
代表我用方法1 train出来是超级无敌overfitting吗?
或是我的DataSet是根本无法分析的?
还是我脑残code写错了?
keras log上
方法1 val_acc会跟着train acc上升,但是方法2每个round都是死鱼在30%
python code:
1.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=87)
2.
skf = StratifiedKFold(n_splits=4)
for train_index, test_index in skf.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
麻烦各位指点一下!感谢
//--- 3/16补:
在StratifiedKFold前补上shuffle之後,就可以train到跟方法1一样了
谢谢各位的指点!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.243.157.116
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1521131008.A.ED7.html
1F:→ Kazimir: 如果你的validation accuracy 没上升那很明显是写错了 03/16 01:59
2F:推 p00o99o: 你先搞清楚这两种方法的差异 03/16 02:10
3F:推 Kazimir: 仔细想想好像也不一定 你的资料量有多大? class之间 03/16 02:22
4F:→ Kazimir: 有没有明显的不平衡问题? 03/16 02:22
X.shape = 57xx, 120, 12
y.shape = 57xx, 3
我有三个class, frequency 大约都33%
5F:推 tsoahans: 一个有shuffle一个没有 03/16 07:24
我试着用观测用train_test_split看X_train/X_test
是会shuffle的,假设一开始X_train = [a0, a1, a2, ..., an-1, an]
X_train = [a11, a31, ..., a1, an-9]
但是我用StratifiedKFold
X_train/X_test还是会依照顺序
(shuffle设=True/False都没差..还是我data太小了?)
X_train = [a0, a8, a15 ..., an-6, an]
智商愚钝还是不懂为何结果会差这麽多...
※ 编辑: kiloxx (59.124.166.19), 03/16/2018 13:21:23
※ 编辑: kiloxx (59.124.166.19), 03/16/2018 14:53:03
6F:推 tsoahans: 你的data可能有照label顺序排 所以没shuffle就会有问题 03/16 15:14
可是我有比较过两个方法
y_train 跟 y_test class的frequency是跟原始y是一样的
(每个class都是~33%)
等等晚点来试试看丢进去kfold前先shuffle一次看看
※ 编辑: kiloxx (59.124.166.19), 03/16/2018 18:01:59
※ 编辑: kiloxx (111.243.156.10), 03/16/2018 19:36:51