读周志华《机器学习》个人读书笔记

匿名 (未验证) 提交于 2019-12-02 22:56:40

机器学习所研究的内容:是关于在计算机上通过数据产生“模型”的算法,即为“学习算法”(learning algorithm)。
“模型”指的就是学习所得的结果。
从数据中学得模型的过程称为“学习”或“训练”。
预测的若为离散值,此类学习任务称为“分类”(classification)若为连续值,此类学习任务称之为“回归”(regression)。涉及到两个类别的“二分类”(binary classification)任务,其中一个为“正类”(posive class),另一个为“反类”(negative class)。
根据训练数据是否拥有标记信息,学习任务分为:“监督学习”(supervise learning)和“无监督学习”(unsupervised learning)。分类回归是前者的代表,聚类(clustering)是后者的代表。
学得的模型适用于新样本的能力,称为“泛化”(generalization)能力。

归纳(induction)和演绎(deduction)。
归纳是从特殊到一般的泛化过程,即为从具体的事实中总结出一般的规律。演绎是从一般到特殊的“特化”(specialization)过程,即从基础原理推演出具体状况。
归纳学习有广义和狭义之分,广义的归纳学习相当于从样例中学习,而狭义的归纳学习则要求从训练数据中学得概念,又称为“概念学习”或“概念形成”。
可能存在多个假设与训练集一致,即存在一个与训练集一致的“假设集合”,我们称之为“版本空间”。(version space)

机器学习算法在学习过程中对某种类型假设的偏好,称为“归纳偏好”(induction bias)。
“奥卡姆剃刀“原则:当多个假设与观察一致时,选择最简单的那个。但是使用的前提是不平凡的。

NFL(No Free Lunch Theorem)“没有免费午餐”的定理。我们从中能够懂得“什么学习算法最好”是基于具体问题的。
机器学习和统计学的研究为数据挖掘提供分析技术。数据库的领域的研究是为数据挖掘提供管理技术。

学习器的实际预测输出与样本的真实输出之间的差异称为“误差“。
学习器在训练集上的误差称为“训练误差”(training error)或者“经验误差”(empical error)。在新样本上的误差称之为“泛化误差”(generalization)。
当训练器过于符合新样本的时候,将会导致泛化性能下降,这种现象称为“过拟合”(overfitting)。
欠拟合(underfitting)指的就是对训练样本的一般性质尚未学好。

注意:过拟合的问题比较复杂,很难解决,是不可避免的,我们所做的只能是缓解,也就是降低风险。

测试集(testing set)是用来测试学习器对新样本的学习能力,将测试误差近似地看做为“泛化误差”。
测试集应该尽可能地与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

2.2.1留出法(hold-out)
“留出法”将数据集分成两个互斥的集合。
注意的问题:
(1)训练/测试集的划分要尽可能地保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终的结果产生影响。例如在分类任务中至少要保持样本的类别比例相似,这种采样方式称之为“分层采样”(stratified sampling)。
(2)单次使用留出法得到的估计结果往往不够准确稳定可靠,所以需要进行若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
将大约2/3――4/5的样本用于训练,剩下的用于测试。

2.2.2交叉验证法(cross validation)
“交叉验证法”先将数据集D划分成k个大小相似的互斥子集。每个子集保持数据分布的一致性,即从D中分层采样所得。然后每一次将k-1个子集的并集当做训练集,剩下的当做测试集,这样就能得到k组训练/测试集,进而进行k次训练和测试。最后返回的是这k次结果的均值。又叫做“k折交叉验证”(k-fold cross validation),一般k取10。

2.2.3自助法(bootstrapping)
“自助法”直接以自助采样法为基础,在给定m个样本的数据集D中,我们对它进行采样产生D‘:每次随机挑选一个样本,将其拷贝到D’中然后再将样本放回数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复m次,然后就得到m个样本的数据集D‘,这就是自助采样的结果。
于是我们用D’作为训练集,D\D‘作为测试集,这样我们仍有数据总量为1/3的、没在训练集中出现的样本用于测试,这样的测试结果,亦称“包外估计”。(out-of-bagestimate)
注:\表示集合的减法。
留出法,自助法以及交叉验证法所适用的范围:
自助法在数据集较小、难以有效划分训练/测试集时很有用;由于产生了多个不同的训练集,对集成学习很有用。但同时产生的数据集改变了原先的数据集分布,会引入估计偏差。故当初始数据量足够时,使用留出法和交叉验证法比较好。

