更多好玩的机器学习教程: 进入袋马学院领一份 ,全部免费?.
假如你的训练样本集非常小,只有100个样本。你依次随机抽取10个样本、20个样本、30个样本,每次增加10个样本依次类推,一直到100个样本,进行模型训练,然后把学习曲线绘制出来,你可能会发现,当训练样本集很少时,曲线看起来有很多噪音。
当你只随机选择10个样本进行训练时,你可能会非常不幸的选中一个非常差的训练样本集,比如样本集中包含很多模糊不清或标记错误的样本,或者你非常幸运,选到了一个非常好的训练样本集,使用小的训练样本集意味着开发错误率和训练错误率会产生很大的随机波动。
如果你的机器学习应用严重偏向某一类(比如猫咪分类器任务重,负例的数量远大于正例的数量),或者你的应用含有非常多的类别(比如识别100种不同的动物),此时选出不具有代表性或糟糕数据集的可能性就会很大。比如,你的样本集中,负例(y=0)的数量达到了80%,正例(y=1)的数量只有20%,这是如果训练样本集中只有10个样本,那么这些样本很可能全是负例,这样你的算法就学不到任何有意义的东西了。
如果因为噪音,学习曲线无法看出真实走势,我们可以使用以下两个解决方案:
- 相对于在一个模型上训练10个样本,我们可以随机选择多个包含10个样本的样本集,然后训练不同的模型,之后计算每个模型的训练准确率和测试准确率,然后计算平均值,最后再把平均值绘制出来。
- 如果你的训练样本集严重偏向某一类别,或者模型要区分很多类别,你可以选择一个相对均衡的训练子集,而不是随机选择10个样本,比如确保训练子集中,正例占2/10,负例占8/10。一般情况下,我们要让子集中各个类别的比例与原始数据相同。
除非你已经尝试过绘制学习曲线,并得出结论说曲线太嘈杂,无法看到潜在的趋势,否则我建议你使用这些技术。如果你的训练样本集很大(比如超过10,000个样本),而且各个类别分布相对均匀,则你可能用不到这些技术。
最后,绘制学习曲线是比较费计算资源的。比如你可能需要训练10个模型,那么这些模型可能需要在1000个样本、2000个样本、……、10,000个样本上做训练。在小的训练集上训练会比大的训练集快得多。当然你也可以不像上面那样,线性均匀的设置每个训练样本集大小,你可以在1000、2000、4000、6000、10,000个样本上做训练,这同样可以让你看清算法的走势。当然只有附加的训练成本(计算资源)可以接受时,这项技术才是有意义的。
更多好玩的机器学习教程: 进入袋马学院领一份 ,全部免费?.