1. 前言
模型的评估方法主要是针对有监督学习的。
2. 数据集划分方法
我们在拿到数据的时候,数据的表现形式会呈现多种多样性,我们首先需要做的是把数据格式化,把数据处理成计算机可以认识的结构。处理数据的过程叫做特征工程,特征工程是一个在机器学习的过程中,非常重要的一个过程,特征工程做的好坏,会直接影响到最后的模型准确度的一个上限。特征工程我后面会详细介绍,今天介绍的是在特征工程处理完后的,数据集的划分和性能的度量方式。
2.1 留出法
留出法就是把数据集切分成训练集和测试集,留出法最重要的一点是要保证训练集和测试集的数据分布要相同,避免因为数据划分不均匀而引入的额外的偏差。从样本采样的角度来看待数据集的划分过程,则保留类别比例的采样方式叫做“分层采样”。为了让留出法能够有比较好的效果一般会重复多次进行平均。
2.2 交叉验证
交叉验证一般是在训练集的基础上进行的。因为测试集是最后用来评价模型的好坏的,不能让模型提前看到测试集。
交叉验证有一个超参数K。K代表的意思是从训练集D中,分层采样的方式得到K个互斥的\(D_i\)(K折交叉验证)。然后通过K-1个子数据集的并集进行训练,用剩下的一个子数据集进行验证。就可以得到K个模型,最后返回K个模型的平均值。
过程如下图所示:
交叉验证中有一个特殊的方法交“留一法”,它的意思是如果训练集中有m个数据,那我就进行“m折交叉验证”,每次用一个数据进行验证,这样最大的好处是避免了随机样本划分来带的影响。留一法的结果往往认为是准确的。但是留一法也是计算开销最大的一种方式,一般只会在学术论文中为了追求最好的效果才可能去尝试的办法。
2.3 自助法
我们希望评估的是用整个训练集D训练出来的模型,但是无论是留一法还是交叉验证法,都会切分一部分数据为测试数据,这必然会引入一定的误差。
自助法直接以自助采样(bootstrap sample)为基础。自助采样是每次在数据集D中随机采样产生子数据集D1,然后放回,这个过程重复进行m次采样,获得m个子数据集D1,再对m个子数据集进行训练,获得一个平均的模型。
自助法会有一部分数据一直没有被训练到。这部分数据称为“包外估计”简称OOB,这部分数据量约为36.8%。自助法现在一般运用在随机森林(Random Forest)里面比较多。
3. 性能度量
性能度量是用来衡量模型泛化能力的评价标准。
性能度量可以用来在对同一个问题,评价不同模型的泛化能力的好坏,也可以针对同一个模型的泛化能力是否有所提升。
假定在预测任务中,给定的样本集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}\),其中\(y_i\)是\(x_i\)的标记,\(f(x)\)是模型对x的预测值。
3.1 回归任务
回归任务中,常用的是均方误差
\[ E(f,D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2 \]
更一般的情况,对于数据分布D和概率密度P,均方误差可以改写为
\[ E(f,D)=\int_{x\in{D}}(f(x)-y)^2*p(x)dx \]
3.2 分类任务
3.2.1 准确度
在分类任务中,如果类别的个数是平衡,那么最普遍的一个度量性能的方法是准确度,准确度代表的意思是,预测类别和真实类别进行比较,统计分对的类别的比例。
\[ Acc(f,D)=\frac{1}{m}\sum_{i=1}^mI(f(x_i)= y_i)=1-E(f,D) \]
更一般的情况,对于数据分布D和概率密度P,准确度可以改写为
\[ Acc(f,D)=\int_{x\in{D}}I(f(x)= y)*p(x)dx=1-E(f,D) \]
3.2.2 精准率、召回率、F1
在分类任务中,有一类比较常见的问题,就是数据不平衡的问题。比如癌症预测,针对癌症预测这个问题,本身癌症的发病数相对身体正常的数要低很多。
假设我们的数据是10000个样本,里面有9990个正常值,10个是癌症患者(0代表正常,1代表癌症患者)。如果我们什么都不做的情况下,预测所有人都是0,那正确率是99.9%,感觉是不是准确度已经很高啦,模型已经很不错了?但是这个模型真的有用吗,其实真正的情况是,我们一个癌症患者都没预测出来。所以在这种情况下,用准确度来度量模型的好坏是不对的。我们需要用另外的一种性能度量方式,精准率,召回率和F1值。精准率又叫做查准率,召回率又叫做查全率。