赞
踩
本篇博文详细讲解了机器学习中模型选择的理论知识。主要分为以下五个模块。
机器学习始终都在关注一个误差的概念,学习器在训练集上的误差称为training error。在新样本的误差称为泛化误差(generalization error),显然我们希望得到泛化误差小的学习器。
为了达到这个目的我们必须尽可能的学习到训练样本的内部规律然后才能在新样本中有良好的表现。当然如果学习的过好就可能把训练样本本身潜在的规律当做泛化规律学习了,这样就会出现过拟合(overfitting)。当然学习不够拟合的不好的我们又称为欠拟合(underfitting)。
所以我们每一个学习算法都有防止过拟合的模块。
评估方法是指如何对清洗完成的数据集进行划分使用,这里不牵扯用什么标准来衡量。
此模块分为四个问题来讲解:
hold-out(留出法)
cross validation(交叉验证法)
booststrapping(自助法)
调参与最终模型
留出法是指直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。在S上训练出模型后,用T来评估其测试误差,作为泛化误差的估计。
我们进行数据集切分时不是简单的切分而是尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。例如在分类任务中至少要保持样本的类别比例相似。如果S和T两个集合的样本类别差别过大,则会产生偏差。
不同需求下如何合理的对数据进行划分呢?
这个方法是最常用的了,我们将数据集D划分为K部分,每一次选取K-1个部分作为训练样本,1个作为测试样本。
如果我们将K选为1怎么产生了一种特殊的方法称为留一法(LOO),LOO相比于初始训练集仅仅少了一个样本,则使得训练结果更加趋向于真实的效果。但是这样训练次数过多,训练成本高,且效率也未必那么高。
这个方法的核心就是”自助采样”,如果有m个样本。则我们随机从这样本集中有放回的抽取m个数。这样必然有数据被多次采到,当然也有数据从未被采到。通过极限计算可以得到从未被采到的数据大约有37%。
我们可以将采集到的m个样本作为训练集,将从未采集到的样本作为测试集。当然多次的采集会改变样本本身的分布规律。这种方法在小样本集上是非常好用的。
这一块无言。。。
这一部分是文章最重要的一部分了。我们第二个问题探讨的是,如何合理的对样本进行切分以让数据以最合理的方式送给算法,并调整的算法的参数,得到一个模型。但是我们是通过什么来判断这个模型是优秀的呢?判断模型的优秀有什么标准吗?
答案肯定是有的,并且对于不同的机器学习问题有着不同的标准。我们分别来看一下分类、聚类和回归问题在模型判定标准上的一些事情。
(一)、分类问题
1、 error rate & accuracy(错误率与精度)
错误率是分类错误的样本数占样本总数的的比例。
精度是分类正确的样本数占样本总数的比例。
注:精度和错误率是最经常使用的衡量标准,但是有些问题上它的表述力度还是不够的。比如我们知道错误的有多少,但是错误中把正确判定为错误的有多少,把错误判定为正确的有多少这个是无法衡量的。
2、precision & recall(准确率和召回率)与 F1
在一些需求中我们需要更精细的度量。例如:在信息检索中,我们经常关心“检索出的信息有多少比例是用户感兴趣的”“用户感兴趣的信息中有多少被检索出来了”这样更加精细的度量。
我们根据真实情况和预测情况将实例划分为:TP(真正例)、FP(假正例)、TN(真反例)、FN(假反例)。
P = TP/(TP+FP) :精度是指预测的正例中被正确预测的正例占有多少。
R = TP/(TP+FN):召回率是指所有正例中,被预测对样例的占样本原有正例的比例。
正如P和R的定义一样,我们当然希望是获得更高的P和R值。通过上面对准确率和召回率的描述我们可以发现,准确率更关心的是在已经预测为真的结果中,预测正确的比例,这时候我们可以发现如果我们预测为真的个体数越少,准确率越高的可能性就会越大,即如果我们只预测最可能为真的那一个个体为真,其余的都为假,那么这时候我们的准确率很可能为100%,但此时召回率就会很低;而召回率care的是在所有为真的个体中,被预测正确的个体所占的比例,那么可以看到如果我们预测为真的个体越多,那么召回率更高的可能性就会越大,即如果我们把所有的个体都预测为真,那么此时的召回率必然为100%,但是准确率此时就会很低。因此这两个度量往往是相互对立的,即准确率高则召回率通常比较低,召回率高则准确率往往会很低。因此我们分别用准确率或召回率对模型的预测结果进行评价会有片面性,故接下来介绍P-R曲线来对模型进行更准确的评价。
那么我们有什么办法可以通过这两个值来选择模型呢?
我们可以使用P-R曲线示意图来进行衡量。
我们可以根据学习器的预测结果对样例进行排序,排在前面的是学习器最有可能是正例的样本,而排在后面的则是最不可能是正例的样本。把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点。然后将分类阈值依次设为每个样例的预测值,即将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。
如果我们同时对多个分类器进行评价,怎么做呢?将分类器的P-R曲线画在同一图中。
A、 如果一个学习器的曲线被另一个曲线完全包住,则可以判断后者的性能优于前者。
B、 如果交叉呢?为了解决这个问题我们使用平衡点(BEP)来度量,即P=R时的取值。
如上图中A>B>C
C、 利用F1度量来进行判断。F1=2∗P∗R/(P+R),F1的值越大越好,可以发现,F1是一个准确率和召回率的调和平均数,其更关注较小值,因此如果P与R中一个值太小会对F1产生更大的影响,但是这样的判断都是以准确率和召回率同等重要为基础的。
但是对于很多问题,其会更关注其中的一个指标,例如癌症的判断,其更关注的是召回率而不是准确率,因为如果我们更关注准确率,就会使得很多的癌症患者被误诊为不是癌症,从而造成患者的死亡率会更高;
4 利用Fβ来判断。Fβ=(1+β^2)∗P∗R/(β^2∗P+R),当β=1的时候,即为F1度量,当β>1的时候,召回率有更大的影响,反之准确率有更大的影响,这个很好理解,我们把Fβ转换一下又Fβ=1/(1+β^2) (β^2/R+1/P),通过该公式我们可以看到当β>1的时候,R对于Fβ的影响更大。
但是对于P-R曲线,其对于样本类别是否平衡非常的敏感。
对于上文中说的P-R/F我们研究的是二分类的一个混淆矩阵的情况。但是在实际应用中我们经常面对多个二分类混淆矩阵。例如:进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估算全局的性能。这个时候我们怎么做呢?
这里有两种方式:
3、ROC/AUC
很多机器学习器为每一个测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值进行比较。若大于阈值则分为正类,否则为反类。我们根据这个实值对测试样本进行排序,最可能是正例的排在最前面,否则排在后面。而我们分类的过程就相当于在这个排序序列中选一个点,前一部分判作正例,后一部分则作反例。
我们根据不同的任务需求来采用不同的截断点,例如:如果我们更重视准确率我们可以选在前面的位置。如果我们更重视召回率我们可以选择靠后的位置进行截断。
ROC曲线则是从这个角度来研究机器学习的泛化性能的有力工具。
纵轴:真正例率TPR;横轴:假正例率FPR
衡量标准与P-R曲线相同。
4、代价敏感错误率与代价曲线
代价矩阵:
costij表示将第i类样本预测为第j类样本的代价。
非均等代价下,希望总体代价最小化。
若假设第0类为正类,1为反类。D+代表例集正例子集,D-反例子集,则代价敏感错误率为:
在非均等代价下,ROC不能直接反应出学习器的期望总体代价,代价曲线可以。横轴为[0,1]的正例函数代价
p是样例为正例的概率;纵轴是取值为[0,1]的归一化代价
FPR假正例率,FNR=1-TPR假反例率。
ROC每个点,对应代价平面上一条线。
例如,ROC上(TPR,FPR),计算出FNR=1-TPR,在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,面积则为该条件下期望的总体代价。所有线段下界面积,所有条件下学习器的期望总体代价。
按照图来看,最终总体代价越来越小
(二)、聚类问题
(三)、回归问题
未完待续。。。
我们前面已经完成了通过某种实验评估方法测得学习器的的某个性能度量结果,然后对这些结果进行比较。但是怎么对这些结果值进行比较呢?
其一、其实我们希望比较的是泛化性能,然而通过实验评估的方法我们得到的是测试集上的性能,两者的对比结果可能未必相同。其二、测试集上的性能与测试集本身的选择有很大关系。其三、很多机器学习算法本身有一定的随机性。那么有没有适当的方法对学习器的性能进行比较呢?
我们想到的是统计假设检验。统计假设检验主要是用来验证所选的模型和所解释的公式,在结构上、形式上、变化方向上是否能代表客观情况。那么这个方法刚好和我们当前的情况吻合。那么具体怎么操作呢?又有哪几种检验方法呢?
我们经常会遇到验证假设是否成立的情况。这里必须要提一下置信区间。置信区间是指由样本统计量所构造的总体参数的估计区间。在统计学中,一个概率样本的置信区间(Confidence interval)是对这个样本的某个总体参数的区间估计。置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度。置信区间给出的是被测量参数的测量值的可信程度,即前面所要求的“一个概率”。
假设我们使用错误率当做衡量的标准,记为ε。
(一)、交叉验证T检验
(1)
(2)5*2交叉验证
(二)、McNemar检验
(三)、Friedman检验/Nemenyi后续检验
1 偏差 : 度量了学习算法的期望预测与真实结果的偏离程度,也就是学习算法本身的拟合能力。
2 方差:刻画了数据集变化所导致的学习性能的变化。也就是数据扰动所造成的影响。
3 噪声:刻画了学习问题本身的难度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。