机器学习6:评估方法(Evaluation Method)

通常情况下,我们通过将学习器在测试集上进行测试,收集泛化误差,来对模型进行评估和选择,那么,当我们只有一个包含 m 个 example 的数据集D=\{(\Vec{x_1},y_1),(\Vec{x_2},y_2),\cdots,(\Vec{x_m},y_m)\}时,如何划分出 training set 和 testing set 呢?

Hold-out Method留出法

留出法 (hold-out method) 指的是我们直接将数据集 D 划分为两个互斥的集合,训练集 S 以及测
试集 T, S\cap T= \varnothing

但必须要注意的是,测试集和训练集的分布应该尽可能保持一致,避免在数据划分的过程中引入额外的偏差,对最终的实验结果产生影响。

比如,在分类任务中,我们应该保证在训练集和测试集中的样本比例一致,此时通常采用分层抽样(sampling stratified)的方式对原始数据集进行处理,下面举例说明:如果数据集 D 有 500 正例 500 负例,并且我们将 70% 划分为训练集,30% 划分为测试集,那么训练集中就应当有 350 正例 350 负例,测试集中有 150 正例,150 负例。

然而可以发现,在分层划分数据集时,有几乎无数种划分的方法,不同的划分方法往往会导致模型不同,因此我们通常采用若干次随机划分,重复实验,评估实验结果,以所有合格的实验结果的平均值作为留出法的评估结果。

同时,如何控制训练集和测试集的大小也是一个难题,如果训练集太大,测试集太小,测试结果的
变化就会比较大,测试结果的方差会比较大;如果训练集较小,测试集较大,模型的偏差就会比较
,我们无法确定评估结果的保真性。通常我们把 2/3 ∽ 4/5 用于训练,其余用于测试。

Cross Validation交叉验证法

交叉验证法 (cross validation) 使先将数据集划分为 K 个大小近似,数据分布相同(stratified sampling)的互斥子集,每次使用 k-1 个子集的并集作为训练集,剩下的一个子集作为测试集,重复 k 次,直到每一个子集都被作为测试集使用过,最后取 k 次测试结果的平均值作为实验结果。这种测试方法也被称为”k 折交叉验证”(k-fold cross validation).Figure 2.2形象说明了 10 折交叉验证

 与 hold-out method 类似的是,把数据集划分为 k 个子集也存在许多种划分的办法,因此为了减少因为数据划分不同带来的误差,随即使用不同的划分方式重复进行 p 次,最终的评估结果就是这 p次 k 折交叉验证的平均结果(一共要进行 p*k 次训练和测试)。

Bootstrapping自助法

在留出法和交叉验证法中,由于我们保留了一部分数据用于测试,因此训练出的模型拟合的训练集始终不会是整个数据集 D,这会在一定程度上带来不可避免地因为训练规模不同而带来的误差,自助法(bootstrapping)能比较好的解决这个问题

假设有数据集 D 有 m 个 instance,我们每次从数据集 D 中抽取一个样本,拷贝放入数据集 D’ 中,这个样本还在数据集 D 中,我们重复这个过程 m 次就可以得到有 m 个 instance 的数据集 D’,D中会有部分样本出现在 D’中,一部分样本未出现,样本在 m 次采样中都不出现的概率是

\lim_{m\to\infty}(1-\frac{1}{m})^m=\frac{1}{e}\approx0.368

通过自助法,大概有 36.8% 的数据没有出现在 D’ 中,我们可以用 D’作为训练集,D-D’ 作为测
试集

自助法在数据集较小,难以划分训练/测试集时很有用,但会破坏数据集的初始分布,带来误差,但是在数据量比较大的情况下,还是使用留出法和交叉验证更好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值