当前位置: 首页 > news >正文

机器学习(西瓜书) 第三章 线性模型

作者前言:本章内容是作者阅读《机器学习》(周志华)(网友戏称“西瓜书”,因为本书作者从第一章开始便通过如何辨别好的西瓜的例子来剖析机器学习的实质。)及相关资料写的。笔者在写此博客前,也看到了网上发布了大量相关此书的读书笔记,但翻来看去发现存在公式放的较多、大量拍摄书上的内容照片直接贴图等情况,不太适合新手阅读。故,作者写下此篇博客。笔者尽可能简化公式或者不放公式,读者在阅读过程中不要过于纠结看懂里面的数学公式,只需搞懂里面各种的作用,内在大致的缘由即可。

PS:本章是书上的第三章,从这里开始就正式开始进入模型的讲解了。全书共有11种模型的讲解,含有线性模型、决策树、神经网络、支持向量机(SVM)、贝叶斯分类器、集成学习、聚类、半监督学习、概率图模型、规则学习、强化学习。下一章将更新决策树!!!


目录

一、基本形式

二、线性回归

三、对数几率回归(分类任务的线性回归)

四、线性判别分析(LDA,Fisher判别)

五、多分类学习

六、类别不平衡问题


一、基本形式

        给定由d个属性描述的示例x=(x1;x2;...;xd),其中xi是x在第i个属性上的取值。线性模型是试图学得一个通过属性的线性组合来进行预测的函数,即:  

        线性模型形式简单、易于建模 ,但蕴含着机器学习中的一些重要基本思想。许多功能更为强大的非线性模型可在线性模型的基础上引入层级结构或高维映射而得到的。此外,w直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性。

       损失函数是一个贯穿整个机器学习的一个重要概念,大部分机器学习算法都有误差,我们需要通过显性的公式来描述这个误差,并将这个误差优化到最小值。假设现在真实的值为 y,预测的值为 h 。损失函数公式为:

       也就是所有误差和的平方。损失函数值越小,说明误差越小,这个损失函数也称最小二乘法。 (下面会从另一个角度讲解最小二乘法)


二、线性回归

       “线性回归”试图学得一个线性模型以尽可能准确地预测实值输出标记。(可以类比到中学的一次函数)。可以考虑一种最简单的情形:输入属性的数目只有一个。对于离散属性,若属性值间存在“序”关系,可通过连续化将其转化为连续值。例如:二值属性:“身高”中的“高”、“矮”可转为化{1.0,0.0};三值属性:”高度“中的”高“、”中“、”矮“可转化为{1.0、0.5、0.0};若属性值间不存在序关系,假定有k个属性值,则通常转为k维向量,例如属性"瓜类"的取值”西瓜“、”南瓜“、”黄瓜“可转化为(0,0,1)、(0,1,0)、(1,0,0)。

        线性回归试图学得:  

        现在要确定w和b,关键在于f(x)与y之间的差别。均方误差是回归任务中最常用的性能度量,因此需让它最小化。即:  

        均方误差有非常好的几何意义,对应了常用的“欧氏距离”。基于均方误差最小化来进行模型求解的方法为“最小二乘法”,求解w和b使均方误差最小化的过程就是”线性回归模型的最小二乘参数估计“。在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小,如下图所示:

        更一般的情形是如本节开头的数据集D,样本由d个属性描述,此时试图学得:  

        这称为“多元线性回归”。类似的,可利用最小二乘法来对w和b进行估计。在许多任务中,我们会遇到大量的变量,其数目甚至超过样例数,此时可解出多个w,它们都能使均方误差最小化。选择哪一个解作为输出,将由学习算法的归纳偏好决定,常见的做法是引入正则化项。

       线性模型虽然简单,却由丰富变化。假设示例所对应的输出标记是在指数尺度上变化,就可将输出标记的对数作为线性模型逼近的目标。即:

        这就是“对数线性回归”,它实际上是在试图让e^{^{^{w^{^{T}}x+b}}}逼近y。上式在形式上仍是线性回归,但实质上已是在求取输入空间到输出空间的非线性函数映射。如下图所示,这里的对数函数起到了将线性回归模型的预测值与真实标记联系起来的作用。(在实际应用中,一般是对y值过于庞大的时候进行取对数来缩小y值的范围。)

        更一般地,考虑单调可微函数g(·)(连续且充分光滑),令 

        这样得到的模型称为“广义线性模型”,其中函数g(·)称为“联系函数”。显然,对数线性回归是广义线性模型在g(·)=ln(·)时的特例。  


