在上一章我们知道了什么是机器学习。其中我们提到了最重要的是算法学习,当我们用算法得到某种模型的时候,我们可以如何去判断他的一个好坏呢?
因此接下来我们继续学习-模型评估与选择
2.1 经验误差与过拟合
*这里所指的误差均是指误差期望。
1.1 基本概念
错误率:分类错误的样本占总样本的比例。E=a/m(a分类错误样本,m总样本)
精度:1-错误率。分类正确的样本占总样本的比例
误差:实际预测输出与样本真实输出之间的差异
经验误差/训练误差:模型在训练集上的误差
泛化误差:模型在新样本上的误差
过拟合:模型把训练样本学的”太好了“可能把训练样本自身的特点当作了所有潜在样本都会具有的一般性质。原因:学习能力太强。结果:泛化能力下降
欠拟合:模型对训练样本的数据都没有学好。原因:学习能力太弱。
讲解一个 NP 是什么?
P=NP是计算机科学中一个著名的未解难题,它表达了一个假设:P类问题和NP类问题相等。换句话说,所有可以在多项式时间内解决的问题(P类问题)都可以在多项式时间内验证其解(NP类问题)。如果P=NP成立,那么意味着存在一种快速算法可以解决所有NP问题,也就是说,NP问题不再是难题。然而,至今尚未有证据证明P=NP是否成立,这仍然是一个未解之谜。
当我们有很多种学习算法的时候,我们应该选择哪一种呢?
这就是”模型选择“问题
解决:对候选模型的泛化误差进行评估 然后选择泛化误差最小的那个模型。但是我们无法直接获得泛化误差,而训练误差又由于过拟合的现象,因此也不适合作为标准。那么在现实中如何进行模型评估与选择呢。
2.2 评估方法
根据实验测试来对模型的泛化误差进行评估
”测试集“:要求:
①测试样本也是从样本真实分布中独立同分布采样而得到
②测试集与训练集互斥 (没有在训练集中出现过)
如何理解互斥:假如老师出的10道习题供同学们练习。考试的时候老师还拿这10道题,那他能不能知道同学们做的好不好呢?
我们现在只有M个样本的数据集D={(x1,y1),(x2,y2).....}既要训练S又要测试T,怎么样才可以做到呢
那接下来就介绍几种方法:
2.2.1 留出法
留出法:直接将数据集分为两个互斥的集合(S、T)
在S上训练出模型后,用T来评估测试误差,作为泛化误差的估计
* 注意:S与T划分的时候要尽可能的保持一致,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
例如:
①在分类任务中
至少要保持样本的类别比例相似。
保留类别比例的采样方式是:”分层采样“、
在使用留出法的时候,一般采用若干次随机划分
一般:2/3~4/5的岩本用于训练,剩下的用于测试。
2.2.2 交叉验证法
交叉验证法:将是数据集D划分为K个大小相似的互斥子集,
每一个子集都要尽可能的保持数据分布特性。最终返回的是K个测试结果的均值。
交叉验证法评估结果的稳定性和保真性很大程度上取决于K。
因此又叫做(K折交叉验证法)
K常取值 10,5,20
如下是10折交叉验证法
划分:随机使用不同划分重复P次,最终的评估结果是这P次的交叉验证的结果的均值。
例如:10次10折交叉验证
特例:留一法(LOO)
如果样本中有m个样本,K值也为m,这这就是留一法。
就是划分为了m个子集
优点:评估结果往往被认为比较准确,但也不是一定准确(NFL)
缺点:当数据集很大的时候,需要训练太多模型,还要调参就显得非常复杂了。
2.2.3 自助法
我们需要评估的是用训练集训练出来的样本,但是我们上面的两种方法都值将训练集给再次划分了一下,而且留一法,再面对大规模数据的时候,计算复杂度太高了。这样必然会引进一些因为样本模型不同而导致的估计偏差。因此我们再来学习自助法。
自助采样法:采一个样后又放回,就是说我们采样的样本中,有可能会有重复的。
下面使用极限的方法计算一个样本始终没有被采到的概率
包外估计
自助法:再数据集小,难以划分训练/测试集时候很有用。但是也引入了估计偏差。
留出法、交叉验证法:在初始数据足够多的时候更常用。
2.2.4 调参与最终模型
什么是参数
为什么要调参
2.3 性能度量
什么是性能度量
对模型的泛化能力进行评估的时候,不仅需要有效可行的实验估计方法,还需要衡量模型泛化能力的评价标准,这就是性能度量。
性能度量反应任务需求
如何度量?
就是把模型预测的结果与真实标记进行比较。
在回归任务中
今天主要介绍分类任务中常用的性能度量
2.3.1 错误率与精度
既适用于二分类也适用于 多分类。
错误率:分类错误的样本数占样本总数的比例。
精度:分类正确的样本数占样本总数的比例。
Ⅱ:这个是指数函数(满足条件的个数之和)
下面是他们对应的概率密度函数
2.3.2 查准率、查全率、F1
直接看如下的一张 混淆矩阵
查准率:P = TP/(TP+FP)—— 真正例 / 预测为正的例子
查全率:R = TP/(TP+FN)——真正例/原本就是正的例子
P和R是一对矛盾的量。
如下是P-R曲线
规律:
① 如果一个模型的P-R曲线被另一个模型的P-R曲线完全包住,则可以说后一个模型的性能优于前者。如图A优于C,那A和B如何比较呢
②看曲线下面积,因为它在一定程度上表征了取得’双高‘的比例(但是这个面积不好计算,因此就有了综合考量的平衡点)
③平衡点(BEP):P=R
这样单纯的看平衡点感觉又太简单了,因此还有下面的一些度量指标
其实我们要理解好查全率和查准率才能更好的理解后面的一些相关指标。
F1:是基于P和R的调和平均
:基于P和R加权调和平均
因为加权,就重在表示侧重点不同,譬如有的侧重P。
其中 :
0 < < 1:度量了查全率对查准率的相对重要性
> 1:查全率更有影响
= 1:就是F1
< 0:查准率更有影响
宏查全率、宏查准率、宏F1
微查全率、查准全率、微F1
2.3.3 ROC与AUC
基于之前谈到的平衡点P=R(在这样的情况下,我们把P和R看的一样重要),现在引入一个截断点 (P和R不一样重要的时候)
我们将模型预测出的概率预测结果进行排序,最有可能的排在前面,最不可能的排在最后,分类过程就相当于在这个排序中的某个‘截断点’将样本分为2部分,前一部分作为正例,后一部分则作为反例。
ROC
ROC:全称‘受试者工作特征’
与PR曲线相似。
横坐标是:假正例率FPR(查全率)。纵坐标:真正例率TPR
AUC 就是ROC曲线下的面积
规律:(与PR曲线相似)
①包裹另一条ROC曲线的模型要由于被包裹的曲线
②如果没有包含关系,则看曲线下面积
AUC的估计计算
2.3.4 代价敏感错误率与代价曲线
如果我们分类错误该怎么办?
譬如:
在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了"一次错误"但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故。为权衡不同类型错误所造成的不同损失,可为错误赋予"非均等代价"
以二分类为例,如下是一个代价矩阵
如何理解呢?
之前我们计算错误率的时候,是直接计算的次数,再这里我们会考虑到不同错误会造成不同的后果
我们令0为正类,1为反例。D+,D-分别作为正例子集和反例子集。
则代价敏感错误率为:
代价曲线:可反映出学习器的期望总体代价
代价曲线横轴的取值是【0,1】的正例概率代价
正例概率代价:
纵轴是取值为【0,1】的归一化代价
以上都太难理解了。
终于被我看懂了。
代价曲线就是有ROC曲线上面的每一个点,变成代价曲线里面的一条线段,然后这些线段的所有的交叉集中 的下端面积就是期望总体代价。
比如:在ROC的曲线上随便找一个坐标点(FPR,FNR)就是下面加粗发的一条曲线。最下面灰色的一块,就是期望总体代价。
2.4 比较检验
我们再来理一下思路:
先使用某种实验评估方法测得模型的某个性能度量结果,然后对这些结果进行比较。那如何比较呢?又是一个问题?
要比较些什么呢?
①泛化性能
就到这吧 下次见!