西瓜书学习笔记

第1章 绪论
1.1 引言
机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。
其所研究的主要内容,是关于在计算机上从数据中产生“模型”(model)的算法,即“学习算法”(learning algorithm)。
本书中,“模型”泛指从数据中学得的结果,有的文献中用“模型”指全局性结果,而用“模式”指局部性结果。

1.2 基本术语
要进行机器学习,首先要有数据。
一批关于某种事物的数据的集合称为一个数据集(data set)。
其中,每条记录是关于一个事件或对象的描述,称为一个示例(instance)或者
一个样本(sample)。
(注意:有时候整个数据集也被称为一个”样本”,因为它可以看作对样本空间的一个采样,故需要通过上下文判断”样本”为单个示例还是整个数据集。)

反映事物在某方面的表现或性质的事项称为属性(attribute)或特征(feature)。其上的具体取值,称为属性值或者特征值。

属性张成的空间称为属性空间(attribute space)、样本空间或输入空间。
一般情况下,若某个样本有d个属性,则该样本空间即为d维样本空间,
由于每一个示例都在该空间上对应一个点,每一个点对应一个坐标向量,
故可以把一个示例称为一个特征向量(feature vertor)。

从数据中学得模型的过程称作训练或者学习。

训练过程的数据称为训练数据(training data),其中每个样本称为一个训练样本,训练样本组成的集合称为训练集(training set)。
学得的模型对应了数据中的某一潜在规律,故又称为假设(hypothesis),
该潜在规律自身,称为“真实”或“真相”。
关于示例结果的信息,称为标记(label),所有标记的集合,称为“标记空间”或者“输出空间”。

分类:若预测的是离散值,例如”1””0”,此类学习任务称分类(classification)。
回归:若预测的是连续值,则该学习任务称为回归(regression)。

分类中又可分为二分类(binary classification)与多分类任务(multi-class classification),
二分类顾名思义,只需分2类,
一般分别称为“正类”(positive class)与“反类”(negative class),且
一般正类用“1”表示,反类用“0”表示。

学得模型后,用其进行预测的过程称为测试(test),被预测的样本称为测试样本(test sample)。

此时引入聚类(clustering)概念,即将训练集中样本分为若干组,
每一组称为一“簇”(cluster)。
在这里要明白聚类与分类的区别,就要先明白何为监督(supervised)学习,
何为无监督学习
监督学习:训练数据有标记信息的学习过程。亦称:有导师学习。
无监督学习:训练数据没有标记信息的学习过程。亦称:无导师学习。

分类和回归属于典型的监督学习问题,而聚类属于无监督学习问题。故分类与聚类的区别显而易见。

分类是训练数据已有人为标记信息,计算机通过学习这些训练数据,将未出现在训练样本中的陌生的数据分到已有的类别中的过程。
聚类是训练数据没有任何标记信息,计算机需要自行寻找特征,将这些数据分为几个簇,然后将陌生的数据分到计算机自己划分的几个簇中的过程。

需要注意的是,机器学习的目的是使学得的模型可以更好的适用于未知样本。
故引入"泛化“定义。
泛化(generalization):机器学习所学得模型适用于陌生数据的能力。

我们常说泛化性能优劣,即指模型对于陌生数据的适用性的好坏。
一般我们假设全体数据在样本空间上满足一个未知的’分布’(distribution),
我们获得的样本都是独立地从这个分布上采样获得的,
即”独立同分布”(independent and identically distributed ,简称i.i.d.)

那么学习的目的就可以认为寻找最契合这个分布的一个函数来把训练样本完美的分到各自的类中。
一般情况下,训练样本越多,我们得到的关于该分布的信息就越多,这样就越有可能找到这个函数,也就越有可能通过学习获得具有强泛化能力的模型。
1 .3 假设空间
归纳(induction)与演绎(deduction)是科学推理的两大基本手段.
前者是从特殊到一般的“泛化”(generalization)过程,
即从具体的事实归结出一般性规律;
后者则是从一般到特殊的“特化”(specialization)过程,
即从基础原理推演出具体状况.

我们可以把学习过程看作一个在所有假设(hypothesis)组成的空间中进行
搜索的过程,搜索目标是找到与训练集“匹配”(fit)的假设,
即能够将训练集中的瓜判断正确的假设.

现实问题中我们常面临很大的假设空间,但学习过程是基于有限样本训练集进行的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的“假设集合”,我们称之为“版本空间”(version space)