2.2.4调参与最终模型
除对学习算法进行选择,还需对算法参数进行设定,这就是“调参”(parameter tuning)。
现实中常用的方法是,是对每一个参数进行选定一个范围和变化步长。调参的过程工程量很大,对最终的模型性能有关键性影响。
模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。

衡量模型泛化能力的评价标准,即为性能度量。性能度量反映了任务需求,模型的好坏是相对的,判断模型的好坏,不仅取决于算法和数据,还决定于任务需求。
回归任务最常用的性能度量是“均方误差”(mean squared error)。就是将预测结果f(x)与真实标记进行比较。


2.3.1错误率与精度
错误率定义为:

精度定义为:

2.3.2查准率(precision)、查全率(recall) 与F1
分类结果混淆矩阵


查准率P与查全率R分别定义为:


查全率和查准率是一对矛盾的度量。
查准率-查全率曲线,简称“P-R”曲线,显示该曲线的图称为“P-R”图。

所画的曲线为了方便和美观,所以显示出平滑单调曲线。但是现实任务中的P-R曲线是非单调,不平滑的。在很多局部都会出现波动。
若一个学习器的“P-R”曲线被另外一个学习器的曲线完全”包住“,则可断言后者的性能优于前者;如果两个学习器的”P-R“曲线发生了交叉,难以一般性地断言孰优孰劣,只能在具体的查准率和查全率条件下进行比较。
综上原因,故人们设计了一些综合考虑查准率和查全率的性能度量。
“平衡点”(Break-Even Point,BEP)就是这样的度量,它是“查准率=查全率”时的取值。但是BEP还是太简单了,更常用的是F1度量。
F1是基于查准率与查全率的调和平均定义的:

然后得到:

在一些应用中,对查准率和查重率的重视程度不同。所以我们使用F1度量的一般形式
是加权调和平均:

能让我们表达出对查准率/查全率的不同偏好。定义为:

其中β>0度量了查全率对查准率的相对重要性。β=1时退化为标准的F1;β>1对查全率有更大影响;β<1时查准率有更大影响。
2.3.3ROC和AUC
很多学习器是为测试样本产生一个实值或概率预测,然后将这个测试值与一个分类阈值(thresold)进行比较,若大于阈值则分为正类,否则为反类。
ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测。每次计算出两个重要量的值,分别以横纵坐标作图,就得到了“ROC”曲线。ROC曲线的纵轴是”真正例率“(True Positive Rate 简称TPR),横轴是”假正例率“(False Positive Rate,简称FPR),两者分别定义为:



进行学习器的比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则后者的性能优于前者;若两个学习器的ROC的曲线发生交叉,则难以判断。较为合理的判断依据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。
形式化来看,AUC考虑的是样本预测的排序质量。给定 AUC可估算为:

机器学习性能不能通过度量值直接比较。
“统计假设检验”为学习器性能比较提供重要依据给出如下检验方法:
2.4.1假设检验
“假设“是我们对学习器泛化错误率分布的猜想或判断。
我们通过不同假设,基于假设检验结果可推断出学习器性能的比较。
当我们做出多次重复留出法或交叉验证法进行训练/测试时,得出多个测试错误率:
t检验
2.4.2交叉验证t检验
基本思想:若两个学习器的性能相同,则使用相同的训练/测试集得到的测试错误率应相同。
假设检验的前提:测试错误率均为泛化错误率的独立采样。
k折交叉验证产生的K对测试错误率:先对每对结果求差,若两个学习器性能相同则差值均值应为0。因此根据差值对“学习器AB性能相同”做t检验,计算差值的均值和方差,在显著度确定条件下,判断变量是否小于临界值,若小于则无显著差别,否则可判断平均错误率较小的学习器性能较优。
因样本有限,加查验证不同轮次训练集有重叠,测试错误率实际上不独立,会导致过高估计假设成立的概率。
5×2交叉验证法
2.4.3McNemar检验
McNemar检验通过考虑变量,服从自由度为1的
分布,即标准正态分布变量的平方。给定显著度α,当以上变量值小于临界值
时,认为两学习器性能没有显著差别;否则性能有显著差别。且平均错误率较小的那个学习器性能较优。
2.4.4Friedman检验与Nemenyi后续检验
定义:Friedman检验是利用秩实现对多个总体分布是否存在显著差异的非参数检验方法。
原始前提:当多个配对样本来自的多个总体分布无显著差异时。
基于算法排序的Friedman检验用于:一组数据集上对多个算法进行比较:
假定数据集比较,由好到差排序,并赋予序值1,2,……
Friedman检验判断这些算法是否性能相同:性能相同,平均序值应当相同。
若”所有算法的性能相同”这个假设被拒绝,说明算法的性能显著不同。
Nemenyi后续检验
Nemenyi检验计算出平均序值差别的临界值域,若两个算法的平均序值之差超出了临界值域,则以相应的置信度拒绝”两个算法性能相同”这一假设。

