机器学习测试集选取常用方法-《机器学习》周志华


0.      基本术语

数据集(data set):记录的集合。

示例(instance)或样本(sample):每条记录是关于一个事件或者对象的描述。

属性(attribute)或特征(feature):反映事件或对象在某方面的表现或性质的事项。

属性值(attribute value):属性上的取值。

训练集(training set):训练过程中使用的数据。

学习器(learner):找出规律或者逼近真相的模型。

 

1.      经验误差与过拟合

错误率(error rate):分类错误样本数占样本总数的比例。

错误率E=a/m;在m个样本中有a个样本分类错误。

精度(accuracy)= 1-错误率。

误差(error):学习器的实际预测输出与样本的真实输出之间的差异。

训练误差(training error):学习器在训练集上的误差。

泛化误差(generalization):在新样本上的误差。

 

Goal:希望得到泛化误差小的学习器。

 

实际中,只能努力使经验误差最小化,这样就可能出现一个经验误差很小,在训练集上表现很好的学习器,对所有训练样本都分类正确,即分类错误率为零,分类精度为100%,但是在多数情况下都不好。

 

过拟合:学习能力过于强大,把训练样本所包含的不太一般的特性都学到了,导致泛化性能降低。

欠拟合:学习能力低下。

图片(过拟合,误认为树叶必须有锯齿)

图片(欠拟合,误以为绿色的都是树叶)

 

通过实验测试来对学习器的泛化误差进行评估并改进而做出选择。为此,需使用一个测试集(testing test)来测试学习器对新样本的判别能力,然后以测试集上的测试误差(testing error)作为泛化误差的近似。

 

 

2.      测试集选取

测试集的选取:通常假设测试样本也是从样本真是分布中独立同分布采样得到,但是需注意,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用(原因:希望得到泛化性能强的模型,就是学生做题时的举一反三能力)

 

已知:一个包含m个样例的数据集D={(x1,y1),(x2,y2),…,(xm,ym)},既要训练又要测试。对D进行适当的处理,从中产生训练集S和测试集T。

 

2.1留出法(hold-out)

方法:直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即.在S上训练出模型后,用T来评估其作为测试误差,作为对泛化误差的估计。

 

举个栗子:假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练,如果模型在T上有90个样本分类错误,那么其错误率为,精度为1-30%=70%。

 

注意事项:

(1)训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。例如在分类任务中至少要保持样本的类别比例相似,尝采用分层采样的方法,即采样过程中保留类别比例。

         (2)即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。

因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行试验评估或取平均值作为留出法的评估结果。

 

在这里,还有一个窘境:若训练集S包含绝大多数样本,则训练处的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确,测试集小,评估结果的方差较大;若令测试集T多包含一些样本,则训练集S与差别更大了,被评估的模型与用D训练出的模型相比可能有较大的差别,从而降低了评估结果的保真性(fidelity)。

 

常见解决方法:将大约2/3~4/5的样本用于训练,剩余样本用于测试。

 

2.2交叉验证法(crossvalidation)/k折交叉验证(k-fold cross validation)

方法:将数据集D划分为k个大小相似的互斥子集,即.每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后每次都用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

 

tips:

(1)    评估结果的稳定性和保真性很大程度上取决于k的取值,最常用取值为10,此时成为10折交叉验证;其他常用的k值有5、20.

(2)    为了减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的10次10折交叉验证。

(3)    特例:留一法:k=m,留一法使用的训练集与初始数据集相比只是少了一个样本,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,因此结果往往被认为比较准确。缺陷:数据集比较大事训练m个模型的计算开销可能过大。

 

2.3自助法(bootstrapping)

方法:以bootstrap sampling为基础,给定包含m个样本的数据集,我们对它进行采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D’,然后将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复m次以后,我们就得到了包含m个样本的数据集D’。将D’用作训练集,D\D’用作测试集;这样实际评估的模型与期望评估的模型都使用m个训练样本,而仍有数据总量约1/3的、没在训练集中出现的样本用于测试,这样的测试结果,也成为“包外估计”(out-of bag estimate).

 

在这个过程中,样本在m次采样中始终不被采到的概率是(1-1/m)m,取极限得到

即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D’中。

 

使用条件:

(1)在数据集较小,难以有效划分训练/测试集时很有用;

(2)可从初始数据集中产生多个不同的训练集,对集成学习等方法很有用。

 

总结:自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。在初始数据量足够时,留出法和交叉验证法更常用一些。

你可能感兴趣的:(机器学习测试集选取常用方法-《机器学习》周志华)