目录
1绪论
机器学习:机器学习所研究的主要内容是关于在计算机上从数据中产生模型的算法。
机器学习是研究关于学习算法的学问。
1.1基本术语
数据集(样本):
学习(训练):从数据中得到模型的过程。
训练数据,训练样本,由训练样本组成的集合成为训练集。
模型(学习器):学习算法在给定的数据和参数空间上的实例化。
样例:有了标记信息的示例。
标记的集合称为标价空间。
分类:预测的值为离散值的学习任务。
回归:预测的值为连续值得学习任务。
二分类任务:只涉及两个类别的分类任务。其中一个称为正类,另外一个称为反类。
多分类任务:涉及到多个分类的分类任务。
测试:学得模型后使用期进行预测的过程。
测试样本:被预测的样本。
聚类:将训练集中的训练样本进行分组。
监督学习:训练数据有标记信息的学习任务。分类和回归
无监督学习:训练数据没有标记信息的学习任务。聚类
泛化能力:学的得模型适用于新样本的能力。
1.2假设空间
基本术语:
归纳:特殊到一般。
演绎:一般到特殊。
归纳学习:广义:从样例中学习
狭义:从训练数据中学的概念
布尔概念学习:最基本的概念学习。
版本空间:与训练集一致的假设合集。
归纳偏好(inductive bias):算法在学习过程中对某种类型假设的偏好。
奥卡姆剃刀(Occam's razor)原理:若有多个假设与观察一致,则选择最简单的那个。常用的归纳偏好的原则。
“没有免费的午餐”(NFL)定理:任何学习算法在样本空间上产生的学习误差都是相等的,即任意的学习算法的期望性能都相同。(前提为所有问题出现的机会相同,所有的问题同等重要,即假设了f的均匀分布)
NFL定理说明了脱离具体的问题,空泛谈什么学习算法更好毫无意义,因为若考虑所有潜在的问题,则所有学习算法都一样好,要谈论算法的相对优劣,必须针对具体的学习问题。在某些问题上表现好的算法,在另一些问题上却可能不尽如人意,学习算法自身的归纳偏好与问题是否相配,往往会起到决定性的作用。
2模型评估与选择
2.1经验误差与过拟合
一些术语:
错误率:分类错误的样本数站样本总数的比例。
精度:1-错误率
误差:学习器的实际预测输出与样本的真实输出之间的差异。
训练误差(经验误差):学习器在训练集上的误差。
泛化误差:学习器在新样本上的误差。
过拟合:学习器在学习过程中将训练样本自身的一些特点当成了所有潜在样本的一般性质,导致泛化性能下降。
欠拟合:学习器对训练样本的一般性质尚未学好。
模型选择:当面临不同的参数配置是,选择其中一种参数配置。理想状态是以泛化误差最小未选择原则,然而泛化误差无法直接得到,而训练误差由于过拟合现象的存在不适合作为标准。
2.2评估方法
实验测试:使用一个测试集来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。测试集需要尽可能与训练集互斥,测试样本尽量不在训练集中出现,未在训练过程中使用过。
2.2.1留出法
直接将数据集划分为两个互斥的集合,其中一个集合作为训练集,另一个作为测试集。
需要注意的是,训练集合测试集的划分要尽可能保持数据分布的一致性,避免引数据划分过程中引入额外的偏差而对最终结果产生影响。
单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。
不足:
2.2.2交叉验证法
将数据集D划分w为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到,每次使用k-1个子集的病机作为训练集,余下的那个子集作为测试集,这样可以获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,故把交叉验证法称为“k折交叉验证”(k-fold validation),k最常用的取值是10,此时成为10折交叉验证。
与留出法类似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的额均值,例如常见的有“10次10折交叉验证”。
留一法:
数据集D中m个样本,令k=m,即得到交叉验证法的一个特例:留一法。在这种验证方法下显然只有一种划分方式,这样可以使得留一法得到的模型和期望用D训练得到的模型较为类似,可以认为这样得到的方法比较准确,但当遇到数据集较大时,留一法的时间开销往往过大,并且根据NFL原理,留一法也不是永远都比其他评估方法好。
2.2.3自助法
自助法可以在减少训练样本规模不用造成的影响,同时还能比较高效地进行实验估计。
自助法直接以自助采样法为基础:即给定包含m个样本的数据集D,我们对它产生数据集D',每次随机从D中挑选一个样本,将其拷贝放入D',然后再将给样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D',这就是自助采样的结果,显然,D中有一部分样本会在D‘中多次出现,而另一部分样本不出现,可以做一个简单的估计,样本在m次采样中始终不被采到的概率是,取极限后得到1/e约等于0.368,即通过自助采样,原始数据集中约有36.8%的样本未出现在采样数据集D'中,于是我们可以将D'用作训练集,D/D'用作测试集,这样实际评估的模型与期望评估的模型都是用使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试,这样的测试结果,亦称作“包外估计”
自助法常用于数据集较小,难以划分训练集/测试集的场景,此外自助法能行初始数据集中产生多个不同的训练集,这对于集成学习等方法有很大的好处。但是自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差,因此在初始数据量足够时,留出法和交叉验证发更为常用。
2.2.4调参与最终模型
大部分学习算法都需要对一些参数进行设定,参数配置不同,学得的模型性能往往有显著差别,因此在进行模型评估时除了选择算法还要对算法参数进行设定,这就是通常所说的参数调节,简称调参。
验证集(validation set):在模型评估和选择中用于评估测试的数据集。
2.3性能度量
性能度量(peformance messure):衡量模型泛化能力的评价标准。
2.3.1回归任务常用的性能度量
回归任务常用的性能度量是“均方误差”
2.3.2分类任务常用的性能度量
2.3.2.1 一些术语
错误率:分类错误的样本数站样本总数的比例。
精度:分类正确的样本数占样本总数的比例。
查准率:检测出来的对的结果里面有多少是真的对的
查全率: 检测出来的真的对的结果占所有真的对的结果的比例
查准率和查全率是一对矛盾的度量,查准率高时,查全率往往偏低,查全率高时,查准率往往偏低。
P-R曲线:根据学习器的预测结果对样例进行排序,排在前面的是学习期认为最可能是正例的样本,排在最后的是学习器认为最不可能是正例的样本,按此顺序逐个把样本作为正例进行预测,每次都计算出当前的查全率和查准率,以查准率为纵轴、查全率为横轴作图,就可以得到查准率=4-查全率曲线。
P-R图:显示P-R曲线的图就被称为P-R图。
P-R图能直观显示出学习器在样本总体上的查全率、查准率,若一个学习器的曲线被另一个学习器完全“包住”,则可以断言后者的性能优于前者,但若是两者产生了交叉则无法轻易比较。一种方法是根据两者包含的面积,这个在一定程度上表征了学习器在查准率和查全率上取得“双高”的比例,但这个值不容易估算,故人们设计了一些衡量查准率和查全率的性能度量。
平衡点(Break-Event Point,BEP):查全率=查准率时的取值,越高说明性能越好,由此判断A好于B。BEP过于简单。
F1度量:F1是基于查准率和查全率的调和平均定义的。
Fβ度量:Fβ是基于查准率和查全率的加权调和平均定义的。
当面临多个混淆矩阵时,希望考察算法的全局性能,我们的处理方式:
一种做法是先在各个混淆矩阵上分别计算查准率和查全率,再计算平均值,由此得到宏查准率,宏查全率和对应的宏F1;另一种做法是可以先将各个混淆矩阵的对应元素进行平均得到各个平均值,再由此计算得到微查准率,微查全率和微F1
ROC:受试者工作特征曲线,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以他们为横纵坐标作图,就得到了Roc曲线,Roc曲线的纵轴是真正例率(TPR),横轴是假正例率(FPR),两者定义分别如下
ROC图:显示ROC曲线的图
与P-R图类似,若一个学习器的ROC曲线被另一个学习器完全包住,则可断言后者的性能优于前者,若两者发生交叉,则需比较两者所包裹的面积大小,即AUC
AUC:ROC曲线下包含的图像区域面积
代价矩阵:costij表示将第i类样本预测为第j类样本的代价,一般来说costii=0,损失程度相差越大则costij和costji的差值越大。
非均等代价下需要考虑不同的错误对于学习器性能衡量的影响,在这种情况下,我们所希望的不是最小化错误次数,而是希望最小化“总体代价”(total cost),若将 表2.2中的第0类作为正类,第1类作为范磊,令D+与D-分别代表样例及D中的正例子集和反例子集,则代价敏感错误率为
3线性模型
3.1基本形式
给定由d个属性描述的实例x=(x1,x2,..,xd),其中xi是x在第i个属性上的取值,线性模型视图学的一个通过属性的线性组合来进行预测的函数,即
3.2线性回归
给定数据集D={(x1,y1),(x2,y2),...(xm,ym)},其中xi=(xi1;xi2;xi3;...;xid),yi∈R,线性回归试图学得一个线性模型以尽可能准确地预测实值输出标记。
我们所要做的任务就是找到一组参数,来让模型在我们选择的性能度量中表现最好,例如若是将均方误差作为回归任务的性能度量,我们所要做的就是找到一组参数使得模型在训练集上的均方误差最小。
均方误差对应的是欧氏距离,基于均方误差最小化的模型求解方法称为最小二乘法,在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
多元线性回归
更为一般的情况是如本节开头的数据集Di样本由d个属性描述,此时我们试图学得
广义线性模型
对于单调可微函数g(*),令 ,这样得到的模型叫做广义线性模型
3.3对数几率回归
对于分类问题,我们可以找到一个单调可微函数,将分类任务的真实标记y与线性回归模型的预测值联系起来。
对于二分类问题,我们可以利用单位跃迁函数,但是单位跃迁函数并不连续,故我们可以利用对数几率函数来代替。
可以看出对数几率函数是一种“sigmod函数”,它将z值转化惟一个接近于0或1的y值,并且其输出值在z=0附件变化很陡,将对数几率函数作为g函数代入(3-15),即
3.4线性判别分析
线性判别分析方法(LDA)是一种经典的线性学习方法,又称作“fisher判别分析”
LDA的思想非常朴素:给定训练样例集,设法将样例投影到一条直线线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能远离,在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
3.5多分类学习
对于解决多分类问题,常用的解决问题的方法是将多分类问题通过拆解法拆为若干个二分类问题来求解,具体来说,先对问题进行拆分,然后为拆分出的每个二分类问题训练一个分类器,在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。
常用的经典的拆分策略有三种,“一对一”(OvO),“一对多”(OvR),多对多(RvR)
3.6类别不平衡问题
对于类别不平衡问题,在二分类问题中常用的手段是 “再缩放”,再缩放有三种常用的做法,一是欠采样法,即将反例中的部分样例删去,使得反例和正例的样本比例大致相同,二是过采样法,即在正例样本中多次采样,使得反例和正例数目大致相等,三是阈值移动,即使用原始样本集进行训练,但是在预测过程中将嵌入其中。
4决策树
4.1衡量样本集合纯度的几种指标
4.1.1信息熵
信息熵是信息量的数学期望,是信源发出信息前的先验不确定性,也称为先验熵,信息熵的数学定义为:
4.1.2信息增益
信息增益 = entroy(前) - entroy(后)
条件熵:
信息增益的定义公式:
4.1.3信息增益率
信息增益率的定义公式:
4.1.4基尼指数
基尼指数的定义公式:
直观来说,Gini(p)反映了从数据集中任意取两个样本,其分类表及不一致的概率,因此,Gini(p)越小,则数据集的纯度越高。通常来说,基尼指数越低信息纯度越高,决策树也越好
4.2构建决策树的三种常用算法
4.2.1 ID3.0算法
ID3算法(Iterative Dichotomiser 3,迭代二叉树3代)是一种贪心算法,用来构造决策树。ID3算法起源于概念学习系统(CLS),以信息熵的下降速度为选取测试属性的标准,即在每个节点选取还尚未被用来划分的具有最高信息增益的属性作为划分标准,然后继续这个过程,直到生成的决策树能完美分类训练样例。
算法流程如下:
- 如果节点满足停止分裂条件(所有记录属同一类别 or 最大信息增益小于阈值),将其置为叶子节点;
- 选择信息增益最大的特征进行分裂;
- 重复步骤1-2,直至分类完成。
4.2.2 C4.5算法
ID3.0算法往往偏好取值数目较大的特征,因此为了避免这一不足,在此基础上提出了C4.5算法。C4.5算法和ID3.0算法类似,但是是以信息增益率作为分裂的依据。
算法流程如下:
- 如果节点满足停止分裂条件(所有记录属同一类别),将其置为叶子节点;
- 考查已有的特征,挑选其中信息增益率高于平均水平的特征;(避免对取值数目较少的特征的偏好)
- 选择信息增益率最大的特征进行分裂;
- 重复步骤1-2,直至分类完成。
4.2.3 CART算法
CART算法是以基尼系数作为分裂的依据。
算法流程如下:
- 如果节点满足停止分裂条件(所有记录属同一类别),将其置为叶子节点;
- 选择基尼指数最小的特征进行分裂;
- 重复步骤1-2,直至分类完成。
4.3剪枝算法
4.3.1过拟合
过拟合是指为了得到一致假设而使假设变得过度严格。在决策树学习中,为了尽可能正确分类训练样本,节点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以至于把训练集自身的一些特点当做所有数据都具有的一般性质而导致过拟合。
4.3.2预剪枝(自顶向下)
预剪枝是在构建决策树的过程中,提前终止决策树的生长,从而避免过多的节点产生(如何判断分支前后的泛化能力是否提升,从而判断是否需要分支,这里采用了2.2节的留出法)。
具体做法:
1.将数据划分为训练集和验证集(留出法)
2.在划分每个节点之前进行评估,若当前节点的划分不能提升泛化性能,则停止划分,并将其标记为叶节点;
3.若当前节点的划分能够提升泛化性能(从信息增益 or 其他方式 选择最优属性),则继续划分;
4.若 划分前>=划分后,则选择不划分。
优缺点:
预剪枝方法虽然简单但实用性不强,因为很难精确的判断何时终止树的生长,可能会带来欠拟合的风险。
4.3.3后剪枝(自底向上)
后剪枝是先从训练集中生成一颗完整的决策树,然后逐个考察分支节点,比较分支节点前后的验证精度,若精度提升则保留分支,否则就将将分支替换为叶子节点。
具体做法:
1.将数据划分为训练集和验证集
2.生成一颗完整的决策树
3.自底向上考查每一个分支节点,若当前节点的划分不能提升泛化性能,则不划分,并将其标记为叶节点;
3.若当前节点的划分能够提升泛化性能(从信息增益 or 其他方式 选择最优属性),则保持划分;
4.若 划分前>=划分后,则选择不划分。
优缺点:
时间开销大,但是保留的分支更多,泛化能力更强。
4.4一些补充
4.4.1连续值处理
因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。
具体的做法如下:
4.4.2缺失值处理
在决策树中处理含有缺失值的样本的时候,需要解决两个问题:
1.如何在属性值缺失的情况下进行划分属性的选择?(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
2.给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)
下面就来介绍如何解决这两个问题: