模型评估与选择
一.误差与过拟合
分类器分类错误的样本数占样本总数的比例为错误率(errorate),E=m/n(m为分类错误的总样本数,n为总样本数),分类的精度(accuracy) P=(1-E)x100%
学习器实际预测值和样本真实值之间的差异为“误差”
- 训练误差/经验误差:学习器在训练数据上的误差
- 泛华误差:学习器在新样本上的误差
我们希望得到的是泛化误差尽可能小的学习器,在通过训练数据训练学习器的过程中是在尽可能的最小化训练误差。有时学习器的训练误差非常小,但当遇到新的样本时表现的却不好。因此为了的当泛华能力比较强的学习器,只能让学习器从训练样本中学习到尽可能适应所有样本的普遍规律,要尽可能的学习所有训练样本的共性,这样学习器在遇到引得样本时才会做出正确的判断。通过训练数据训练出的学习器会有两个问题:
- 过拟合:学习器学习能力过于强大把训练数据学习的太好了,可能把训练样本自身的特点当做了所有样本的一般性质,导致过拟合,是学习器的泛化能力降低。过拟合无法避免,只能尽量减小。
- 欠拟合:和过拟合相对应,有学习器学习能力过低,对训练样本的一般性质没有学好,欠拟合容易克服,关键的问题是过拟合
二.模型评估和选择方法
不同的机器学习算法,同一算法的不同参数配置都是不同的模型,机器学习的模型选择就是对模型的泛化误差进行评估选择泛化误差最小的模型。
通过训练数据得到的学习器,将学习器在在测试数据上的测试误差作为学习器的泛华误差。
训练集与测试集要有如下关系:训练集和测试集都是从样本真实分布中独立同分布采样而得,他们应该尽可能互斥,测试样本尽量不出现在训练样本中。
假设包含m个样例的样本集D={(x1,y1),(x2,y2),...,(xm,ym)}
,如何划分训练集和测试集的常用方法如下:
留出法
直接将样本集D划分为两个互斥的集合D= S U T,S作为训练集,T作为测试集估计分类器的泛化误差。- 训练集和测试集的划分要保持数据分布的一致性,避免数据划分引入偏差影响结果。比如在分类任务中要保持两个集合中样本的类别别比例相似。
- 在使用留出法时不同的划分会得到不同的模型,单次留出法得到的结果往往不够稳定可靠,一般采用若干次留出法随机划分,重复试验评估后取平均值作为留出法的评估结果。并且常将样本集的2/3 ~ 4/5的样本用于训练,剩余的用于测试。
交叉验证法
- 将样本集D划分为k个大小相似的互斥子集,D=D1 U D2 U…U Dk,每个子集尽可能保持数据分布的一致性,
- 每次使用k-1个子集的并集作为训练集,剩余的一个子集作为测试集,
这样可以得到k组训练/测试集,进行k次实验,得到的是k次测试结果的均值
交叉验证法评估结果的稳定性很大程度取决于k的取值,因此也称为“k折交叉”验证,k常取10,其他常用值为5,20等。
交叉验证法的特例:留一法(LOO),k=m
- 留一法的优点:留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集,每个子集一个样本,在多数情况下,留一法中被实际评估的模型和期望评估的用D训练出的模型很相似,评估结果往往被认为很准确。
- 留一法的缺点:数据集比较大时,计算复杂度高,开销非常大。
- 自助法
自助法采用又放回采样方法,原始样本集D,每次从D中随机挑选一个样本,拷贝到D’中,并放回D中,重复每次,就得到了包含m个样本的数据集D’。
通过采样法,初始数据集D中有约36.8%的样本未出现在D’中,D’作为训练集,D/D’作为测试集
总结:
- 在初始数据集比较充足时,留出法和交叉验证法更常用一些
- 在数据集比较小,难以有效划分训练/测试集是使用自助法
- 对于数据集小且可有效划分的时候最好使用留一法来进行划分,因为这种方法最为准确
数据集的分类及作用
- 训练集 training set: 用于训练模型
- 验证集 validation set: 用于模型选择
- 测试集 test set: 用于最终对学习方法的评估
调参
机器学习中的两类参数:
- 算法的参数/超参数
- 模型的参数
算法的参数往往在实数范围内,因此对每种参数配置都训练出模型是不可能的,现实中往往对每个参数选定一个范围和步长值,这样选定的参数不是最佳的,但这是计算开销和性能估计之间进行这种的结果。调参往往很苦难,工程量大。
三.性能度量
衡量模型泛化能力的评价标准就是性能度量,对比不同模型时使用不同的性能度量往往得到不同的评判结果。所以模型好坏是相对的,不仅取决于算法和数据,还决定于任务需求。
1.错误率和精度
错误率和精度是分类任务中最常用的两个性能度量
2.查准率,查全率,F1
错误率和精度有时不能满足所有的任务度量需求,对于某些问题不光要分类正确,还要求其他更进一步的需求,因此精度不能满足评估需求。比如挑西瓜,我们更关心挑出的西瓜有多少好瓜,或者有多少好瓜被挑选出来了,为了衡量这种指标,引入了查准率和查全率,查准率( precision , 注:分类精度为 accuracy)亦称准确率,查全率(recall)亦称召回率。
对于二分类问题,样本真实类别和分类器预测类别有四种组合:
- TP 真正例(true positive)
- FP 假正例(false positive)
- FN 假反例(false negative)
- TN 真反例(true negative)
- TP+FP+FN+TN = 样本总数
- 查准率:它是相对我们预测结果而言,预测的正例中有多少是真正的正例
- 查全率:它是相对测试样本而言,样本中的正例有多少被预测出来
查准率和查全率往往是矛盾的,查全率高时,查准率会偏低;二查准率高时,查全率就会偏低。只有在一些简单任务中这两个指标才会都很高
设计了“PR曲线”来综合考虑查全率、查准率的性能度量
在P-R曲线中,如果一个分类器的曲线完全包住另一个分类器的曲线,那么前者的性能优于后者,如果俩个分类器的曲线相交,则很难判断性能的优劣,需要其他指标来衡量。
平衡点(BEP):曲线查全率等于查准率的点,过于简单
F1:是基于查全率和查准率的调和平均,公式如下:
其中Fβ是F1的更一般形式,因为在实际中不同的应用对查全率和查准率的要求不一样,所有 Fβ 是加权调和平均。β=1 时就是 F1; β>1 时查全率影响更大;0<β<1 时,查准率影响更大些。
3. ROC和AUC
3.1 ROC
ROC是一种度量分类器分类好坏的标准,评估分类器性能的标准有很多,但不同任务不同需求对好坏的标准并不一样。使用最多的标准就是分类精度,但有些现实问题中 accuracy 不能很好地评估分类器的性能。eg. 测试样本中有A类样本90个,B 类样本10个。分类器 C1 把所有的测试样本都分成了A类;分类器 C2 把A类的90个样本分对了70个,B类的10个样本分对了5个;则C1的分类精度为 90%,C2的分类精度为75% 。但是,显然C2更有用些,而且不同问题中分类错误的代价不一样。
很多学习器为测试样本产生一个实值或概率预测,将这个预测值和分类阈值threshol进行比较,大于阈值分为正例,否则分为反例。这个阈值直接决定了分类器的性能即泛化能力。根据分类器对测试样本的预测结果对所有的测试样本进行排序,分类就是在这个排序中选取某个截断点,截断点之前为正例,截断点之后为反例。根据不同的任务需求选取不同的截断点,比如如果更重视查准率,那么就选择的截断点更靠前,如果更重视查全率,选择的截断点更靠后的位置。因此排序质量的好坏,表示综合考虑分类器在不同任务下的“期望泛化性能”的好坏,ROC曲线就是从‘期望性能’的角度评估分类器的性能。
ROC全称是“受试者工作特征”
ROC横坐标x为‘真正例率’ TRP,纵坐标y为‘假正利率’ FRP
- TRP = TP / (TP + FN)
- 真正例率表示原测试样本中正例被分为正例的比例
- FPR = FP /(TN + FP)
- 假正例率表示原测试样本中反例被分为正例的比例
根据分类器的预测结果对测试样本进行排序,按照此顺序逐个把每个样本作为截断点(阈值)进行预测,每次得到两个指标值,得到ROC曲线,所以ROC体现的是分类器期望性能。
假设在一个二分类中,有正例和反例,那么对于分类结果当然是越多的正例被分出来更好,就是横坐标TRP越大越好,希望误分的反例越少越好,即FPR越小越好。放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。
类似于将预测结果排序得到分类结果统计图,如下图,左侧为负类分类结果统计图,右侧为正类分类结果统计图,两个图重叠的不跟越少那么分类器的分类性能越好,重叠的越多分类器的性能会越差,当有重叠时选择合适的阈值直接决定了分类器的分类能力。
如下图所示:不同分类性能的分类器对应的ROC曲线,分类能力越好的分类器的ROC曲线越接近左上角
3.2 AUC
通过ROC曲线可以对不同分类器进行比较,如果一个分类器完全包住另一个分类器,那么前者的性能一定优于后者,若果曲线之间相交,就要比较ROC曲线下面的面积,即 AUC(Area Under ROC Cure) ,AUC量化了ROC曲线表示的分类器的分类能力。
3.2.1 AUC的含义
The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.
首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
- AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。
- 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
- AUC = 0.5,随机猜测,模型没有预测价值。
- AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
3.2.2 AUC的计算方式
4. 代价敏感错误率和代价曲线
在现实任务中,不同错误所造成的后果并不一样,代价不相同。例如将健康患者诊断为患病,会增加后续检查的麻烦,而将患病者诊断为健康,后果核能是错失拯救生命的机会,后者误判的代价很明显远大于前者误判。
以二分类为例的代价矩阵如下
假设给定 m+ 个正例和 m- 个负例,D+ 和 D- 分别代表正、反例集合 ,则代价敏感错误率为
在非均等代价下,“代价曲线”可以反映分类器的期望总体代价。x坐标为正例概率代价,如下公式,p为样例为正例的概率。纵轴y为归一化代价FNR为假正例率,FPR为假反例率,FPR=1-FNR 。
代价曲线如下 ,ROC曲线的每个点代表代价平面上的一条线段。
5. 偏差和方差
对算法除了通过实验评估学习器的泛化性能,还要分析为神魔有这样的性能,偏差方差分解是解释算法泛化性能的重要工具
5.1 偏差-方差分解
那么如何理解方差和偏差呢? 如下图经典的靶心图,假设红心是最正确的预测值就是样本的真实分类,二蓝色的点为模型对样本的输出值。由图可以观察到左侧两个靶子上的样本蓝点/预测值比较集中方差较小,右侧两个靶子的蓝点相对很分散则方差较大;从横向来看,上面的两个蓝色预测值比较集中的靠近靶心,所以偏差小,二下面的两个靶子中的蓝色点离靶心比较远则偏差比较大。
以回归为例,算法的期望预测为:
方差:
噪声为样本在测试集的实际标记和真实标记的偏差
偏差是期望预测和真实标记的误差
对算法的泛化误差分解
分解结果:泛化误差可以分解为偏差、方差和噪声
注:这个分解形式仅在基于均方误差的回归任务中推导出。
- 偏差度量了学习算法的期望预测与真实结果的偏离程度,刻画了算法本身的拟合能力
- 方差度量了同样大小的训练集的变动所导致的的学习性能的变化,刻画了数据扰动所造成的影响
- 噪声表达了当前任务上任何学习算法所能达到的期望泛化误差的下界。刻画了问题的本身难度
所以泛化性能是由算法的能力、数据的充分性和任务本身难度所共同决定的。
5.2 偏差-方差窘境
一般情况下,偏差和方差是有冲突的,这就是偏差方差窘境,如下图所示
对于一个特定的任务,当训练不足时,分类器的拟合能力不足,存在欠拟合,训练数据的扰动不足以使分类器发生显著的变化,这时偏差主导着泛化误差(总体误差);当加强训练程度时,分类器拟合能力逐渐增强,偏差逐渐变小不再主导误差,训练数据发生的扰动逐渐被学习器学到(即通过不同训练集得到的分类器的拟合能力不相同),这时方差主导了泛化误差;当训练程度十分充足时,分类器的拟合能力非常的强,训练数据的轻微扰动都会导致分类器发生显著的变化,如果训练数据局部特性、非数据集一般特性被分类器学习到,则发生了过拟合。