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

机器学习周志华学习笔记-第3章<线性模型>

机器学习周志华学习笔记-第3章<线性模型>

3线性模型

  • 意义:线性模型是机器学习中的基础模型,它通过属性的线性组合来进行预测。这种模型形式简单,易于理解和建模,并且具有良好的可解释性。
  • 原理:线性模型的基本形式是 ( f ( x ) = ( w T x + b ) (f(\boldsymbol x) = (\boldsymbol w^T \boldsymbol x + b) (f(x)=(wTx+b),其中 ( x ) (\boldsymbol x) (x) 是包含d维属性的向量, ( w (\boldsymbol w (w) 是权重向量, ( b (b (b) 是偏置项。模型的输出是输入特征的加权和加上偏置项。

本篇主要介绍和讨论了线性模型。首先从最简单的最小二乘法开始,讨论输入属性有一个和多个的情形,接着通过广义线性模型延伸开来,将预测连续值的回归问题转化为分类问题,从而引入了对数几率回归,最后线性判别分析LDA将样本点进行投影,多分类问题实质上通过划分的方法转化为多个二分类问题进行求解。

3.1 线性回归

线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值,例如:通过历年的人口数据预测2017年人口数量。在这类问题中,往往我们会先得到一系列的有标记数据,例如:2000–>13亿…2016–>15亿,这时输入的属性只有一个,即年份;也有输入多属性的情形,假设我们预测一个人的收入,这时输入的属性值就不止一个了,例如:(学历,年龄,性别,颜值,身高,体重)–>15k。

有时这些输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理,对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;对于离散值的属性,可作下面的处理:

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

(1)当输入属性只有一个的时候,就是最简单的情形,也就是我们高中时最熟悉的“最小二乘法”(Euclidean distance),首先计算出每个样本预测值与真实值之间的误差并求和,通过最小化均方误差MSE,使用求偏导等于零的方法计算出拟合直线y=wx+b的两个参数w和b,计算过程如下图所示:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)当输入属性有多个的时候,例如对于一个样本有d个属性{( x 1 , x 2 … x d x_1,x_2…x_d x1,x2xd), y y y},则 y = w x + b y=\boldsymbol wx+b y=wx+b需要写成:
在这里插入图片描述
通常对于多元问题,常常使用矩阵的形式来表示数据。在本问题中,将具有m个样本的数据集表示成矩阵X,将系数 w \boldsymbol w w与b合并成一个列向量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:
在这里插入图片描述
同样地,我们使用最小二乘法 w \boldsymbol w w和b进行估计,令均方误差的求导等于0,需要注意的是,当一个矩阵的行列式不等于0时,我们才可能对其求逆,因此对于下式,我们需要考虑矩阵(X的转置*X)的行列式是否为0,若不为0,则可以求出其解,若为0,则需要使用其它的方法进行计算,书中提到了引入正则化,此处不进行深入。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另一方面,有时像上面这种原始的线性回归可能并不能满足需求,例如:y值并不是线性变化,而是在指数尺度上变化。这时我们可以采用线性模型来逼近y的衍生物,例如lny,这时衍生的线性模型如下所示,实际上就是相当于将指数曲线投影在一条直线上,如下图所示:
在这里插入图片描述

3.2 线性几率回归

回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而进行分类呢?线性几率回归正是研究这样的问题。对数几率引入了一个对数几率函数(logistic function),将预测值投影到0-1之间,从而将线性回归问题转化为二分类问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
若将y看做样本为正例的概率,(1-y)看做样本为反例的概率,则上式实际上使用线性回归模型的预测结果器逼近真实标记的对数几率。因此这个模型称为“对数几率回归”(logistic regression),也有一些书籍称之为“逻辑回归”。下面使用最大似然估计的方法来计算出 w \boldsymbol w w和b两个参数的取值,下面只列出求解的思路,不列出具体的计算过程。
在这里插入图片描述
在这里插入图片描述

3.3 线性判别分析

线性判别分析(Linear Discriminant Analysis,简称LDA),其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能不同类的样例尽可能。如图所示:
在这里插入图片描述
在这里插入图片描述想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小不同类之间中心的距离尽可能大。基于这样的考虑,LDA定义了两个散度矩阵。
在这里插入图片描述
在这里插入图片描述
因此得到了LDA的最大化目标:“广义瑞利商”(generalized Rayleigh quotient)。
在这里插入图片描述
从而分类问题转化为最优化求解 w \boldsymbol w w的问题,当求解出 w \boldsymbol w w后,对新的样本进行分类时,只需将该样本点投影到这条直线上,根据与各个类别的中心值进行比较,从而判定出新样本与哪个类别距离最近。求解 w \boldsymbol w w的方法如下所示,使用的方法为λ乘子。
在这里插入图片描述在这里插入图片描述
若将 w \boldsymbol w w看做一个投影矩阵,类似PCA的思想,则LDA可将样本投影到N-1维空间(N为类簇数),投影的过程使用了类别信息(标记信息),因此LDA也常被视为一种经典的监督降维技术。

3.4 多分类学习

现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。最为经典的拆分策略有三种:“一对一”(OvO)、“一对其余”(OvR)和“多对多”(MvM),核心思想与示意图如下所示。

  1. 一对一(One vs. One, OvO):给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),从而产生N(N-1)/2个二分类学习器,在测试阶段,将新样本放入所有的二分类学习器中测试,得出N(N-1)个结果最终通过投票产生最终的分类结果
  2. 一对其余(One vs. Rest, OvR):给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类剩余的所有类别作为一个新的反类,从而产生N个二分类学习器,在测试阶段,得出N个结果,若仅有一个学习器预测为正类,则对应的类标作为最终分类结果。
  3. 多对多(Many vs. Many, MvM):给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类若干个类作为反类(通过ECOC码给出,编码),若进行了M次划分,则生成了M个二分类学习器,在测试阶段(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的类别作为最终分类结果。
    在这里插入图片描述
    在这里插入图片描述

3.5 类别不平衡问题

类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时候我们就需要进行相应的处理来平衡这个问题。

类别不平衡问题需要通过特定的技术来处理,如重采样、调整权重等,以提高模型在少数类上的识别能力。解决类别不平衡问题主要有以下三类做法:

  1. 欠采样(Undersampling):直接对训练集中的多数类样本进行欠采样,即去除一些多数类样本,使得正反例数目接近。
  2. 过采样(Oversampling):对训练集中的少数类样本进行过采样,即增加一些少数类样本,使得正反例数目接近。需要注意的是,过采样不能简单地对初始少数类样本进行重复采样,否则会导致严重的过拟合。代表性算法是SMOTE,通过插值获得新样本。
  3. 阈值移动(Threshold-moving):直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,嵌入再缩放策略到决策过程中。 这些策略旨在提高模型对少数类的识别能力,从而提高分类任务的整体性能。

http://www.kler.cn/a/406489.html

相关文章:

  • Kafka 数据倾斜:原因、影响与解决方案
  • SpringCloud Gateway转发请求到同一个服务的不同端口
  • java基础概念37:正则表达式2-爬虫
  • 6. Spring Cloud Gateway网关超详细内容配置解析说明
  • 数据结构(顺序栈——c语言实现)
  • 大语言模型---Llama模型文件介绍;文件组成
  • 【阅读记录-章节3】Build a Large Language Model (From Scratch)
  • 掌上单片机实验室 – RT-Thread + ROS2 初探(25)
  • 【FTHR-G0001开发板测评】简介、程序测试
  • 不用 SQL 的数据仓库
  • leetcode-11-盛最多水的容器
  • 使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
  • 6、PyTorch中搭建分类网络实例
  • 对抗样本存在的原因
  • 鸿蒙NEXT开发-Navigation组件导航
  • 用 Python 写了一个俄罗斯方块小游戏(附源码)
  • 机器人打包物品研究现状简述
  • stm32启动过程解析startup启动文件
  • 【分享一个vue指令】鼠标放置提示指令v-tooltip
  • 【git】husky - pre-commit script failed (code 2)
  • 数据库课程设计全流程:方法与实例解析
  • C#调用JAVA
  • Rust编程与项目实战-模块std::thread(之一)
  • Rust 的静态网站生成器「GitHub 热点速览」
  • VTK知识学习(11)- 可视化管线
  • 第J7周:对于ResNeXt-50算法的思考