1 .4 归纳偏好
定义:机器学习算法在学习过程中对某种假设类型的偏好,称为归纳偏好。

需要注意,任何一个机器学习算法都必有其归纳偏好,否则将无法产生确定的
学习结果。
归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进
行选择的启发式或“价值观”.那 么 ,有没有一般性的原则来引导算法确立
“正确的”偏好呢?
“奥卡姆剃刀" (Occam’s razor)是一种常用的、 自然科学
研究中最基本的原则,即 “若有多个假设与观察一致,则选最简单的那个”

一个神奇的结论:对于算法A来说,若其在某些方面比算法B好,那么必然存在一些方面B比A好。这个结论对任何算法均成立,无一例外!

“没有免费的午餐”定理(No Free Lunch Theorem, NFL):无论学习算法A多么聪明,学习算法B多么笨拙,它们的期望性能完全一样(总误差与学习算法无关)。
但是需要注意,NFL定理的前提是所有问题出现的机会相同或者所有问题同等重要,但是实际情形并不是这样。
那么NFL定理有什么用呢?
NFL定理是让我们意识到:脱离具体问题而空泛的谈论哪一个算法更好毫无意义!

2 模型的评估与选择
2.1 误差与过拟合

错误率(error rate):分类错误的样本数占样本总数的比例称为错误率。
精度(accuracy):精度 = 1 - 错误率。

如果在m个样本中有a个样本分类错误,那么错误率 E = a/m,精度 = 1 - E。
更一般地
我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义:
在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。
在测试集上的误差称为测试误差(test error)。
学习器在所有新样本上的误差称为泛化误差(generalization error)。
显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这样在遇到新样本时才能做出正确的判别。然而,当学习器把训练集学得“太好”的时候,即把一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来。我们定义:
学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。
学习能太差,训练样本的一般性质尚未学好,
称为:欠拟合(underfitting)。
可以得知:在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。目前,欠拟合问题比较容易克服,例如增加迭代次数等,
然而过拟合是无法彻底避免的,所能做的只有运用各种方法来缓解,常见的缓解过拟合的方法有正则化与dropout等。
2.2 评估方法
通常,我们使用一个测试集来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”来作为泛化误差的近似。
需要注意,测试集应与训练集互斥,即测试样本尽量不在训练集中出现或未在训练集中使用过。
很多时候,我们最初都会得到一个包含m个数据样本的数据集D,那么如何得到训练集S和测试集T呢?自然是选择合适的方法对D进行划分,产生出训练集S和测试集T。
以下介绍几种常见的划分方法:
2.2.1 留出法
何谓留出法(hold-out)?

留出法:直接将数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T,保证S∩T=∅且S∪T=D。

注意:训练集与测试集的划分要尽可能保证数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。

如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方法一般称为“分层采样”(stratified sampling)。

例如通过对D 进行分层采样而获得含70%样本的训练集S 和含30%样本的测试集T , 若 D 包含500个正例、500个反例,则分层采样得到的S 应包含350个正例、350个反例,而 T 则包含150个正例和150个反例;若S 、T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差.

而单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值为留出法的评估结果。
例如:进行100次随机划分,每次产生一个训练集和测试集用于实验评估,100次会得到100个结果,而留出法的返回应当是这100个结果的平均。
常见分割数据比例大约为0.6~0.8,即每次取数据集中60%-80%作为训练集,剩下的作为测试集。

2.2.2 交叉验证法
何谓交叉验证法(cross validation)?
交叉验证法:将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j)。每个子集Di都尽可能保持数据分布的一致性,即从D中分层采样得到。然后每次用k-1个子集的并集作为训练集,剩下的那个子集作为测试集,这样就可以得到k组训练/测试集,从而进行k次训练和测试,最终返回这k次测试的均值。
显然,交叉验证法评估结果的稳定性与保真性在很大程度上取决于k的取值,为了强调这一点,通常把交叉验证法称为k折交叉验证(k-fold cross validation)。k常取值:5,10,20。

与留出法相似,将D划分为k个子集有多种方法,假设k折交叉验证要随机使用不同的划分重复p次,则最终评估结果是这p次k折交叉验证结果的均值,常见有10次10折交叉验证(训练100次)。