三、对数几率回归(分类任务的线性回归)

       要做分类任务的线性回归,就需要借助一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。考虑二分类任务,其输出标记y∈{0,1},而线性回归模型产生的预测值z=w^{^{T}}x+b是实值,于是,需要将实值z转换为0/1值。最理想的是“单位阶跃函数”:

        即若预测值z>0就判为正例,z<0就判为反例,预测值为临界值零则可任意判别。

        从图中可以看出,单位阶跃函数不连续,因此不能直接用广义线性回归中的g^{-}(\cdot )我们希望能找到一个在一定程度上近似单位阶跃函数的“替代函数”并希望它单调可微,而对数几率函数正是一个这样的函数。它将z值转化为一个接近0或1的y值,并且其输出值在z=0附近变化很陡。

该公式可变化为:

 若将y视为样本x作为正例的可能性,则1-y是其反例可能性,两者的比值:

称为"几率",反映了x作为正例的相对可能性,对几率取对数则得到“对数几率”:

       由此可以看出,对数几率函数实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率。因此,其对应模型称为“对数几率回归”。注意:虽然它的名字“回归”,但实际却是一种分类学习方法。这方法有很多优点,例如它是直接对分类可能性进行建模,无需事先假设数据分布,这样避免了假设分布不准确所带来的问题;它不是仅预测“类别”,而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用;此外,对率函数是任意阶可导的凸函数,有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解。对该模型的w和b采用“极大似然法”来估计。  


四、线性判别分析(LDA,Fisher判别)

        LDA的思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能原理;在对新鲜样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定信样本的类别。  

        欲使同类样例的投影点尽可能接近,可以让同类样例投影点的协方差尽可能小(可得到类内散度矩阵);而欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大(可得到类间散度矩阵)。同时考虑二者,则得到最大化的目标J=类间散度矩阵/类内散度矩阵,即“广义瑞利商”)。

        LDA可从贝叶斯决策理论的角度来阐释,并可证明,当两类数据同先验,满足高斯分布且协方差相等时,LDA可达到最优分类。

        可将LDA推广到多分类任务中,假设W为一个投影矩阵,则多分类LDA将样本投影到N-1维空间,N-1通常远小于数据原有的属性数。于是,可通过这个投影来减小样本点的维数,且投影过程中使用了类别信息。因此,LDA也常被视为一种经典的监督降维技术


