《机器学习》Chapter 3 线性模型

3.1 基本形式

有序多元逻辑斯特回归_数据

其中w=(w1;w2;……wd).w和b学得之后,模型得以确定;

先从回归任务开始,然后讨论二分类和多分类任务。

3.2 线性回归

线性回归的基本思想是采用对输入样例各个特征进行线性加权的方式得到预测的输出,并将预测的输出和真实值的均方误差最小化。

  1. 如果输入样例只有一个特征,那这个过程就是用一条直线去拟合平面直角坐标系上的点;
  2. 如果有两个特征,表现在平面直角坐标系上就是用一条直线将用不同标记(如xx和oo)区分的输入样例分割开来;
  3. 如果有两个以上的特征,那就会映射到高维空间,用超平面分割。

对于离散属性若属性值间存在“序”关系,则可以通过连续化将其转换成连续值;若不存在“序”关系,则有k个属性值,就转换为k维向量。比如,如果属性是有序的话,如“大 中 小”,可按序量化为(1,0.5,0);若属性无序,如瓜的种类有西瓜、黄瓜、冬瓜,就可以用三维向量表示(1,0,0),(0,1,0),(0,0,1)。如果对于无序的属性按有序属性的方式量化,则会不恰当的引入序关系,后面如果有涉及距离的计算,有可能会造成误导。这里实际上对应的是编程实现时的数据预处理部分。

线性回归试图学得
有序多元逻辑斯特回归_机器学习_02
如何确定w和b?关键在于如何衡量f(x)与y之间的差别,均方误差是回归任务中的常用的性能度量。

均方误差即函数值与平均数的方差,它是回归任务最常用的度量,它采用的是欧几里得(欧式)距离。基于均方误差来进行模型求解的方法,成为“最小二乘法”。在线性回归中,“最小二乘法”就是找到一条直线,使所有样本到该直线的欧式距离之和最小


针对一元线性回归(一个属性——一个标记):

求解线性方程
有序多元逻辑斯特回归_有序多元逻辑斯特回归_03
中的w和b的过程,称为最小二乘“参数估计”。分别对w和b求偏导,当两个偏导数均为0时(极值点处),得到的w和b为最优解


针对多元线性回归(多个属性——一个标记):
有序多元逻辑斯特回归_数据_04

类似的,可利用最小二乘法对w和b进行估计,为了便于讨论,我们把w和b吸收入向量(w;b),相应的,把数据集D表示为一个m*(d+1)大小的矩阵X,其中每一行对应于一个实例,该行的前d个元素对应于实例的d个属性值,最后一个元素恒置为1

  1. 当数据集构成的矩阵满秩时,有唯一的w使均方误差最小;

可逆矩阵又称为满秩矩阵,不可逆矩阵又称为奇异矩阵或降秩矩阵。列数大于行数的矩阵,绝不可能是满秩矩阵。

  1. 其中,
  2. 当数据集中样本属性大于样本个数,即数据集列数大于行数时,矩阵不可能满秩,有多个解使得均方误差最小。
    w多解时,该选择哪一个解作为输出,将由学习算法的归纳偏好决定,常见做法是引入正则化项

考虑单调可微函数g(.),令

有序多元逻辑斯特回归_二分类_05

,使得线性模型推广为广义线型模型对数线性回归即是广义线性模型在g(.)=ln(.)时的特例,这里的对数函数起到了将线性模型回归的预测值与真实标记联系起来的作用。

3.3 对数几率回归

针对分类任务如何使用线性模型进行回归学习?可以使用广义线性模型:只需找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。

考虑二分类的任务,其输出标记y属于{0,1},而线性回归模型产生的预测值是实值,于是,我们需要将实值转换为0/1值,最理想的是“单位阶跃函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwlEnZLY-1619916062433)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20210501100409989.png)]

然而,"单位阶跃函数"不连续,因此我们需要找一个替代的函数——对数几率函数(逻辑回归模型)。

对数几率回归(逻辑回归)模型
有序多元逻辑斯特回归_有序多元逻辑斯特回归_06
其中,y为样本x作为正例的可能性,1-y为样本x作为反例的可能性,则y/(1-y)成为“几率”,反映的是x作为正例的相对可能性,对几率取对数则得到“对数几率”。总结起来,就是:用线性回归模型的预测结果去逼近真实标记的对数几率。

3.4 线性判别分析(LDA)

线性判别分析是一种经典的线性学习方法,在二分类问题上提出,LDA的思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例投影点尽可能接近、异类样例投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。


有序多元逻辑斯特回归_机器学习_07

LDA的原理和详细推导过程参见,讲解的非常非常详细!!


LDA算法的主要缺点有:

1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

4)LDA可能过度拟合数据。

3.5 多分类学习

现实中常遇到多分类学习任务,有些二分类学习方法可直接推广到多分类,但在更多情况下,我们是基于一些基本策略,利用二分类学习器来解决多分类问题。

假设有N个类别C1,C2,…,CN,多分类学习的基本思路是“拆解法”,即将多分类任务拆分为若干个二分类任务求解。具体来说,先对问题进行拆分,然后为拆出

的每个二分类任务训练一个分类器。在测试的时候,对这些分类器的预测结果进行集成以获得最终的多分类结果。因此,如何对多分类任务进行拆分是关键。这里

主演介绍三种经典的拆分策略:一对一(One vs One,简称OvO)一对多(One vs Rest,简称OvR)多对多(Mnay vs Many,简称MvM)

给定数据集D={(x1,y1),(x2,y2),…,(xm,ym)},yi属于{C1,C2,…,CN}

1、OvO策略