交叉验证法也存在第一个特例:留一法(Leave-One-Out,简称LOO):假定数据集D中有m个样本,令k=m,则会发现,m个样本只有唯一的划分方法来划分为m个子集——每个子集一个样本,所以留一法的训练集与数据集D相比只差一个样本,故留一法中被实际评测的模型与期望评估的用D训练出的模型很相似,因此,留一法的评估结果往往被认为较准确。但是在数据集很大的时候,训练m个模型的开销明显是难以忍受的。故NFL定理在这里也同样适用。
2.2.3 自助法
在留出法和交叉验证法中,由于保留了一部分样本作为测试,所以实际评估的模型中所使用的训练集比D小,而我们希望评估的是D训练出的模型,所以这必然会引入一些因训练样本规模不同而导致的估计偏差。所以我们在这里介绍自助法(bootstrapping)来解决这个问题。

自助法以自助采样(bootstrap sampling)为基础(自助采样也叫“可重复采样”与“有放回采样”):
给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次从D中随机选一个样本,将其拷贝入D’中,再将其放回D中,重复m次,那么就可以得到包含m个样本的数据集D’。显然D中一部分样本会在D’中多次出现,而另一部分不出现,由一个简单的估计可以得到样本在m次采样中不被采到的概率如下:

于是我们可以把D’当做训练集,D-D’作为测试集,这样,实际评估模型与期望评估模型都有m个训练样本,而我们仍然有数据总量1/3的样本用于测试,这样的测试结果,称为“包外估计”。
注意:自助法在数据量较少,难以有效划分训练集和测试集的时候很有用,然而自助法改变了初始数据分布,引入了估计偏差,故在数据量足够的时候,留出法和交叉验证法更常用一些。
2.2.4 调参与最终模型
给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。
需要注意的是,我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集称为验证集(validation set)。例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计泛化性能,而把训练数据另外划分为测试集和验证集,基于验证集上的性能来进行模型选择和调参。

2.3 性能度量
性能度量(performance measure)是衡量模型泛化能力的评价标准,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。本节除2.3.1外,其它主要介绍分类模型的性能度量。
2.3.1 最常见的性能度量acc
在回归任务中,即预测连续值的问题,
最常用的性能度量是“均方误差”(mean squared error),很多的经典算法都是采用了MSE作为评价函数,想必大家都十分熟悉。

在分类任务中,即预测离散值的问题,最常用的是错误率和精度,
错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。

2.3.2 查准率(precision),查全率(recall)和F1
查 准 率 亦 称 “准确率”, 查 全 率 亦 称 “召回率”.

在推荐系统中,我们只关心推送给用户的内容用户是否感兴趣(即查准率),或者说所有用户感兴趣的内容我们推送出来了多少(即查全率)

“查准率”(precision)与“查全率" (recall) 是更为适用于此类需求的性能度量。
对于二分类任务,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)与假反例(false negative)四种情形。分别对应为TP、FP、TN、FN。

TP:被模型预测为正类的正样本(实际为正,预测也为正)。
TN:被模型预测为负类的负样本(实际为负,预测也为负)。
FP:被模型预测为正类的负样本(实际为负,预测为正)。
FN:被模型预测为负类的正样本(实际为正,预测为负)。
补充:混淆矩阵Confusion Matrix
机器学习算法结果评估指标_f1-score公式_lili要努力的博客-CSDN博客
(F1-score)是分类问题的一个衡量指标。一些多分类问题的机器学习竞赛,常常将
F1-score作为最终测评的方法。它是精确率和召回率的调和平均数
即下图的 f1-score求法

Precision 精确率
定义:精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。
公式:Precision = TP / (TP + FP)
Recall 召回率
定义:召回率是针对我们原来的样本而言的,它表示的是在实际的样例中,真正的正例被预测出来。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
公式:Recall = TP / (TP + FN)
F1-Score
定义:F1-score基于召回率和精确率计算的;
公式:F1-score = 2 * Precision * Recall / ( Precision + Recall )
正如天下没有免费的午餐,查准率和查全率是一对矛盾的度量。例如我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样查准率就很低了。
“P-R曲线”正是描述查准/查全率变化的曲线,P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:

P-R曲线如何评估?若一个学习器A的P-R曲线被另一个学习器B的P-R曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。

P和R指标有时会出现矛盾的情况,这样就需要综合考虑他们,
最常见的方法就是F-Measure,又称F-Score。F-Measure是P和R的加权调和平均,即:

