f*******6 发帖数: 56 | 1 网上看到过:一个原始dataset区分为train, test, validation 三份. 在什么情况下
需要这么做? |
E**********e 发帖数: 1736 | 2 y应该说CROSS VALIDATION 主要是针对于sample size 比较小的情况,或者说在
50000row 一下吧。先是分成两套数据,80/20左右。 然后80的数据进入CV,70/30左右
。 最终model的 PERFORMANCE 用20那份数据。记住,20那份数据在MODEL development
绝不能 "碰". 不能碰是指不要去研究response variable 和 modeling
variables. 也可以跟以前的model 比较看新model 表现为。
还有重要的一点就是不要用80的那份数据来先选modeling 变量。这样做会带来biase,
因为你偷看了变量。预先选变量要在CV之前。或者选变量要独立于modeling。
以上是一年多的经验总结。 然而我还是对预先不选变量不能完全认同。实际是很多情
况都要从几千个变量里选出最终的20左右。不预先看变量同outcome的关系不实际。但
是最终可以用那个20的数据来评价。
现在借楼主的帖子抛出,看看有没有达人探讨一下。以上是针对size在10000以下的数
据,10000以上可以用3000左右的数据预先选出预测力强的变量。然后抛弃这份不用,
剩下的就按以上的方法做就行了。当然变量预测力强的话,以上方法也只是对此一举,
毕竟预测力强的变量用独立的数据选成为还是用modeling的数据选出,最终结果应该一
样。
达人们,看看这样合理吗。
:网上看到过:一个原始dataset区分为train, test, validation 三份. 在什么情况下
:需要这么做? |
s*********h 发帖数: 6288 | 3 CV 和 validation不同事情。
CV里面包括了train和validation。
development
【在 E**********e 的大作中提到】 : y应该说CROSS VALIDATION 主要是针对于sample size 比较小的情况,或者说在 : 50000row 一下吧。先是分成两套数据,80/20左右。 然后80的数据进入CV,70/30左右 : 。 最终model的 PERFORMANCE 用20那份数据。记住,20那份数据在MODEL development : 绝不能 "碰". 不能碰是指不要去研究response variable 和 modeling : variables. 也可以跟以前的model 比较看新model 表现为。 : 还有重要的一点就是不要用80的那份数据来先选modeling 变量。这样做会带来biase, : 因为你偷看了变量。预先选变量要在CV之前。或者选变量要独立于modeling。 : 以上是一年多的经验总结。 然而我还是对预先不选变量不能完全认同。实际是很多情 : 况都要从几千个变量里选出最终的20左右。不预先看变量同outcome的关系不实际。但 : 是最终可以用那个20的数据来评价。
|
m******r 发帖数: 1033 | 4 看了几遍没看懂。 能不能说写具体的? 比如说,你拿到手5万行数据集(也就是五万
客户),100个变量(先说个小点的 道理都一样)。 然后回家做step1: 分成4万行和
一万行。 4万行你来折腾,1万行先存在保险箱。 这个大家都同意。基本类似于年终你
拿了5万bonus, 4万投股市,1万存银行。
然后你第二步想做什么?
development
【在 E**********e 的大作中提到】 : y应该说CROSS VALIDATION 主要是针对于sample size 比较小的情况,或者说在 : 50000row 一下吧。先是分成两套数据,80/20左右。 然后80的数据进入CV,70/30左右 : 。 最终model的 PERFORMANCE 用20那份数据。记住,20那份数据在MODEL development : 绝不能 "碰". 不能碰是指不要去研究response variable 和 modeling : variables. 也可以跟以前的model 比较看新model 表现为。 : 还有重要的一点就是不要用80的那份数据来先选modeling 变量。这样做会带来biase, : 因为你偷看了变量。预先选变量要在CV之前。或者选变量要独立于modeling。 : 以上是一年多的经验总结。 然而我还是对预先不选变量不能完全认同。实际是很多情 : 况都要从几千个变量里选出最终的20左右。不预先看变量同outcome的关系不实际。但 : 是最终可以用那个20的数据来评价。
|
E**********e 发帖数: 1736 | 5 4万就用来建模啊,四万再随即分成70/30比例,这两个就是training/test,然后
iteration30次。不过这个过程叫做sampling with/without replacement, 前者也看作
bootstrapping. CV 是把4万随机分成5份或者10份额, 留一份做test,其余的training
你的model. 然后轮换。总共跑k次,这叫做k-fold CV。如果在套个loop,就叫做
repeated -fold CV, 这个其实能提供最接近unbiased估计值和 小的variance.
总之,CV是用来test 你的modeling procedure是否可行。最终应该用1万的数据来检测
你的model performance,而不是 trainging/test 的数据。 你可以自己实验一下,4万
数据用来选最后的20左右的变量,然后CV,你得到的metric 必然偏高,这就是因为你偷
看了数据,带入了BIASE。
对了5万的数据已经挺多了。
:看了几遍没看懂。 能不能说写具体的? 比如说,你拿到手5万行数据集(也就是五万
:客户),100个变量(先说个小点的 道理都一样)。 然后回家做step1: 分成4万行和 |
m******r 发帖数: 1033 | 6 哪一步就‘偷看数据了’?
step1已经说了,1万存银行。在银行保险箱里。
4万自己折腾。 我不明白啥时候就‘偷’了?
training
【在 E**********e 的大作中提到】 : 4万就用来建模啊,四万再随即分成70/30比例,这两个就是training/test,然后 : iteration30次。不过这个过程叫做sampling with/without replacement, 前者也看作 : bootstrapping. CV 是把4万随机分成5份或者10份额, 留一份做test,其余的training : 你的model. 然后轮换。总共跑k次,这叫做k-fold CV。如果在套个loop,就叫做 : repeated -fold CV, 这个其实能提供最接近unbiased估计值和 小的variance. : 总之,CV是用来test 你的modeling procedure是否可行。最终应该用1万的数据来检测 : 你的model performance,而不是 trainging/test 的数据。 你可以自己实验一下,4万 : 数据用来选最后的20左右的变量,然后CV,你得到的metric 必然偏高,这就是因为你偷 : 看了数据,带入了BIASE。 : 对了5万的数据已经挺多了。
|
E**********e 发帖数: 1736 | 7 你用40000数据来选变量就是偷看了数据了。严格意义上来说,率选变量应该独立于那
个40000数据。当然40000数据也挺大了。假如是4000, 数据量少,有时重要变量不一定
显示出预测性。
你应该看看一本书, element of statistical learning. 里边有比较好的解释和示
范。
:哪一步就‘偷看数据了’?
:step1已经说了,1万存银行。在银行保险箱里。 |
m******r 发帖数: 1033 | 8 这书我会再看看。
回到正题。 一共拿到5万行客户数据, 一万存保险箱,4万折腾。 按你这么说,这四
万的数据也不能动,因为一动,就算‘偷’?
****“严格意义上来说,率选变量应该独立于那个40000数据。”****
四万的数据不能选变量,一万的在保险箱也不能动。 倒是想请教: 还有什么高级的方
法来选变量?
【在 E**********e 的大作中提到】 : 你用40000数据来选变量就是偷看了数据了。严格意义上来说,率选变量应该独立于那 : 个40000数据。当然40000数据也挺大了。假如是4000, 数据量少,有时重要变量不一定 : 显示出预测性。 : 你应该看看一本书, element of statistical learning. 里边有比较好的解释和示 : 范。 : : :哪一步就‘偷看数据了’? : :step1已经说了,1万存银行。在银行保险箱里。
|
E**********e 发帖数: 1736 | 9 你看看我原来的帖子, 这也是我的问题, 接机请教达人。
CV 和modeling performance的 evaluation 应该是独立的。 CV 只是用了检测你的
modeling procedure 合不合理。 用CV里的test data的 performance看model 是不是
好要小心。如果40000数据先用来选预测力强的变量,然后用这40000的数据进入 CV,
你得到的在test 上的结果就是biased, 一般来说要好一点。
我的折中就是用40000来预选变量, 但是评价model 好坏不要用40000里的test 数据。
而是没有碰过的10000数据。 还有,这个10000可不是随机的, 一般是最近一段时间
的数据。 如果是随机的, 也是没有意义的,它其实就是约等于test 数据。
以上40000只是个例子。你要是有10000以上的training 数据, 你可以再选出3000 用
来预选变量, 然后不用。 剩下的7000用来CV。 因为3000的数据基本上可以把变量的
预测力给显示出来。
问题是很多小公司只有5,6000数据。 这就比较challenging了。 你去看看那本书里的
CV一章, 再跑两个书里提到几个simulation, 你就会有了解。 或者你google 这个话
题, 你也能了解一点。
【在 m******r 的大作中提到】 : 这书我会再看看。 : 回到正题。 一共拿到5万行客户数据, 一万存保险箱,4万折腾。 按你这么说,这四 : 万的数据也不能动,因为一动,就算‘偷’? : ****“严格意义上来说,率选变量应该独立于那个40000数据。”**** : 四万的数据不能选变量,一万的在保险箱也不能动。 倒是想请教: 还有什么高级的方 : 法来选变量?
|
m******r 发帖数: 1033 | 10 多谢赐教。 基本上5万的客户数据,一万进保险箱,只在最后使用,中间绝不使用,是
公认的practice. 实际上,建模型会花2~6个月时间不等,这样会有新的数据给你测试
。这个过程是不可逆的,不能说我根据最新测试结果,又建了一个更好的模型。
另外我觉得建模型和选变量并不矛盾。 建模型的过程,也就是在选变量 ,除非你建个
full model,可是full model有啥用呢? 拿最简单的回归模型来说, 设置不同的p, 选
出来的变量自然不一样,出来的模型也自然不一样。
,
【在 E**********e 的大作中提到】 : 你看看我原来的帖子, 这也是我的问题, 接机请教达人。 : CV 和modeling performance的 evaluation 应该是独立的。 CV 只是用了检测你的 : modeling procedure 合不合理。 用CV里的test data的 performance看model 是不是 : 好要小心。如果40000数据先用来选预测力强的变量,然后用这40000的数据进入 CV, : 你得到的在test 上的结果就是biased, 一般来说要好一点。 : 我的折中就是用40000来预选变量, 但是评价model 好坏不要用40000里的test 数据。 : 而是没有碰过的10000数据。 还有,这个10000可不是随机的, 一般是最近一段时间 : 的数据。 如果是随机的, 也是没有意义的,它其实就是约等于test 数据。 : 以上40000只是个例子。你要是有10000以上的training 数据, 你可以再选出3000 用 : 来预选变量, 然后不用。 剩下的7000用来CV。 因为3000的数据基本上可以把变量的
|
m******n 发帖数: 453 | 11 简单说,CV的各个error之间并不是独立的,CV也会带来overfit
所以必须validation |