机器学习模型评估

Rate this post

在机器学习中,为了构造以及验证泛化性强的学习算法,需要合适的训练数据和测试数据。若目前有足够多的数据集D,如何将其分为合适的训练集S和测试集T,是一个需要解决的问题。以下是一些方法:

  1. 留出法

留出法即将数据集D,分为互斥的数据集S以及数据集T。其关系如下:D=S∪T, S∩T=∅。注意在分割时保持数据分布的一致性,即保证两个数据集为互斥关系,保证样本的类别比例相似,避免因数据划分过程引入额外的偏差而对最终结果造成影响。为了减少划分对结果造成的影响,单次使用留出法是不可靠的,一般需要多次随机划分,重复进行实验,最后得出其均值。另外,S中的数据不能过量也不能过少,如果过量,则T中数据过少,得不到较为准确的检测结果,如果过少,则得不到良好的学习效果。一般取D数据集中的2/3~4/5作为训练集S。

  1. 交叉验证法

将数据集D分为k个大小相似的互斥子集,即D=D1∪D2∪D3∪…∪Dk。轮流将每一个数据集作为测试集T,进行k次实验并测试,取平均值。即将前k-1个数据集作为训练集S,将第k个数据集作为测试集T,再将前k-2个数据集以及Dk作为训练集S,第k-1个数据集作为测试集T,以此类推。这样得到k个结果,求均值,则为最后结果。这种方法又称为k折交叉验证。一般来说,k常取10。与留出法相同,为了减少因样本划分对结果造成的差异,最好将数据集D使用不同的划分方式划分p次,即p次k折交叉验证。最后取其均值。

实际上,若D数据集中存在m个数据,当m=k时,这种极端的状况称为,留一法。这种方法得到的算法相对来说,泛化性更强一些。但是如果m非常大时,非常费时费力。