特别地,当β=1时,也就是常见的F1度量(F1-score),是P和R的调和平均(下面第一个公式),当F1较高时,模型的性能越好。

其中β>0度量了查全率对查准率的相对重要性。β=1时,退化为标准的F1;β<1时,认为查准率有更大影响;β>1时认为查全率有更大影响。
有时候我们会有多个二分类混淆矩阵,例如:多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。简单理解,宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,在算出Fβ或F1,而微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出Fβ或F1。
【Tensorflow】多分类问题的Precision、Recall和F1计算及Tensorflow实现

2.3.3 ROC与AUC
Roc曲线:接收者操作特征(receiveroperating characteristic)
AUC(Area under Curve):Roc曲线下的面积
如上所述:学习器对测试样本的评估结果一般为一个实值或概率,
设定一个阈值threshold,大于阈值为正例,小于阈值为负例,因此这个实值的好坏直接决定了学习器的泛化性能,若将这些实值排序,则排序的好坏决定了学习器的性能高低。
ROC曲线正是从这个角度出发来研究学习器的泛化性能,ROC曲线与P-R曲线十分类似,都是按照排序的顺序逐一按照正例预测,
不同的是ROC曲线以“真正例率”(True Positive Rate,简称TPR)为纵轴,横轴为“假正例率”(False Positive Rate,简称FPR)(PR曲线则以P作横轴,R作Y),ROC偏重研究基于测试样本评估值的排序好坏。
所有反例中的 假正例 即预测为正实际为假FP

分析图像,可以得知:当FN=0时,TN也必须0,反之也成立,我们可以画一个队列,试着使用不同的截断点(即阈值)去分割队列,来分析曲线的形状,(0,0)表示将所有的样本预测为负例,(1,1)则表示将所有的样本预测为正例,(0,1)表示正例全部出现在负例之前的理想情况,(1,0)则表示负例全部出现在正例之前的最差情况。对角线对应于随机猜测模型

现实中的任务通常都是有限个测试样本,因此只能绘制出近似ROC曲线。绘制方法:
首先根据测试样本的评估值对测试样本排序,接着按照以下规则进行绘制。

同样地,进行模型的性能比较时,若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住,则称B的性能优于A。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。
ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。
易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。

2.3.4 代价敏感错误率与代价曲线
上面的方法中,将学习器的犯错同等对待,但在现实生活中,将正例预测成假例与将假例预测成正例的代价常常是不一样的,例如:将无疾病–>有疾病只是增多了检查,但有疾病–>无疾病却是增加了生命危险。
以二分类为例,由此引入了“代价矩阵”(cost matrix)。
其中costij表示将第i类样本分为第j类样本所付出的代价。一般来说,costii=0;若将第0类判别为第1类所造成的损失更大,则cost01>cost10;
损失程度相差越大,则cost01与cost10差别越大。
注意:一般情况下着重的是代价的比值而非代价的绝对值,例如cost01:cost10=5:1与50:10所起效果相同。

所以,在代价不均的情况下,我们所希望的不再是简单的最小化错误次数,而是最小化“总体代价”这样“代价敏感”的错误率(即2.5.1节介绍)。
即错误率乘上代价

在非均等代价的情况下,ROC曲线将不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到这个目的,
代价曲线的横轴是取值为[0,1]的正例概率代价:
式中p表示正例的概率,纵轴是取值为[0,1]的归一化代价。

规范化:“规范化” (normalization)是将不同变化范围的位映射到相同的固定范围中,常见的是[0,1]。此时亦称"归一化"。

代价曲线的绘制很简单:设ROC曲线上一点的坐标为(TPR,FPR) ,则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR) 到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC 曲线土的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,
如图所示:

在此模型的性能度量方法就介绍完了,以前一直以为均方误差和精准度就可以了,现在才发现天空如此广阔~

2.4比较检验
在上两篇中,我们介绍了多种常见的评估方法和性能度量标准,这样我们就可以根据数据集以及模型任务的特征,选择出最合适的评估和性能度量方法来计算出学习器的“测试误差“。但由于“测试误差”受到很多因素的影响,例如:算法随机性(例如常见的K-Means)或测试集本身的选择,使得同一模型每次得到的结果不尽相同,同时测试误差是作为泛化误差的近似,并不能代表学习器真实的泛化性能,那如何对单个或多个学习器在不同或相同测试集上的性能度量结果做比较呢?这就是比较检验。最后偏差与方差是解释学习器泛化性能的一种重要工具。本篇延续上一篇的内容,主要讨论了比较检验、方差与偏差。