偏差-方差分解(bias-variance decomposition)就是用来解释学习算法泛化性能的一种工具,试图拆解期望泛化错误率。
泛化误差可分解为偏差、方差与噪声之和。
范化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。
偏差和方差是有冲突的。
训练不足时,拟合能力不强,由偏差主导泛化错误率;
训练充足时,方差主导泛化错误率。

线性模型,关键在于“线性”。顾名思义线性模型试图学得一个通过属性的线性组合来进行预测的函数,即:


其中x是包含d维属性的向量,(x1,x2,x3,…,xd)是d维属性的描述值。该模型由w=(w1,w2,w3,…,wd)和b所确定。 显而易见,输入向量x的每一项属性都对应一定的权重wi ,不同的权重代表该属性对于此模型的贡献度。
一般向量形式写成:

线性模型形式简单、易于建模。很多非线性模型可在线性模型的基础上通过引入层级结构或高维映射所得。

“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。
对于给定一个数据集:


线性回归则试图学得一个线性模型尽可能准确地将预测f(xi)去 逼近yi,即:

显然,既然是逼近,那么误差是存在的。一个良好的线性回归模型的关键就是如何将f(xi)与yi之间的误差最小化!而该模型是由w以及b确定的,那么问题回到w,b的确定:
回归任务中最常用的性能度量是均方误差,也称平方损失,因此上述w,b可以通过均方误差的最小化来计算得出,均方误差:

基于均方误差最小化来进行模型求解的方法称为“最小二乘法”,而在线性回归任务中,最小二乘法就是希望学得一条直线,使得所有样本到该直线上的欧氏距离之和最小。
求解出w和b使得均方误差最小化的过程也称为线性回归模型的最小二乘“参数估计”,换句话讲就是对均方误差线性方程求最小值,解出w,b。通过对w,b分别求偏导,并另偏导为0即可解出w,b,从而确定对应的模型结果。



更一般的,样本由d维属性描述的情况,则为多元线性回归:

均方误差是回归任务中最常用的性能度量。故我们让均方误差最小化:

类似地,也是一样通过最小二乘法对w和b进行估计,为了方便讨论,我们尽量将模型中的各类数据以向量及矩阵形式表示:我们将w和b纳入向量形式其中是一个d+1维的向量.并且将数据集D表示为一个m行,d+1列的矩阵,其中每行代表一个样本。

同时也将(y1,y2,y3,…,ym)以向量y=(y1;y2;…;ym)表示。估其均方误差函数可定义为:其中为预测实值。与上述一元线性回归求解过程的均方误差方程区别就是多元线性回归中每个样本的均方误差方程不再是仅有一个属性描述,而是d个。


满秩或正定,则

不满秩,则可解出多个w。此时需要求助于归纳偏好,或引入正则化。
矩阵解问题又涉及多解,单一解问题,后者即为结果,前者的话还需根据学习算法的归纳偏好决定。
对数线性回归无限逼近与y,如下图所示:

我们即可让线性模型的预测值f(x)逼近真实标记y,当然也可以让线性模型的预测值f(x)通过联系函数g(・)来逼近不同情况下的目标。

一般化,考虑单调可微函数g(・),令

其中g(・)为单调可微函数。这样得到的模型称为“广义线性模型”(generalized linear model )

如二分类问题,y∈{0,1},则需要将线性回归模型产生的预测实值转换为0/1,而因为g(・)必须为单调可微函数,估最直观的单位阶跃函数是不可取的,因此另外考虑对数几率函数:


对数几率函数正是这样一个常用的替代函数:

对数几率函数是一种“sigmoid”函数,将对数几率函数作为g(・)代入得

