数据划分
留出法(Hold-Out)
定义与流程
就是有一个数据集$D$,要分出$S,T满足S\bigcup T=\emptyset,S\bigcap T=D$
S,T一个是训练集一个是测试集
就是把数据分成两个互不相交的部分,并保持数据分布大致一致
划分比例
比例一般在$\frac{2}{3}到\frac{4}{5}$之间
划分的时候保持数据分布大致一致,类似分层抽样
结果处理
- 为了保证随机性,结果在多次划分中取平均值
优缺点
- 优点:简单,快速
- 缺点:容易出现局部极值
kNN、留出法、titanic
1 | from pandas import * |
交叉验证法(Cross Validation,k折交叉验证)
定义与流程
把数据集分成k个互斥的集合,然后每次用一个作为测试集,其他k-1个作为训练集
划分与参数
- 为了保证数据分布的一致性,从数据集中分层抽样得到这些集合
- 交叉验证法评估结果的稳定性和保真性在很大的程度上取决与k的取值
结果处理
- 返回k次结果的均值
优缺点
- 优点:从有限的数据集尽可能的挖掘多的信息,从各种角度去学习,避免出现局部的极值
- 缺点:当数据集比较大的时候,慢
kNN、交叉验证法、titanic
1 | from pandas import * |
由于打分层抽样还没想到怎么打比较简短(留出法的分层抽样我就打的很丑),所以暂时还没有分层抽样,只是随机了一下
自助法(BootStrapping)
定义与流程
思想来源
上面的两个方法用来训练的数据都不是全部数据,这样在实际评估的时候会造成偏差。所以我们想—-用我们所有的数据来训练模型—–>自助法
步骤
- 1.在数据集D中随机一个样本,D的大小为n
- 2.把这个样本拷贝D’中(注意是拷贝,就是D并没有改变)[注意:部分D的样本可能会被多次选取]
- 3.将步骤2重复进行n次
- 4.D’为训练集,D-D’为测试集
原理
统计一个样本x不会在D’中出现的概率,并取极限
$$
\lim _{n->∞}(1-{1\over n})^n={1\over e}≈0.368
$$
可见,一个样本不出现在D’中的概率大约为0.368,所以大约有0.368的样本没有出现在D’中
所以D-D’大约有0.368的数据
- 综上:因为是直接在原数据中随机,最后得到的测试集的各项分布比例和训练集都一样
- 这样就解决了不好划分(分层抽样)的问题
- 还保证了训练集和测试集互斥
结果处理
- 返回多次结果的均值
优缺点
- 优点:
- 在数据集较小、难以有效划分数据集和测试集的时候很有用
- 在集成学习中,自助法能从初始数据集产生多个不同的训练集
- 好打
- 缺点:
- 改变了初始数据集的分布,会引入估计误差。
- 大数据集下表现没有上面的两种方法好
kNN、自助法、titanic
1 | from pandas import * |
留一法
定义
相当于n折交叉验证
就是每一用一个做测试集,其他做训练集
结果处理
- 返回n次结果的均值
优缺点
- 优点:好打,交叉验证的优点+++
- 缺点:慢
kNN、留一法、titanic
1 | from pandas import * |