在比较学习器泛化性能的过程中,统计假设检验(hypothesis test)为学习器性能比较提供了重要依据,即若A在某测试集上的性能优于B,那A学习器比B好的把握有多大。 为方便论述,本篇中都是以“错误率”作为性能度量的标准。

“假设”指的是对样本总体的分布或已知分布中某个参数值的一种猜想,例如:假设总体服从泊松分布,或假设正态总体的期望u=u0。回到本篇中,我们可以通过测试获得测试错误率,但直观上测试错误率和泛化错误率相差不会太远,因此可以通过测试错误率来推测泛化错误率的分布,这就是一种假设检验。
2.4.1 假设检验

在实际问题中,我们无法获知泛化错误率,但是可以知道,测试错误率与泛化错误率相差较小,故在这里可以用测试错误率εt来推导泛化错误率ε。

泛化错误率为ε的学习器在一个样本上犯错的概率是ε;测试错误率εt意味着在m个样本中恰有εtm个样本被误分类,可以估算出泛化错误率为ε的学习器恰将εtm个样本误分类的概率如下式所示:

这也表达了在包含m个样本的测试集上,泛化错误率为ε的学习器被测得测试错误率为εt的概率。
上式对ε求偏导可知,该概率在ε = εt时取得最大值,符合二项分布。如图所示,若ε=0.3,则10个样本中测得3个被误分类的概率最大:

此处α为显著度,1-α为置信度。
更一般的,考虑假设ε<=ε0,则在1-α的概率内所能观测到的最大错误率如下式计算:
直观的来看,对应于图中非阴影部分的范围。
此时若εt小于临界值,则可得出结论:能以1-α的置信度认为,学习器的泛化错误率不大于ε0,反之亦然。
在很多时候我们并非仅做一次留出法估计,而是多次估计,这样会得到多个测试错误率ε1…εk,则平均错误率μ和方差σ2为:

考虑到这k个测试错误率都可看作错误率ε0的独立采用,则变量:

服从自由度为k-1的t分布,如图:

2.4.3 McNemar检验
MaNemar主要用于二分类问题,与成对t检验一样也是用于比较两个学习器的性能大小。主要思想是:若两学习器的性能相同,则A预测正确B预测错误数应等于B预测错误A预测正确数,即e01=e10,且|e01-e10|服从N(1,e01+e10)分布。

因此,如下所示的变量服从自由度为1的卡方分布,即服从标准正态分布N(0,1)的随机变量的平方和,下式只有一个变量,故自由度为1,检验的方法同上:做出假设–>求出满足显著度的临界点–>给出拒绝域–>验证假设。

2.4.4 Friedman检验与Nemenyi后续检验
在很多时候,我们会在一组数据集上对多个算法进行比较。当有多个算法参与比较时,一种做法是在每个数据集上分别列出两两比较的结果,而在两两比较时可使用前述方法;另一种方法更为直接,即使用基于算法排序的Friedman 检验。
而如果Friedman检验所得算法性能都相同,那么急需要后续检验,常用的有Nemenyi后续检验

2.5 偏差与方差
偏差-方差分解是解释学习器泛化性能的重要工具。在学习算法中,
偏差指的是预测的期望值与真实值的偏差,

方差则是每一次预测值与预测值得期望之间的差均方。实际上,偏差体现了学习器预测的准确度,而方差体现了学习器预测的稳定性。通过对泛化误差的进行分解,可以得到:

期望泛化误差=方差+偏差
偏差刻画学习器的拟合能力
方差体现学习器的稳定性

学习算法的期望预测为:

使用样本数不同的训练集产生的方差为

噪声为:

期望输出与真实标记的差别称为偏差(bias),即:

经过推导可知:

易知:方差和偏差具有矛盾性,这就是常说的偏差-方差窘境(bias-variance dilamma),随着训练程度的提升,期望预测值与真实值之间的差异越来越小,即偏差越来越小,但是另一方面,随着训练程度加大,学习算法对数据集的波动越来越敏感,方差值越来越大。换句话说:在欠拟合时,偏差主导泛化误差,而训练到一定程度后,偏差越来越小,方差主导了泛化误差。因此训练也不要贪杯,适度辄止。