五、多分类学习

        现实中经常碰到多分类学习任务,有些二分类学习方法可以直接推广到多分类;但更多情形下,是需要基于一些基本策略利用二分类学习器来解决多分类问题。  

        考虑N个类别C1,C2,...,CN,多分类学习的基本思路是“拆解法”,即将多分类任务拆为若干个二分类任务求解。先对问题进行拆分,然后为拆出的每个二分类任务训练一个分类器(分类学习器称为分类器);在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。关键就是如何对多分类任务进行拆分,以及如何对多个分类器进行集成。

        最经典的拆分策略有:一对一(OvO),一对其余(OvR),多对多(MvM) 

        给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)},yi∈{C1,C2,...,CN}。

        OvO将这N个类别两两配对,从而产生N(N-1)/2个二分类任务。为区分类别Ci和Cj训练一个分类器,该分类器把D中的Ci类样例作为正例,Cj类样例作为反例。在测试阶段,新样本将同时提交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果可通过投票产生(把预测得最多的类别作为最终分类结果)。

        OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果。如下图所示,若有多个分类器预测为正类,则通常考虑各分类器的预测置信度,选择置信度最大的类别标记作为分类结果。

        容易看出,OvR只需训练N个分类器,而OvO需训练N(N-1)/2个分类器。因此,OvO的存储开销和测试开销通常比OvR更大。但在训练时,OvR的每个分类器均使用全部训练样例而OvO的每个分类器仅用到两个类的样例。因此,类别很多时,OvO的训练时间开销通常比OvR更小。至于预测性能,则取决于具体的数据分布,在多数情形下两者差不多。 

        MvM是每次将若干个类作为正类,若干个其他类作为反类。显然,OvO和OvR是MvM的特例。MvM的正、反类构造必须有特殊的设计,不能随意选取。这里介绍一种最常用的MvM技术:纠错输出码(ECOC)

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

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

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

        类别划分通过“编码矩阵”指定,编码矩阵有多种形式,常见有:二元码和三元码。前者将每个类别分别指定为正类和反类,后者在正、反类之外,还可指定“停用类”。

        如图所示,左图中,分类器f2将C1类和C3类的样例作为正例,C2类和C4类的样例作为反例;右图,分类器f4将C1类和C4类的样例作为正例,C3类的样例作为反例。在解码阶段,各分类器的预测结果联合起来形成了测试示例的编码,该编码与各类所对应的编码进行比较,将距离最小的编码所对应的类别作为预测结果。左图中若基于欧氏距离,预测结果将是C3。

        为什么是“纠错输出码“呢?这是因为在测试阶段,ECOC编码对分类器的错误有一定的容忍和修正能力。上左图中对测试示例的正确预测编码是(-1,+1,+1-1,+1),假设在预测时某个分类器出错了,例如f2出错从而导致了错误编码(-1,-1,+1-1,+1),但基于这个编码仍能产生正确的最终分类结果C3。一般来说,对同一个学习任务,ECOC编码越长,纠错能力越强。然而,编码越长,意味着所需训练的分类器越多,计算、存储开销都会增大;另一方面,对有限类别数,可能的组合数目是有限的,码长超过一定范围后就失去了意义。

        对同等长度的编码,理论上说,任意两个类别之间的编码距离越远,则纠错能力越强。因此,在码长较小时可根据这个原则计算出理论最优编码。然而,码长稍大一些时,就难以有效地确定最优编码,事实上这是NP难问题(NP难问题属于计算复杂性理论中的一类特殊问题,其特征是不存在已知的多项式时间确定性算法能够精确求解。需要超多项式时间才能求解的问题)。不过,通常并不需要获得理论最优编码,因为非最优编码在实践中往往已能产生足够好的分类器。另一方面,并不是编码的理论性质好,分类性能越好,因为机器学习的问题涉及多个因素。(例如:多个类拆解为两个“类别子集”,不同拆解方式所形成的两个类别子集的区分难度往往不同,导致二分类问题的难度不同)于是,一个理论纠错性质很好、但导致二分类问题较难的编码,与另一个理论纠错性质差一些但导致二分类问题较简单的编码,最终产生的模型谁强谁弱很难说。


