1.评估方法
1.1留出法
“留出法”即直接将数据集D划分为两个互斥的集合,其中一个集合用来做训练集S,另一个作为测试集T,即D =S并T,S交T为空集,在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
以二分类任务为例,假设D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练后,如果模型在T上有90个样本分类错误,则其错误率为90/300=30%,相应的精度为1-0.3=0.7? 即70%。
需要注意的:
1. 训练集和测试集的划分要尽可能保持数据分布的一致性。比如对训练一个模型来预测人是否是胖子,100个人里,前50个虽然胖,但不爱吃甜食,我们暂时将他称为具有A特征;后50个胖且爱吃甜食,将他们称为具有B特征;但是划分训练集和测试集时,我们很“很幸运”的将具有B特征的划到了训练集,将具有A特征的划分到了测试集;由于采用了具有B特征的训练集进行训练,因此训练出的模型在用测试集进行测试时,输出的结果则可能会变成测试集的50个都不是胖子。为什么呢?很大的一部分原因可能是因为他们都不吃甜食,而我们训练的模型极大程度的将“爱吃甜食”与“是胖子”这一输出结果极大的关联了起来,学习了进去。最后导致测试集的错误率非常高,使得针对这个100个人数据集的而言,训练的模型在预测功能的实现上,完全失去了意义。
? 因此,针对这个问题,在使用留出法时,一般要采用若干次随机划分、重复进进行试验评估后取平均值作为留出法的评估结果。
2. 划分训练集S和测试集T有另一个普遍性的问题,如果测试集T占的比重大,S占据的比重少,则可能会导致训练出的模型与整个样本数据集D训练出用于预测整个总体的模型相差较大;但若训练集S包含绝大多数样本,则训练出的模型可能由于T较小,评估结果可能不够稳定准确,
因此,常见的做法时将大约2/3~4/5的样本用于训练,剩余样本用于测试。
1.2 交叉验证法
“交叉验证法”先将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到,然后每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值,显然交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,因此,通常把交叉验证法称为“k折交叉验证”,k最常用的取值是10.
与留出法相似。为了减小因为样本划分不同而带来的影响,K折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的有“10次10折交叉验证”假设只分为1组,则得到了一个特例,《机器学习》一书中称之为“留一法”,这样会大大提高模型的准确率(因为测试集变少了),但同样可以理解的是这样的话会使得对训练集的计算能力要求巨大,就好比用100万个数据训练出的数据去预测一个数据,准确率确实会很高,但同样的,训练100万条数据的模型则会要求巨大的开销。
1.3 自助法
自助法并非像名字听上去那么随便,它主要是用于减少测试集和训练集比例和规模的影响。即对我们的样本空间进行,多次重复放回抽样。比如有100个球,你抽100次,每次抽完放回去,这样就是自主采样法。但应该也能很明显的察觉到,尽管抽样100次,还是总会有球没被抽到的。样本在m次采样中始终不被采到的概率是(1-1/m)^m,? 取极限可以得到等于1/e,也就是约等于36.8%;而我们使用取得的63.2%的数据进行训练和测试,36.8%则不用。
因此,自助法在数据集较小或者难以有效划分训练/测试集时很有用。此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习(不太懂,等后面再看看)等方法有很大的好处,但自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。
所以,在初始数据量足够时,留出法和交叉验证法更常用一些。
|