第3章 线性模型
3.1 基本形式
给定由d个属性描述的示例x = (x1;x2;…;xd),其中xi是x的第i个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即:

一般用向量写成:

线性模型形式简单且易于建模,而且有很好的可解释性(comprehensibility)。
本章主要介绍几种经典的线性模型。我们先从回归任务开始,然后讨论三分类和多分类任务。
3.2 线性回归
线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值,例如:通过历年的人口数据预测2017年人口数量。在这类问题中,往往我们会先得到一系列的有标记数据,例如:2000–>13亿…2016–>15亿,这时输入的属性只有一个,即年份;也有输入多属性的情形,假设我们预测一个人的收入,这时输入的属性值就不止一个了,例如:(学历,年龄,性别,颜值,身高,体重)–>15k。
有时这些输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理,对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;

对于离散值的属性,可作下面的处理:
1—若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1, 0.5, 0}。
2若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{(1,0),(0,1)}。

(1)当输入属性只有一个的时候,就是最简单的情形,也就是我们高中时最熟悉的“最小二乘法”(Euclidean distance),
首先计算出每个样本预测值与真实值之间的误差并求和,通过最小化均方误差MSE,使用求偏导等于零的方法计算出拟合直线y=wx+b的两个参数w和b,计算过程如下图所示:

详细见下:
给定数据集D = {(x1,y1),(x2,y2),…,(xm,ym)},其中xi = (xi1;xi1;…;xid),线性回归试图学得一个线性模型以尽可能准确地预测实值输出标记。即线性回归试图学得

可见关键在于确定w和b,也就是衡量f(x)与y之间的差别。而之前介绍过,均方误差是回归任务中最常用的性能度量,因此我们可试图让均方误差最小化,即:

我们可将上式(记为E(w,b))分别对w和b求导,得到:

即可得到w和b的最优解的闭式(closed-form)解。
实质上就是经过样本的均值点

(2)当输入属性有多个的时候,例如对于一个样本有d个属性{(x1,x2…xd),y},则y=wx+b需要写成:

通常对于多元问题,常常使用矩阵的形式来表示数据。

在本问题中,将具有m个样本的数据集表示成矩阵X,将系数w与b合并成一个列向量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:

同样地,我们使用最小二乘法对w和b进行估计,令均方误差的求导等于0,
需要注意的是,当一个矩阵的行列式不等于0时,我们才可能对其求逆,因此对于下式,我们需要考虑矩阵(XT *X)的行列式是否为0,若不为0,则可以求出其解,若为0,则需要使用其它的方法进行计算
然而现实中XTX往往不是满秩矩阵 许多任务中会遇到变量的数目超过样例数的情况,导致X的列数多于行数,显然不满秩,此时会解出多个w^满足均方误差最小的条件,选择哪一个作为输出就是问题,常见的做法是引入正则化项。

另一方面,有时像上面这种原始的线性回归可能并不能满足需求,
例如:y值并不是线性变化,而是在指数尺度上变化。
这时我们可以采用线性模型来逼近y的衍生物,例如lny,这时衍生的线性模型如下所示,实际上就是相当于将指数曲线投影在一条直线上,如下图所示:

这就是对数线性回归(log-linear regression),在形式上虽然仍然是线性回归,但实质是在求取输入空间到输出空间的非线性函数映射。对数线性回归是让y=lny

更一般地,考虑所有y的衍生物的情形,就得到了“广义的线性模型”(generalized linear model),其中,g(*)称为联系函数(link function)。

3.3 线性几率回归
回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而进行分类呢?线性几率回归正是研究这样的问题。
对数几率引入了一个对数几率函数(logistic function),将预测值投影到0-1之间,从而将线性回归问题转化为二分类问题。(即sigmoid)

若将y看做样本为正例的概率,(1-y)看做样本为反例的概率,
则上式实际上使用线性回归模型的预测结果去逼近真实标记的对数几率。
因此这个模型称为“对数几率回归”(logistic regression),也有一些书籍称之为“逻辑回归”。

下面使用最大似然估计的方法来计算出w和b两个参数的取值,下面只列出求解的思路,不列出具体的计算过程。(具体可见推荐系统算法学习笔记的LR)

3.4 线性判别分析
线性判别分析(Linear Discriminant Analysis,简称LDA),
其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近,不同类的样例尽可能远。在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
如图所示:

