《机器学习》(一)——《西瓜书》1、2章
第一章
1.1 基本术语
- 数据集
- 示例、样本
- 属性、特征
- 属性值
- 属性空间、样本空间、输入空间
- 特征向量
- 维数
- 训练数据、训练样本、训练集
- 标记(Label)
- 样例(Example)
根据训练数据是否拥有标记信息,学习任务可大致划分为两大类: - “监督学习”(supervised learning) - “无监督学习”(unsupervised learning)
分类和回归是前者的代表,而聚类则是后者的代表.
需注意的是,机器学习的目标是使学得的模型能很好地适用于“新样本”而不是仅仅在训练样本上工作得很好。学得模型适用于新样本的能力,称为“泛化" (generalization)能力。具有强泛化能力的模型能很好地适用于整个样本空间。
第二章
2.1 经验误差与过拟合
错误率: 分类错误的样本数a占样本总数m的比例 E=a/m
精度=1-错误率
误差: 学习器的实际预测输出与样本的真实输出之间的差异
“训练误差”或“经验误差”: 学习器在训练集上的误差
“泛化误差”: 在新样本上的误差
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的。欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等,而过拟合则很麻烦。过拟合是机器学习面临的关键障碍。
2.2 评估方法
通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“测试集”(testingset)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testingerror)作为泛化误差的近似。
通过对数据集进行适当的处理,从中产生出训练集S和测试集T。下面介绍几种常见的做法。
2.2.1 留出法
留出法直接将数据集D划分为两个互斥的部分,其中一部分作为训练集S,另一部分用作测试集T。
通常训练集和测试集的比例为70%:30%。同时,训练集测试集的划分有两个注意事项:
- 尽可能保持数据分布的一致性。避免因数据划分过程引入的额外偏差而对最终结果产生影响。在分类任务中,保留类别比例的采样方法称为“分层采样”(stratified sampling)。
- 采用若干次随机划分避免单次使用留出法的不稳定性。
- 注意训练集和测试集的划分比例
2.2.2 交叉验证法
交叉验证法先将数据集D划分为k个大小相似的互斥子集,每次采用k − 1个子集的并集作为训练集,剩下的那个子集作为测试集。进行k次训练和测试,最终返回k个测试结果的均值。又称为“k折交叉验证”(k-fold cross validation)。
留一法是k折交叉验证k = m(m为样本数)时候的特殊情况。即每次只用一个样本作测试集。该方法计算开销较大。
2.2.3 自助法
自助法以自助采样为基础(有放回采样)。每次随机从D中挑选一个样本,放入D′中,然后将样本放回D中,重复m次之后,得到了包含m个样本的数据集。
这样,仍然使用m个训练样本,但约有1/3未出现在训练集中的样本被用作测试集。
优点: - 自助法在数据集较小、难以有效划分训练/测试集时很有用。 - 自助法能从初始数据集产生多个不同的训练集,这对集成学习等方法有很大好处
缺点: - 然而自助法改变了初始数据集的分布,这回引入估计偏差。
在初始数据量足够时,留出法和交叉验证法更常用
2.2.4 调参与最终模型
调参主要是对每种参数选定一个范围和变化步长,从划分出的候选参数中选择合适的参数。
2.3 性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。性能度量反映的任务需求,所以模型的“好坏”是相对的,不仅取决于数据与算法,也取决于任务需求是什么。
回归任务最常用的性能度量是“均方误差”
下面主要介绍分类任务常用的性能度量
2.3.1 错误率与精度
错误率与精度常用于分类任务,错误率是测试样本中分类错误的样本数占总样本数的比例,精度是测试样本中分类正确的样本数占总样本数的比例。
分类错误率:
精度:
若测试数据集的精度高或者错误率小,则模型的泛化能力强;反之,则泛化能力弱。
用测试数据集的精度来表示模型的泛化能力在正负样本比例相差较大的时候就不适用了。 运用精度来表示测试数据集的泛化能力,测试数据集的正负样本比例应该均衡(1:1)。
2.3.2 查准率、查全率与F1
例如在信息检索中,我们经常会关心”检索出来的信息中有多少比例是用户感兴趣的“,”用户感兴趣的信息中有多少被检索出来了“;在视频监控中,我们关注的是”人脸识别的罪犯中有多少比例是真的罪犯“,”所有罪犯中有多少比例被识别出来“。
错误率计算较笼统,查准率和查全率是更为适用于此类需求的性能度量。
查准率关注的问题是筛选的样本中是正样本的比例。
查全率关注的问题是筛选的样本中有多少比例的正样本被筛选出来了。
混淆矩阵是计算查准率和查全率或其他模型性能评估方法的基础。
混淆矩阵的定义:
TP:真正例(true positive),即真实结果和预测结果都是正例。(预测的是真的,实际也是真的)\ FP:假正例(false positive),即真实结果是反例,预测结果是正例。(预测是真的,实际是假的)\ TN:真反例(true negative),即真实结果和预测结果都是反例。(预测是假的,实际是真的)\ FN:假反例(false negative),即真实结果是正例,预测结果是反例。(预测是假的、实际也是假的)
TP+FP+TN+FN=样例总数
查准率P(Precision)与查全率R(Recall)分别定义为:
预测(筛选)出来的例子里,有多少是预测为真的
预测为真的数量,在真实情况下真数量中所占比例
因此,学习模型P(Y=1|X)对测试数据集输出一系列为正样本的概率,根据概率由大到小排列,然后依次设置阈值,若大于该阈值,则为正样本;反之则为负样本。每次阈值的设置都有对应的查准率和查全率,因此以查全率为横坐标,查准率为纵坐标,就可以得到查准率-查全率曲线,检测“P-R”曲线。
根据P-R曲线来评估模型的性能:\ (1) 若一个学习模型的P-R曲线完全包住了另一个学习模型的P-R曲线,则前者的性能优于后者。即查全率相同的情况下,查准率越高模型的泛化性能越好,如模型A优于模型B。\ (2) 若两个学习模型的P-R曲线互相交叉,则可通过“平衡点”(Break-Event Point,简称BEP)来评价模型的优劣,BEP是“查准率=查全率"的数值。由上图可知,模型A的平衡点大于模型B的平衡点,即模型A优于B。\ (3) 由于BEP过于简化,更常用的是F1度量:
F1越大,性能越好。\ (4) F1度量认为查全率和查准率的重要性程度一样,若考虑到查全率和查准率的重要性程度不一样,如推荐给用户的信息尽可能是用户感兴趣的,那么查准率更重要;抓捕逃犯时更希望尽可能少漏掉逃犯,此时查全率更重要。\ 为了描述查准率和查全率的相对重要程度,则用F1度量的一般形式$F\beta$
其中, 度量了查全率对查准率的相对重要性, 时退化为标准的F1; 时查全率更重要; 时,查准率更重要。
很多时候我们有多个二分类混淆矩阵,例如进行多次训练/测试,每次得到 一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局” 性能;甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵;..... 总之,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率。
2.3.3 ROC与AUC
ROC
在不同的任务中,我们根据不同任务需求采取不同的截断点。若更重视“查准率”(想要查的更准确),应该在排序靠前的位置进行截断(找到正例更有把握);若更重视“查全率”(想把正例查的更全),应该在排序靠后的位置进行截断。
P-R曲线是从查准率和查全率的角度去衡量学习模型的泛化性能,ROC曲线则是从更一般的情况下去衡量学习模型的泛化性能,若没有任何先验条件的限制情况下,推荐用ROC曲线去衡量模型的泛化性能。\ 绘制ROC曲线的思想与P-R曲线一致,对学习模型估计测试样本为正样本的概率从大到小排序,然后根据概率大小依次设置阈值,认为大于阈值的测试样本为正样本,小于阈值的测试样本为负样本,每一次阈值设置都计算”真正例率“(True Positive Rate,简称TPR)和”假正例率“(False Positive Rate,简称FPR)。
TPR和FPR的定义如下:
ROC曲线横坐标为假正例率,纵坐标为真正例率,曲线图如下:
本文对ROC曲线的首末两点进行解释:\ 测试数据集包含N例正样本和M例负样本,若阈值设置的最大,则学习模型对所有测试样本都预测为负样本,混淆矩阵如下:
TPR = TP / (TP + FN) = 0 / (0 + N) = 0\ FPR = FP / (TN + FP) = 0 / (0 + M) = 0\ 因此,当阈值设置最大时,TPR与FPR均为0\
若阈值小于所有模型估计测试样本为正样本的数值时,则测试样本均为正样本,混淆矩阵如下:
TPR = TP / (TP + FN) = N / (N + 0) = 1\ FPR = FP / (TN + FP) = M / (M + 0) = 1
因此,当阈值设置最小时,TPR与FPR均为1。
AUC(Area Under Curve)为ROC曲线的面积,面积可以通过梯形面积法求解。
AUC值的定义
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
AUC值的物理意义
假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。
AUC值的计算
(1)第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和,计算的精度与阈值的精度有关。
(2)第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取NM(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(NM)。
(3)第三种方法:与第二种方法相似,直接计算正样本score大于负样本的score的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本(rank_max),有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。最后我们得到正样本大于负样本的概率为:
2.3.4 代价敏感错误率与代价曲线
代价敏感错误率
若在评价学习模型性能时考虑不同类分类错误所造成不同损失代价的因素时,称为代价敏感错误率评估方法。\ 假设训练数据集D包含正例子集D+和负例子集D-。若分类错误的损失代价相同,即均等代价。代价矩阵如下:
模型的代价敏感错误率:
II(.)是指示函数,若*为真则为1,否则为0
分类错误的损失代价不相同,即非均等代价。如下图,其中costij表示将第i类样本预测为第j类样本的代价。\ 代价矩阵如下:
模型的代价敏感错误率:
II( )是指示函数,若*为真则为1,否则为0
该定义是计算模型损失代价的一般化,若分类错误的损失代价相同,令 ,则与之前的代价敏感错误率表达式一致。
不管是使用何种损失代价函数,构建模型最优化等价于最小化代价敏感错误率。
代价曲线
ROC曲线在均等代价(分类错误的损失代价相同)的前提下反映学习模型的泛化能力,"代价曲线"是在非均等代价的前提下反映学习模型的期望总体代价。期望总体代价越小,则模型的泛化能力越强。
代价曲线的横坐标是样例为归一化的正例概率代价,正例概率为p,给定的正例概率为先验概率,范围为0~1,纵轴是归一化的损失代价。代价曲线研究的是正样本先验概率和损失代价的关系。
归一化的正例概率代价:
代价曲线如下图:
其中,灰色的阴影部分为模型的期望总体代价,期望总体代价越小,则模型的泛化性能越好;反之,模型泛化性能越差。
期望总体代价的意义:正例先验概率下学习模型的最小损失代价,并对所有正例先验概率下的最小损失代价求和。
参考链接:
- http://zhuanlan.zhihu.com/p/53692548
- http://zhuanlan.zhihu.com/p/53781144