(配图均来自网络)
1、章节主要内容
线性模型形式简单、易于建模,许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得(神经网络就是一个例子,大伙在后边学习神经网络时会发现其实神经网络的每个神经元就是一个广义的线性模型)
本章内容对几种经典的线性模型进行了介绍,并讨论其在二分类和多分类任务上的应用以及需考虑的问题。
1)线性模型的背后逻辑以及变型思路
线性模型的本质是通过训练数据学习出一个通过样本数据的属性的线性组合来进行预测的函数,其基本格式可表现如下:
f(x) = w1x1 + w2x2 + ... + wnxn + b (公式1)
其中xi是样本的第i个属性的属性值,wi是线性模型对第i个属性的权重,b是模型的线性偏移量。因为w直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性。
[1]线性模型最基础的算法:线性回归
线性回归就是使用训练样本(x,y)去训练上边的(公式1),使得生成的函数f(x)能尽量贴近样本标签y。
因为是函数训练,所以我们在训练之前需要将离散值属性转换为连续值属性。并且该属性的属性值之间是否存在“序”关系,会有不同的转换方式。如果是有序属性,我们会根据属性序数高低给予一个数字序列,比如身高,具有“高、中等、矮”三个有序属性值,那么我们就能将其转换为{1,0.5,0};如果属性值之间没有序列,我们要将这k个属性值转为k维向量,比如天气,“下雨、晴天、多云”三个属性值之间并没有序列关系,那么就应该将其转换为3维向量,(1,0,0),(0,1,0),(0,0,1)
(上边的属性转换过程虽然简单,但是要获得好的学习效果,不能不注重)
在对数据进行转换之后,为了能生成线性回归模型,我们需要计算出正确的w和b。回顾我们线性回归的函数目的,我们发现线性回归是为了能使得生成的回归函数能更贴近样本标签,也就是说当训练出来的模型f(x)和真正的值y之间的误差最小时,该线性回归模型就是我们要的。
这就转换为了求最小值的问题了,线性回归函数是使用均方误差和最小二乘法来进行计算的。其背后的逻辑是通过计算训练样本在向量空间上距离模型线的欧式距离之和的最小值来确定参数w和b。而这个最小值可以通过对距离之和求导获得,当导数为0时,说明原函数达到了一个极值(因为是凸函数,所以该极值是最小值)。
[2]线性回归函数的变型
线性回归函数可以简写为:y = wx + b,这是用模型的预测值去逼近真实标记y。那么我们能不能令预测值去逼近y的衍生物呢?基于这样的考虑,我们就得到了线性回归的各种变型函数。
比如,假设我们认为示例所对应的输出标记是在指数尺度上变化的,那么就可将输出标记的对数作为线性模型逼近的目标,即可得到“对数线性回归”(log-linear regression):
ln(y) = wx + b
更一般地,考虑单调可微函数g,令:
g(y) = wx + b
这样得到的模型称为“广义线性模型”(generalized linear model),其中函数g称为“联系函数”(link function)。不同的联系函数会构成不同的线性回归模型。
其中,当 g(y) = ln( y / (1-y) ) 时,我们得到了“对数几率回归”(logit regression),也称“逻辑回归函数”。通过联系函数,我们可以看出该模型实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率。
2)线性模型在多分类场景下的应用
在现实中常遇到多分类学习任务,我们在多数情况下,将基于一些基本策略,利用二分类学习器来解决多分类问题。
多分类学习的基本思路是“拆解法”,即将多分类任务拆为若干个二分类任务求解。
最经典的拆分策略有以下三种:
[1]“一对一”(One vs One,简称OvO)
将N个类别两两配对,对每一种组合训练一个分类器,从而产生N(N-1)/2个二分类任务。当输入新样本时,用N(N-1)/2个学习器分别进行分类,并对分类结果进行计数,被预测最多的类为最终分类结果。
[2]“一对其余”(One vs Rest,简称OvR)
每次将一个类作为正例,其余N-1个类作为反例来训练N个分类器。最终根据N个分类器的结果综合考虑之后(唯一被标为正例的那个分类器的结果为结果,如果有多个分类器都预测为正时,根据预测置信度来比较),选出最终分类结果。
我们看到OvO和OvR相比,前者要训练的分类器要多得多,因此存储和测试开销要相对多些。但是在训练时,因为前者每个分类器只使用部分数据,而后者要用全量数据,所以类别多时,OvO的训练开销要更小一些。
至于预测性能,则取决于数据分布,在多数情况下两者差不多。
[3]“多对多”(Many vs Many,简称MvM)
每次将若干个类别作为正类,若干个其它类作为反类。显然,OvO和OvR是MvM的特例。正反类的划分必须有特殊的设计,不能随意选取。一种最常用的MvM技术是:“纠错输出码”(Error Correcting Output Codes,简称ECOC)
ECOC会对每种不同的正反类划分训练一个学习器,并用这些学习器去对新样本进行预测,并根据预测结果以及所有学习器类别划分组成的编码矩阵来决定最终的预测结果。比如从图3.5(a),我们可以看到五个分类器划分的编码矩阵为:
-1, +1, -1, +1, +1
+1, -1, -1, +1, -1
-1, +1, +1, -1, +1
-1, -1, +1, +1, -1
新样本在这五个学习器中的训练结果为向量y:(-1, -1, +1, -1, +1)。用y与矩阵的每一行进行比较就可以得到针对每一个类别的海明距离和欧式距离。距离最小的类别就是最终的分类结果。以C1类为例,向量y与C1类的海明距离和欧式距离的值如下:
海明距离:每个分类器对样本的分类结果如果和C1类不一致,则计数加1,否则不加,结果为:0+1+1+1+0 = 3
欧式距离:每个分类器对样本的分类结果减去C1类的分类划分,差值的平方和的开方,结果为:根号下( 0+4+4+4+0) = 根号下12 = 2又根号3
3)类别不平衡时的调优方案
类别不平衡(class-imbalance),就是指分类任务中不同类别的训练样例数目差别很大的情况。目前类别不平衡性学习的一个基本策略是“再缩放”(rescaling),现有技术大体上有以下三种做法:
[1]欠采样(undersampling)
去除样例过多的类别中的一部分样例,使得正、反例数目接近。代表性算法EasyEnsemble,将反例划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息。
[2]过采样(oversampling)
对样例少的类别增加数据,使得正、反例数目接近。过采样法不能简单地对初始正例样本进行重复采样,否则会招致严重的过拟合。代表性算法SMOTE是通过对训练集里的正例进行插值来产生额外的正例。
[3]阈值移动(threshold-moving)
一般我们对二分类法的正负值的判定阈值是基于中间值0.5来判断的,这是基于分类器认为真实正、反例可能性相同的认知下的判断,即分类器决策规则为:
若 y / ( 1 - y ) > 1,则预测为正例 (公式2)
然而,当训练集中正、反例不同时,令m+表示正例数,m-表示反例数,则观察几率为:m+/m-,这时我们应该改变分类器决策规则为:
若 y / ( 1 - y ) > m+/m-,则预测为正例 (公式3)
将(公式3)代入(公式2)中,我们可以得到新的决策规则:
若 y' / (1 - y') = [y / (1 - y)] * [m-/m+] > 1,则预测为正例
这种在用训练好的分类器进行预测时,将决策规则根据数据分布来进行移动的方法就是阈值移动。
2、基本知识
1)最小二乘法(略)
2)极大似然法(略)
3、总结
[1]线性模型是一个形式简单、易于建模的机器学习模型,因为w直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性
[2]线性回归背后的逻辑是用模型的预测值去逼近真实标记y,并通过计算训练样本在向量空间上距离模型线的欧式距离之和的最小值来确定参数w和b
[3]线性回归可写成广义线性模型形式:g(y) = wx + b,通过选择不同的联系函数g(.)会构成不同的线性回归模型
[4]在遇到多分类学习任务时,基本的解决思路是“拆解法”,即将多分类任务拆为若干个二分类任务求解
[5]当不同类别的样例数不同时,会造成类别不平衡问题,解决该问题的基本策略是对数据进行“再缩放”