两类样本的投影分别为wTμ0和wTμ1;,则两类样本的协方差分别为wT∑0w和wT∑1w。
想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小,不同类之间中心的距离尽可能大。于是我们得到了一个欲最大化的目标:
即 分子为投影,愈大 分母为协方差 愈小
基于这样的考虑,LDA定义了两个散度矩阵。

类内散度矩阵(within-class scatter matrix)

类间散度矩阵(between-class scaltter matrix)

因此得到了LDA的最大化目标:“广义瑞利商”(generalized Rayleigh quotient)
上面J重写为

从而分类问题转化为最优化求解w的问题,当求解出w后,对新的样本进行分类时,只需将该样本点投影到这条直线上,根据与各个类别的中心值进行比较,从而判定出新样本与哪个类别距离最近。求解w的方法如下所示,使用的方法为λ乘子(拉格朗日乘子法)。

由于上式分子与分母都是关于w的二次项,故其的解与w的长度无关,只与其方向有关,不防令wTSww = 1,则上式等价于:

由拉格朗日乘子法,得到:
λ是拉格朗日乘子,书中未给详细推导过程,只在附录添加了拉格朗日乘子的一些定义和公式,我也没用动手去推导,因为我也不会推导。。。
由于Sbw的方向恒为μ0-μ1,故不妨令
代入式中可以得到:
主成分分析(PCA)原理详解 - 知乎 (zhihu.com)
若将w看做一个投影矩阵,类似PCA的思想,则LDA可将样本投影到N-1维空间(N为类簇数),投影的过程使用了类别信息(标记信息),因此LDA也常被视为一种经典的监督降维技术。
3.5 多分类学习
现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。
最为经典的拆分策略有三种:“一对一”(OvO)、“一对其余”(OvR)和“多对多”(MvM),核心思想与示意图如下所示。
OvO:给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),从而产生N(N-1)/2个二分类学习器,在测试阶段,将新样本放入所有的二分类学习器中测试,得出N(N-1)个结果,最终通过投票产生最终的分类结果。
OvR:给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类,剩余的所有类别作为一个新的反类,从而产生N个二分类学习器,在测试阶段,得出N个结果,若仅有一个学习器预测为正类,则对应的类标作为最终分类结果。
MvM:给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类,若干个类作为反类(通过ECOC码给出,编码),若进行了M次划分,则生成了M个二分类学习器,在测试阶段(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的类别作为最终分类结果。

3.6 类别不平衡问题
类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时候我们就需要进行相应的处理来平衡这个问题。常见的做法有三种:
在训练样本较多的类别中进行“欠采样”(undersampling),比如从正例中采出100个,常见的算法有:EasyEnsemble。
在训练样本较少的类别中进行“过采样”(oversampling),例如通过对反例中的数据进行插值,来产生额外的反例,常见的算法有SMOTE。
直接基于原数据集进行学习,对预测值进行“再缩放”处理。其中再缩放也是代价敏感学习的基础。

4、决策树
上篇主要介绍和讨论了线性模型。首先从最简单的最小二乘法开始,讨论输入属性有一个和多个的情形,接着通过广义线性模型延伸开来,将预测连续值的回归问题转化为分类问题,从而引入了对数几率回归,最后线性判别分析LDA将样本点进行投影,多分类问题实质上通过划分的方法转化为多个二分类问题进行求解。本篇将讨论另一种被广泛使用的分类算法–决策树(Decision Tree)。
4.1 决策树基本概念
顾名思义,决策树是基于树结构来进行决策的,在网上看到一个例子十分有趣,放在这里正好合适。现想象一位捉急的母亲想要给自己的女娃介绍一个男朋友,于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这个女孩的挑剔过程就是一个典型的决策树,即相当于通过年龄、长相、收入和是否公务员将男童鞋分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么使用下图就能很好地表示女孩的决策逻辑(即一颗决策树)。

在上图的决策树中,决策过程的每一次判定都是对某一属性的“测试”,决策最终结论则对应最终的判定结果。一般一颗决策树包含:一个根节点、若干个内部节点和若干个叶子节点,易知:

  • 每个非叶节点表示一个特征属性测试。
  • 每个分支代表这个特征属性在某个值域上的输出。
  • 每个叶子节点存放一个类别。
  • 每个节点包含的样本集合通过属性测试被划分到子节点中,根节点包含样本全集。
    4.2 决策树的构造
    决策树的构造是一个递归的过程,有三种情形会导致递归返回:
    (1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;
    (2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;
    (3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。算法的基本流程如下图所示:

在这里,我简单说一下我对于上方三种情形的理解:
首先,决策树的主要目的是分类,也就是说只要剩下的是一类,就可以返回,那么自然,如果剩下的不是一类,那自然进行递归。
第一种情况,如果D中剩下的所有训练样本都是一个类,那自然不用继续递归,直接返回,对应算法的2-4行。
第二种情况,属性集A为空是什么意思呢?首先要明白,决策树的划分过程是依据属性值的不同划分的,那么属性值如果为空就是说所有的属性值都已经划分过了,已经到整个树的最深了,到了叶子结点了,那么剩下的训练样本自然可以视为一类,直接返回。或者说属性值还没有划分结果,但是剩下的所有样本的所有属性值都对应相等,那么在属性空间上就可以认为剩下的所有样本都是一个点,那自然可以都划分为一类,直接返回。此处对应算法的5-7行。
第三种情况,什么时候递归呢?自然是属性值上两种情况都不满足时递归,也就是说A剩下的属性不为空,并且D中剩下的所有样本对应A剩下的属性的具体值也不一样,在属性空间上不是一个点,那么自然不能认为D中剩下的所有样本是一个类,此时便需要继续递归。依照A剩下的属性来递归产生分支结点,直到出现前两种情况,才可以返回。此处对应算法的8-15行。

决策树的关键在于上方算法的第8行,即如何选择最优划分属性。
可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。
属性划分的目标是让各个划分出来的子节点尽可能地“纯”,即属于同一类别。
因此下面便是介绍量化纯度的具体方法,决策树最常用的算法有三种:ID3,C4.5和CART。

4.2.1 ID3算法
ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标,

假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

计算时约定,p=0时,plog2p = 0。由极限可知,信息熵的最小值为0,最大值为log2|γ|。

假设离散属性a有V个可能的取值,若使用a对样本集D来划分,就会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为av的样本,记为Dv。
可以根据上式计算出Dv的信息熵,有可能不同的分支结点包含的样本数不同,所以赋予权重
v表示其中第v个分支节点,易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。
故可以计算出划分后相比原始数据集D获得的“信息增益”(information gain)。

信息增益越大,表示使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

4.2.2 C4.5算法
ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。

因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率,增益率定义为:

IV(a)称为属性a的“固有值”。a的V越大, IV(a)通常会越大。

4.2.3 CART算法(关键!GBDT里就是用它)
CART决策树(classification and regression tree)使用“基尼指数”(Gini index)来选择划分属性。
基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好,基尼指数定义如下:

进而,使用属性α划分后的基尼指数为:

4.3 剪枝(pruning)处理
从决策树的构造流程中我们可以直观地看出:不管怎么样的训练集,决策树总是能很好地将各个类别分离开来,这时就会遇到之前提到过的问题:过拟合(overfitting),即太依赖于训练样本。剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

  • 预剪枝(prepruning):在构造的过程中先评估,再考虑是否分支。
  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。
    评估指的是性能度量,即决策树的泛化性能。之前提到:可以使用测试集作为学习器泛化性能的近似,因此可以将数据集划分为训练集和测试集。

以西瓜好坏为例:
在这里插入图片描述

预剪枝表示在构造数的过程中,对一个节点考虑是否分支时,首先计算决策树不分支时在测试集上的性能,再计算分支之后的性能,若分支对性能没有提升,则选择不分支(即剪枝)。

后剪枝则表示在构造好一颗完整的决策树后,从最下面的节点开始,考虑该节点分支对模型的性能是否有提升,若无则剪枝,即将该节点标记为叶子节点,类别标记为其包含样本最多的类别。

上图分别表示不剪枝处理的决策树、预剪枝决策树和后剪枝决策树。

预剪枝处理使得决策树的很多分支被剪掉,因此大大降低了训练时间开销,同时降低了过拟合的风险,但另一方面由于剪枝同时剪掉了当前节点后续子节点的分支,因此预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。

而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并计算性能,训练时间开销相比预剪枝大大提升。
4.4 连续值与缺失值处理
对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法,基本思想为:给定样本集D与连续属性α,二分法试图找到一个划分点t将样本集D在属性α上分为≤t与>t。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值