2.1、经验误差和过拟合
错误率:通常把分类错误的样本占总样本总数的比例称为“错误 率”,即如果在m个样本中有a个样本是错误的,则错误率为E=a/m
解释:统计分类器预测出来的结果与真实结果不同的个数,然后除以总的样例集D的个数。
精度:是分类正确的样本数占样本总数的比例。1-a/m,即 精度=1-错误率
注意:这里的分类正确的样本数指的不仅是正例分类正确的个数还有反例分类正确的个数。
误差:学习器的实际预测输出与样本真是输出之间的差异称为“误差”。
很多情况下,我们可以学得一个经验误差非常小、在训练集上表现很好的学习器,例如甚至对所有训练样本的分类正确,即分类错误率为0,分类精度为100%,但是这不是我们想要的学习器。
好的学习器:为了达到目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新的样本做出正确的选择。
过拟合:当学习器把训练样本学得太“好”的的时候,很可能已经把训练样本自身的一些特点当做了自身的一些特点当做了所有潜在样本都会具有的性质,这样会导致泛化性能下降,这种现象称为“过拟合”。
2.2、评估方法
通常可以使用测试集来对学习器的泛化误差(新样本上的误差称为“泛化误差”)进行评估并进而做出选择。
将测试集分为训练集和测试集的方法:
1、留出法
留出法直接将测试集D划分为两个互斥的集合,其中一个集合作为训练集S,另外一个作为测试集T,即.则S训练出模型后,用T来评估其测试误差。
2、交叉验证法
我理解的是K倍交叉验证(k-fold cross validation):将所有样本分成K份,一般每份样本的数量相等或相差不多。取一份作为测试样本,剩余K-1份作为训练样本。这个过程重复K次,最后的平均测试结果可以衡量模型的性能。
3、自助法:
自助法以自助采样法为基础,给定包含m个样本的数据集D,我们对它进行采样产生数据集D';每次随机从D中挑选一个赝本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,就得到了包含m个样本的数据集D',这就是自助采样的结果。
自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。
然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。
代码如下:
from sklearn import datasets
from sklearn import model_selection
#引入sklearn库中手写数字的数据集
digits = datasets.load_digits()
#留出法
X_train, X_test, y_train, y_test = model_selection.train_test_split(digits.data, digits.target, test_size = 0.2, shuffle = True)
#K折交叉验证
#设置K为5
kf = model_selection.KFold(n_splits=5)
#使用5折交叉验验证划分数据集,返回一个生成器对象(即索引)
digits_gen = kf.split(digits.data)
for train_idx, test_idx in digits_gen:
X_train = digits.data[train_idx] #训练集
X_test = digits.data[test_idx] #测试集
y_train = digits.target[train_idx] #训练集标签
y_test = digits.target[test_idx] #测试及标签
#留一法交叉验证
loo = model_selection.LeaveOneOut()
digits_gen = loo.split(digits.data)
for train_idx, test_idx in digits_gen:
X_train = digits_gen[train_idx]
X_test = digits_gen[test_idx]
y_train = digits_gen[train_idx]
y_test = digits_gen[test_idx]
2.3、性能度量
对学习器的泛化性进行评估,不仅需要有效可行的实验评估方法,还需要有衡量模型泛化能力的评价标注,这就是性能度量
回归任务常用的性能度量是“均方误差”
分类任务常用的性能度量是“错误率和精度”
(2)什么是查准率和查全率
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数。分类结果的“混淆矩阵”(confusion matrix)如表1所示。
查准率(Precision),又叫准确率,缩写表示用P。查准率是针对我们预测结果而言的,它表示的是预测为正的样例中有多少是真正的正样例。定义公式如3所示。
注意:这里大家有一个容易混淆的误区。精度(Accuracy)和准确率(Precision)表示的是不同的概念,计算方法也不同。所以,大家在看paper的时候,要特别注意这些细节。
精确度(Accuracy),缩写表示用A。精确度则是分类正确的样本数占样本总数的比例。Accuracy反应了分类器对整个样本的判定能力(即能将正的判定为正的,负的判定为负的)。定义公式如4所示。
查全率(Recall),又叫召回率,缩写表示用R。查全率是针对我们原来的样本(即是训练样本中)而言的,它表示的是样本中的正例有多少被预测正确。定义公式如5所示。
注意:大家可以比较一下查准率和查全率的计算公式。其实就是分母不同,查准率的分母是预测为正的样本数。查全率的分母是原样本的所有正样例数。
(3)查准率和查全率之间的矛盾
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
思考一个问题:为什么会有这样的情况呢?
答案:我们可以这样理解,在一个分类器中,你想要更高的查准率,那么你的阈值要设置的更高,只有这样才能有较高的把握确定我们预测是正例是真正例。一旦我们把阈值设置高了,那我们预测出正例的样本数就少了,那真正例数就更少了,查不全所有的正样例。
举个例子来理解一下吧!例如,若希望将好瓜尽可能多地挑选出来,则可通过增加选瓜的数量来实现,如果将所有的西瓜都选上,那么所有的好瓜也必然都选上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低。通常只有在一些简单任务中,才可能使查全率和查准率都很高。
三、P-R曲线、平衡点和F1度量
(1)P-R曲线
在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的是学习器认为“最不可能”是正例的样本。按此顺序设置不同的阈值,逐个把样本作为正例进行预测,则每次可以计算出当前的查准率、查全率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”。图1给出了一个示意图。
图1:P-R曲线与平衡点示意图
P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如图1中学习器A的性能优于学习器C;如果两个学习器的P-R曲线发生了交叉,例如图1中的A和B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。然而,在很多情形下,人们往往仍然希望把学习器A与B比出个高低。这时,一个比较合理的判断依据是比较P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。但这个值不太容易估算,因此,人们设计了一些综合考虑查准率、查全率的性能度量,比如BEP度量、F1度量。
(2)平衡点(BEP)
“平衡点”(Break-Even-Point,简称BEP)就是这样一个度量,它是“查准率=查全率”时的取值,例如图1中学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B。
(3)F1度量
BEP曲线还是过于简化了些,更常用的是F1度量。我们先来谈谈F1度量的由来是加权调和平均,计算公式如6所示。
加权调和平均与算术平均和几何平均相比,调和平均更重视较小值。当β=1,即F1是基于查准率与查全率的调和平均定义的,公式如7所示。
我们把公式7求倒数,即得F1度量公式,即公式8所示。
在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确实是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。F1度量的一般形式是,能让我们表达出对查准率/查全率的不同偏好,它定义为公式9所示。
其中,β>0度量了查全率对查准率的相对重要性。β=1时,退化为标准的F1;β>1时查全率有更大影响;β<1时,查准率有更大影响。
---------------------
原文:https://blog.csdn.net/program_developer/article/details/79937291