然后得到:

对几率取对数得到“对数几率”(log odds,亦称logit)

因此,其对应的模型称为“对数几率回归”虽然它的名字叫做“回归”,但是却是一种分类学习方法.优点:直接对分类可能性进行建模,避免了假设分布不准确所带来的问题;它不仅能预测出“类别”,而且可得到近似概率预测,对利用概率决策的任务很有用;对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可以直接用于求取最优解.
将上面的y视为类后验概率估计p(y=1|x),则可得到:


于是,我们通过“极大似然法”来估计w和b。对率回归模型最大化“对数似然

线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法。
LDA思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的直线上,再根据投影点的位置来确定新样本的类别。
二维示意图:


LDA的二维示意图。“+”、“-”分别代表正例和反例,椭圆表示数据簇的外轮廓,虚线表示投影,红色实心圆和实心三角形分别表示两类样本投影后的中心点。
LDA的目标:
给定数据集
第i类示例的集合
第i类示例的均值向量
第i类示例的协方差矩阵
两类样本的中心在直线上的投影:
两类样本的协方差:
同类样例的投影点尽可能接近 -> 尽可能小
异类样例的投影点尽可能远离 ->尽可能大
于是,最大化为:

定义“类内散度矩阵”(within-class scatter matrix)
)

定义“类间散度矩阵”(between-class scatter matrix)

最大化广义瑞利商:

LDA也被常被视为一种经典的监督降维技术。

有些二分类学习方法可直接推广到多分类。但在更多情形下,我们是基于一些基本策略,利用二分类学习器来解决多分类方法。
最经典的拆分策略有三种:“一对一”(One vs. One,简称OvO)、“一对其余”(One vs. Rest,简称OvR)和“多对多”(Many vs. Many, 简称MvM)。
拆解法:
将一个多分类任务拆分为若干个二分类任务分解。OvO和OvR示意图如下:



OvO:训练N(N-1)/2个分类器,存储开销和测试时间大
训练只需要用两个类的样例,训练时间短。
OvR:训练N个分类器,存储开销和测试时间小。但是训练用到全部训练样例,训练时间长。
多对多(MvM):将若干类作为正类,若干类作为反类。
纠错输出码:(Error Connecting Output Codes,简称ECOC)。ECOC的工作过程主要分为两步:
编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集;这样一共产生M 个训练集,可以训练出M 个分类器。
编码:M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终预测结果。

EOOC编码示意图。“+1”、“-1”分别表示学习器f将该类样本作为正、反例;三元码中“0”表示f不使用该类样本。
ECOC编码对分类器错误有一定容忍和修正能力,编码越长,纠错能力越强
对同等长度的编码,理论上来说,任意两个类别之间的编码距离越远,则纠错能力越强

类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。
类别不平衡问题不仅仅出现在原始数据中,而且也有可能出现在经过OvR,MvM策略后产生的二分类任务,因为这两个策略选取样本上面是存在类别不平衡问题的,不过这通常不需要专门处理,因为不同类别都经过OvR,MvM策略后会抵消掉该问题。
我们从线性分类器的角度讨论,在我们用 对新样本x进行分类时,实际上是通过用预测实值与一个阈值进行比较。实际上,y表达了正例的可能性,几率y/1-y反映了正例可能性与反例可能性之间的比值,不考虑类别不平衡的话,即分类器决策规则为:

则预测为正例.

当训练集中正、反例的数目不同时,令表示正例数目,表示反例数目。由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就代表了真实几率。于是只要分类器的预测几率高于观测几率就被判断定为正例,即
则预测为正例

但是我们仍然需要对其预测值进行调整。只需令;

这就是类别不平衡学习的一个基本策略――“再缩放”(rescaling)。
以上解决方法是基于训练集是从真实样本总体中无偏采样,而实际中这个假设往往不成立.现有技术大体上有三类做法:第一类是直接对训练集里的反类样例进行“欠采样”,即去除一些反例使得正反例数目接近,然后再进行学习;第二类是对训练集里的正例样例进行“过采样”,即增加一些正类样例使得正反样例数目接近,再进行学习;第三类则是基于原始训练集进行学习,但在用训练好的分类器进行预测时,将上式嵌入到决策过程中,称为“阈值移动”。

原文:https://www.cnblogs.com/1234zb/p/9367723.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!