OvO将N个类别两两配对,从而产生N(N-1)/2个二分类任务,例如OvO将为区分类别Ci,Cj训练一个分类器,该分类器把D中的Ci类样例作为正例,Cj类样例作为反

例。在测试阶段,新样本将同时提交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果可以通过投票产生。示例图如图1所示。

2、OvR策略

OvR则是每次将一个类的样例作为正例,所有其他类的样例作为反例来训练N个分类器,在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结

果,示例图如图1所示。


有序多元逻辑斯特回归_数据_08

图1,OvO和OvR示意图

3、MvM策略

MvM则是每次将若干个类作为正类,若干个其它类作为反类。显然OvO和OvR是她的特例。显然MvM的正、反类构造必须有特殊的设计,不能随意选取。这里介绍一种

最常用的MvM技术:纠错输出码(ECOC)

ECOC是将编码的思想引入类别拆分,并尽可能在解码的过程中具有容错性。ECOC工作过程主要分为两步:

(1)编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集,这样一共产生M个训练集,可训练出M个训练器。

(2)解码:M个分类器分别对测试样本进行预测,这些预测标记组成一个编码。将这个与此编码与每个类别各自的编码进行比较,返回其中距离最小的类别最为最终预测结果。

3.6 类别不平衡问题

通常的分类学习方法中都有一个共同的假设,即不同类别的训练样例数目相同。如果不同类别的训练样例数目稍有差别,通常对分类影响不大,但是若差别很大,则会对学习造成影响,测试结果非常差。例如二分类问题中有998个反例,正例有2个,那么学习方法只需返回一个永远将新样本预测为反例的分类器,就能达到99.8%的精度;然而这样的分类器没有价值,我们必须要解决这个问题。
类别不平衡(class-imbalance)是指分类任务中不同类别的训练样例数目差别很大的情况。

解决方法
1、扩大数据集
  当遇到类别不均衡问题时,首先应该想到,是否可能再增加数据(一定要有小类样本数据),更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据对整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息。即使再增加小类样本数据时,又增加了大类样本数据,也可以使用放弃一部分大类数据(即对大类数据进行欠采样)来解决。

2、欠采样
  欠采样(under-sampling):对大类的数据样本进行采样来减少该类数据样本的个数,使其与其他类数目接近,然后再进行学习。欠采样若随机丢弃大类样本,可能会丢失一些重要信息。
欠采样的代表算法是EasyEnsemble:利用集成学习机制,将大类划分为若干个集合供不同的学习器使用。这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息。

3、过采样
  过采样(over-sampling ):对小类的数据样本进行采样来增加小类的数据样本个数。
  过采样的代表算法是SMOTE(原始论文)和ADASYN原始论文
SMOTE:通过对训练集中的小类数据进行插值来产生额外的小类样本数据。产生新的少数类样本,产生的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
ADASYN:基本思想是根据学习难度的不同,对不同的少数类别的样本使用加权分布,比较容易学习的少数类样本,对于难以学习的少数类的样本,产生更多的综合数据。 因此,ADASYN方法通过两种方式改善了对数据分布的学习:(1)减少类不平衡引入的偏差,(2)将分类决策边界自适应地转移到困难的样本。
SMOTE算法的多个不同语言的实现版本:

  1. python:imbalanced-learn
  2. Weka:Class SMOTE
    总结:采样算法容易实现,运行速度快,且效果也不错。
    在欠采样、过采样中的小经验:
  3. 考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本;
  4. 考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本;
  5. 考虑尝试随机采样与非随机采样两种采样方法;
  6. 考虑对各类别尝试不同的采样比例,不一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远;
  7. 考虑同时使用过采样与欠采样,对二者进行结合;
    值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自举生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将我们的模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。

4、使用新评价指标
在一开始的例子中可以看出,准确度这个评价指标在类别不均衡的分类任务中并不适用,甚至进行误导。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。

  1. 混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。由此计算精确率(precision)、召回率(recall)、F1值(F1 value)。
  2. ROC曲线(ROC Curves)
  3. AUC
  4. Kappa (Cohen kappa)

5、尝试不同的分类算法
因为不同的算法适用于不同的任务与数据,应该使用不同的算法进行比较。决策树往往在类别不均衡数据上表现不错。它使用基于类变量的划分规则去创建分类树,因此可以强制地将不同类别的样本分开。目前流行的决策树算法有:C4.5、C5.0、CART和Random Forest等。

6、对模型进行惩罚
  你可以使用相同的分类算法,但是使用一个不同的角度,比如你的分类任务是识别那些小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集,译者注),从而使得分类器将重点集中在小类样本身上。一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。
  如果你锁定一个具体的算法时,并且无法通过使用重采样来解决不均衡性问题而得到较差的分类结果。这样你便可以使用惩罚模型来解决不平衡性问题。但是,设置惩罚矩阵是一个复杂的事,因此你需要根据你的任务尝试不同的惩罚矩阵,并选取一个较好的惩罚矩阵。

7、从一个新的角度理解问题
我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点(outliers),因此该问题便转化为异常点检测(anomaly detection)与变化趋势检测问题(change detection)。
  异常点检测即是对那些罕见事件进行识别。如:银行信用卡诈骗识别,几十万中样本中可能有几百个诈骗用户。这些事件相对于正常情况是很少见的。
  变化趋势检测类似于异常点检测,不同在于其通过检测不寻常的变化趋势来识别。如通过观察用户模式或银行交易来检测用户行为的不寻常改变。
  将小类样本作为异常点这种思维的转变,可以帮助考虑新的方法去分离或分类样本。这两种方法从不同的角度去思考,让你尝试新的方法去解决问题。