六、类别不平衡问题

       前面介绍的分类学习方法有一个共同的基本假设不同类别的训练样本例数相当(正、反例的数据要相当,不能偏差过大)。如果不同类别的训练样例数目稍有差别,通常影响不大,但若差别过大,则会对学习过程造成困扰。例如有998个反例,2个正例,那么学习方法只需返回一个永远将新样本预测为反例的学习器,就能达到99.8%的精度;这样的学习器是没有价值的,它无法预测出任何正例。

        类别不平衡问题是指分类任务中不同类别的训练样例数目差别很大的情况。不是一般性,这里假定正类样例较少,反类样例较多。现实中也会经常遇到此问题,例如:在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR、MvM策略后产生的二分类任务仍可能出现类别不平衡现象。故,下面讲解如何处理类别不平衡处理的基本方法

        再缩放(再平衡):前面的线性分类器用y=w^{T}x+b对新样本x进行分类时,是用预测出的y值与一个阈值进行比较。(例:通常y>0.5时判为正例,否则为反例。)y实际上表达了正例的可能性,几率y/(1-y)则反映了正例可能性与反例可能性之比值,阈值设置为0.5表明分类器认为真实正、反例可能性相同,即分类器策略规则为y/(1-y)>1,则预测为正例。 然而,当训练集中正、反例的数目不同时,令m+表示正例数目,m-表示反例数目,则观察几率是m+/m-,通过假设观测几率就代表了真实几率。于是只要分类器的预测几率高于观测几率就应判定为正例,即y/(1-y)>m+/m-,预测为正例(前面已经说了这里假定正例数目少,反例数目多,学习器通常会将样例预测为反例,为提高判断为正例的数目,所以这里一旦出现这种情况就预测为正例)。  

       再缩放的思想虽简单,但因为“训练集是真实样本总体的无偏差采样”的这个要求很难成立,导致不能有效地基于训练集观测几率来推断出真实几率。现有技术有三类做法:

  • 对训练集的反例欠采样(下采样):去除一些反例数目使得正、反例数目接近

  • 对训练集的正例过采样(上采样):增加一些正例数目使得正、反例数目接近

  • 阈值移动:直接基于原始训练集进行学习,但在用训练好的分类器进行预测时使用再缩放策略

        欠采样由于丢弃了很多反例,使得分类器训练集远小于初始训练集。过采样增加了很多正例,使得训练集大于初始训练集。

        需要注意的是过采样不能简单地对初始正例样本进行重复采样,否则会出现过拟合过采样代表性算法SMOTE:通过对训练集里的正例进行插值来产生额外的正例。

        欠采样若随机丢弃反例,可能丢失一些重要信息。欠采样的代表性算法EasyEnsemble:利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了欠采样而且从全局看不会丢失重要信息。  


PS:好的 ,如果你能看到这里,说明读者非常有毅力!恭喜你,你做什么事都会成功的。机器学习里面含有大量数学公式作为基础,对于数学不好的读者来说,理解起来难如登天。笔者希望可以尽可能简化这些公式来讲解机器学习!(我会持续更新下去,您的点赞+收藏是我更新的动力!) 

若心中有光,何惧黑夜漫长,且待黎明破晓。

http://www.dtcms.com/a/270001.html

相关文章:

  • Java 面向对象三大特性详解:封装、继承与多态,掌握OOP核心思想
  • OSPFv3和v2区别(续)
  • 数字人分身 + 矩阵系统聚合 + 碰一碰发视频:源码搭建 支持 OEM
  • 【网络协议安全】任务14:路由器DHCP_AAA_TELNET配置
  • UE实现路径回放、自动驾驶功能简记
  • 【Python篇】PyCharm 安装与基础配置指南
  • 移动机器人的认知进化:Deepoc大模型重构寻迹本质
  • c语言中的数组I
  • Foundry 依赖库管理实战
  • QML事件处理:鼠标、拖拽与键盘事件
  • HTML5 新特性详解:从语义化到多媒体的全面升级
  • CPP中的List
  • 我的第二份实习,学校附近,但是干前端!
  • 了解 RAC
  • FastAPI通用签名校验模块设计文档
  • 【python基础】python和pycharm的下载与安装
  • 在STM32 FreeRTOS环境中使用mutex和ringbuffer实现多任务的UART同步通信
  • JVM 整体架构详解:线程私有与线程共享内存区域划分
  • 【Android】【input子系统】【Android 焦点窗口问题分析思路】
  • 【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
  • 【Java安全】RMI基础
  • go go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南
  • WiFi协议学习笔记
  • 点云的无监督语义分割方法
  • 寻找两个正序数组的中位数(C++)
  • 成都算力租赁新趋势:H20 八卡服务器如何重塑 AI 产业格局?
  • 基于 Rust 的Actix Web 框架的应用与优化实例
  • C++ 选择排序、冒泡排序、插入排序
  • mac安装docker
  • APISEC安全平台