广义线性模型(1)广义线性模型详解

一 GLM概述

广义线性模型(Generalized Linear Models,GLM)由 Nelder 和 Wedderburn 于 1972年提出和发表 ,旨在解决普通线性回归模型无法处理因变量离散,并发展能够解决非正态因变量的回归建模任务的建模方法。

在广义线性模型的框架下,因变量不再要求连续、正态,当然自变量更加没有特殊的要求。能够对正态分布、二项分布、泊松分布、Gamma分布等随机因变量进行建模.

通俗来说,广义线性模型是普通线性模型的普遍化,适用性更广、更抽象的线性模型。

按照我们编程的思路来想,广义线性模型GLM就像是抽象出来的一个抽象类,这个类定义了抽象的假设方法、属性等,在面对具体问题时,我们不能用这个抽象类来直接解决问题的,需要针对场景来实现一个可实例化的类,比如面对二分类问题我们继承GLM类,实现一个逻辑回归类,用逻辑回归来解决具体问题。广义线性模型GLM并不是这个类的源头,再向上还可以抽象出广义线性混合模型GLMM类,再向上抽象还有投影寻踪回归PPR类…估计这个分支抽象到最后就成了“模型”类。(当然,比如线性回归也并不是说只能抽象成GLM,也可能抽象成广义相加模型(GAM),这些方法本文不做详述)

二 GLM分类

广义线性模型(Generalized Linear Models, GLMs)是一种扩展了标准线性回归模型的方法,它可以用来处理各种不同类型的数据和响应变量。GLMs 的核心概念是将线性预测器与响应变量的均值通过一个链接函数(link function)连接起来,并假设响应变量服从某个特定的概率分布。下面是一些广义线性模型的常见分类及其应用领域:

  1. 线性回归 (Linear Regression)

    • 链接函数:恒等函数(Identity)

    • 概率分布:正态分布

    • 应用场景:连续型数据的预测,如预测收入、温度等。

  2. 逻辑回归 (Logistic Regression)

    • 链接函数:logit函数(对数几率函数)
    • 概率分布:伯努利分布(二分类问题)或多项式分布(多分类问题)
    • 应用场景:二分类或多分类问题,如预测病人是否患有某种疾病、邮件是否为垃圾邮件等。
  3. 泊松回归 (Poisson Regression)

    • 链接函数:自然对数函数
    • 概率分布:泊松分布
    • 应用场景:计数数据的建模,如网站每天的访问次数、某事件发生的次数等。
  4. Softmax回归 (Multinomial Logistic Regression)

    • 链接函数**:Softmax函数**

    • 概率分布**:多项式分布**

    • 应用场景**:多分类问题,其中响应变量有三个或更多互斥的类别

  5. 多项式回归 (Polynomial Regression)

    • 链接函数:恒等函数
    • 概率分布:正态分布 注意:虽然多项式回归在技术上不是GLMs的标准成员,但它可以通过在特征中加入高阶项来模拟非线性关系,从而在某种程度上与GLMs的概念相关联。

三 为什么需要广义线性模型

线性模型的预测是直线(或超平面)。这使得它们擅长外推。这是一些更复杂的算法(例如梯度提升和随机森林)不擅长的事情。

请看下面线性回归如何如预期地进行外推:

from sklearn.linear_model import LinearRegression
x = [[1], [2], [3]]
y = [10, 20, 30]
m = LinearRegression()
m.fit(x, y)
m.predict([[10]]) # 返回 100,如预期

然而,基于树的模型无法进行外推:


from sklearn.ensemble import GradientBoostingRegressor
x = [[1], [2], [3]]
y = [10, 20, 30]
m = GradientBoostingRegressor()
m.fit(x, y)
m.predict([[10]]) # 返回 30!

尽管如此,外推有时可能是愚蠢的。

以这个例子为例:一个商品被售出的机会取决于其在网站主页上的位置。假设,主页上有20个插槽用于列出商品。我们根据插槽位置计算了商品的销售频率。位于第7位的商品, 50%的情况下会被售出。位于第4位的商品, 40%的情况下会被售出,位于第9位的商品, 30%的情况下会被售出。现在我们使用这些信息来估计第1位和第 位商品的销售机会。

from sklearn.linear_model import LinearRegression
x = [[7],[8],[9]]
y = [0.50, 0.40, 0.30]
m = LinearRegression()
m.fit(x, y)
m.predict([[1], [20]]) # 返回 110% 和 -80%

正如你所看到的,我们得到了不现实的预测结果。一个位置导致商品售出的机会为 110,而另一个位置的商品售出机会为负值。我们都知道概率应该在 0和 1之间。我们该怎么办呢?

所有统计学家的钉子上都有一把锤子:转换。如果你的模型不能很好地拟合数据,就用一些变换来转换模型的输入或输出,比如把数据转换成对数刻度,然后希望你的模型能起作用,例如使用逻辑回归模型进行拟合数据。

四 GLM理解

4.1 GLM假设

要理解GLM,需要我们站在概率论的视角下来看待回归问题。回归的目的是通过给定的自变量 x x x,使用参数 θ \theta θ 所定义的模型计算出 y y y,其本质是一个数理统计问题,不要把 x x x y y y 看做两个数字,而把他们视为两个随机变量,那么回归就是在样本 x x x的条件下,得到 y y y 的条件概率分布 P ( y ∣ x ; θ ) P ( y | x; \theta) P(yx;θ),通过计算分布的期望 E ( y ∣ x ; θ ) E ( y | x; \theta ) E(yx;θ),就可以得到 y y y 的估计值。

我们注意到,上面的这段解释中存在一些有疑问的地方,比如:

  • 只有样本的情况下, y y y 的条件概率分布 P ( y ∣ x ; θ ) P ( y | x; \theta) P(yx;θ) 和期望 E ( y ∣ x ; θ ) E ( y | x; \theta ) E(yx;θ)怎么计算呢?
  • 为什么 E ( y ∣ x ; θ ) E ( y | x; \theta ) E(yx;θ) 就是 y y y 的估计值呢?
  • 参数 θ \theta θ 所定义的是什么模型, θ \theta θ 怎么求出来呢?

广义线性模型GLM就针对这些问题做出了以下三点假设:

  1. 定义 y 的估值概率分布属于某种指数分布族, y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η) yx,θExponentialFamily(η),在给定 𝑥 的条件下,假设随机变量 𝑦 服从某个指数族分布。指数分布家族是指可以表示为指数形式的概率分布,指数分布的形式如下:

    其中 η η η 是分布的自然参数, T ( y ) T ( y ) T(y)是充分统计量(sufficient statistic, 能为相应分布提供足够信息的统计量),一般情况下 T ( y ) = y T ( y ) =y T(y)=y a ( η ) a(η) a(η)是对数分配函数(log partition function),而 a a a b b b T T T 一般都是给定的,随着 η η η 的变化,会得到不同的分布。知道了分布的形式,第一个问题也就解决了,使用期望的计算公式,根据分布求期望;

  2. 定义 y y y 的估计值 h ( x , θ ) = E ( T ( y ) ∣ x , θ ) = E ( y ∣ x , θ ) h ( x , θ ) = E ( T ( y ) | x , θ )=E ( y | x , θ ) h(x,θ)=E(T(y)x,θ)=E(yx,θ), 在给定 x x x的条件下,我们的目标是得到一个模型 h ( x ) ℎ(x) h(x)能预测出 T ( y ) T(y) T(y)的期望值;所以这个假设解决了我们的第二个问题;

  3. 定义线性预测算子,即广义线性模型中的线性因素,对 y y y相关的指数分布族的自然参数 η η η η = θ T x η = θ^T x η=θTx,当 η η η是向量时,有 η i = θ i T x η_i=θ^T_ix ηi=θiTx,这个假设告诉了我们参数 θ \theta θ所定义的是什么模型,至于 θ \theta θ怎么求解——又有分布又有样本,极大似然估计是不是很合适?具体求解我们在后面的具体模型中再细说。

这这些假设条件下,我们对不同数据 x x x 得到的其实是不同的响应变量 y y y的分布(因为虽然 θ \theta θ没变,但分布 y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η) yx,θExponentialFamily(η)的参数 η = θ T x η = θ^T x η=θTx发生了改变),不同分布的期望不同,即得到不同的估计值。这就是GLM的基本逻辑,下面我们来了解一下GLM的结构。

4.2 GLM的结构及推导

广义线性模型GLM包含3个部分: Random Component(随机成分)、System Component(系统成分) 和 Link Function(联结函数),这也是回归问题中普遍都要有的三个部分。

System Component(系统成分)

系统成分是给定的回归中,用来解释研究现象的部分,好像很抽象,我理解的就是System Component描述了这个问题的形态,比如在GLM中,系统成分是linear predictor(线性预测算子),这里对应着我们上面的第三点假设 : η = θ T x η = θ^T x η=θTx

Random Component(随机成分)

随机成分则是用来定义待预测的未知的形态,即响应变量的形态。在GLM中,就是指数分布族模型,对应着我们上面假设中的第一点: y ∣ x , θ ∼ E x p o n e n t i a l F a m i l y ( η ) y|x,θ∼ExponentialFamily(η) yx,θExponentialFamily(η)

指数族分布的例子:

Link Function(联结函数)

联结函数,顾名思义,它描述了随机成分与系统成分之间的关系,在GLM中,联结函数连接了响应变量的期望(也就是我们的预测目标)与linear predictor,那他是怎么连接的呢?怎么理解这个事呢?下面我们来推导一下

因此可以说:联结函数连接了响应变量的期望(也就是我们的预测目标)与linear predictor。实际上, link function 把原始 y y y的值域(预测目标)转换统一到了 linear predictor 的值域上,反之,link function 的反函数就把 linear predictor 直接映射到了预测目标 y y y, 反函数 g − 1 ( η ) = μ g^{−1}(η)=μ g1(η)=μ 称为响应函数(response function),较常用的响应函数例如logistic(sigmoid)、softmax(都是 logit 的反函数)。

五 举例

广义线性模型是线性模型的推广,定义如下:给定响应变量 Y i Y_i Yi 服从指数族分布,有 g ( u i ) = X i T β g(u_i)=X_i^T \beta g(ui)=XiTβ E ( Y i ∣ X i T ) = u i ( β ) E(Y_i| X_i^T)=u_i(\beta) E(YiXiT)=ui(β) ,其中 g g g 为连接函数, X i T X_iT XiT 为自变量 .

对于一般线性模型,连接函数 g ( u ) = u g(u)=u g(u)=u ,对于逻辑回归模型,连接函数 g ( u ) = l o g ⁡ u 1 − u g(u)=log⁡\frac{u}{1−u} g(u)=log1uu.

5.1 最小二乘线性回归(Ordinary Least Squares)的广义线性模型推导

5.2 逻辑回归的广义线性模型推导

参考链接

  • https://www.jianshu.com/p/e5f5188e4c69
  • https://zhuanlan.zhihu.com/p/156846889?from_voters_page=true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:二叉搜索树(简单C++代码实现)

目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…

postman使用旧版本报错version mismatch detected

卸载 postman又重装了别的版本,打开后遇到了这个报错,解决办法如下: 删除缓存文件 C:\Users\Administrator\AppData\Roaming\Postman 下载PostMan 提取码:6k51

【PyTorch】单目标检测项目

对象检测是在图像中查找特定对象位置的过程,用于处理单对象或多对象检测问题。单对象检测在给定图像中仅定位一个对象。对象的位置可以通过边界框定义。单对象检测使用四个数字预测边界框。对于正方形物体,可以固定宽度和高度,并简化问题以仅预测两个数字…

Unity:PC包直接查看Log日志

PC端会输出Log日志,位置在: C:\Users\用户名\AppData\LocalLow\公司名\项目名 在这里可以找到类似的文件: 打开便可以看到打印。

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题

解决 elementUI 组件在 WebStorm 中显示为未知标签的问题 一、问题 自从转到 ts 之后,编辑器就一直提示用到的 elementUI 标签未知,一直显示一溜黄色警示,很烦: 二、解决 把它改成大写就可以了。 如下: 把整个项目…

springboot实战(十二)之通过注解的方式记录接口出入参log入库

前言 生产过程中,为了更好的辅助线上问题排查避免不了对接口出入参进行日志输出的时候,并且为了分析接口数据效果需要将每次请求接口的出入参进行落库方便后续的数据分析,这时总不能每个接口入参之后、出参之前都打印一遍日志吧?如…

51单片机嵌入式开发:16、STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作

STC89C52RC 嵌入式之 步进电机28BYJ48、四拍八拍操作 STC89C52RC 之 步进电机28BYJ48操作1 概述1.1 步进电机概述1.2 28BYJ48概述 2 步进电机工作原理2.1 基本原理2.2 28BYJ48工作原理2.3 28BYJ48控制原理 3 电路及软件代码实现4 步进电机市场价值 STC89C52RC 之 步进电机28BYJ…

【flink】之如何消费kafka数据?

为了编写一个使用Apache Flink来读取Apache Kafka消息的示例,我们需要确保我们的环境已经安装了Flink和Kafka,并且它们都能正常运行。此外,我们还需要在项目中引入相应的依赖库。以下是一个详细的步骤指南,包括依赖添加、代码编写…

navicat 导入 sql 遇到的问题

错误1 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS tmp_tables; CREATE TABLE at line 1 [Err] &…

TypeScript-内置应用程序类型-Recode

文章目录 前言Record<string, any>Record 的语法使用示例在你的代码中的应用示例代码 前言 学习TypeScript 内置应用程序类型 在 TypeScript 中&#xff0c;Record 是一个实用类型&#xff0c;它允许你基于一个键的联合类型和一个值的类型&#xff0c;来创建一个新的对象…

使用约束布局该如何设置哪个视图(UILabel)的内容优先被压缩?

引言 在实际项目开发中&#xff0c;约束布局给我们带来了很大的便利&#xff0c;可以帮助我们创建灵活且响应迅速的用户界面。通常情况下&#xff0c;它都能很好地工作&#xff0c;但在一些包含许多UILabel的场景中&#xff0c;比如会话列表的UI&#xff0c;哪个视图会被优先压…

《0基础》学习Python——第二十讲__网络爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

二叉树---二叉搜索树的最小绝对差

题目&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 思路&#xff1a;中序遍历二叉搜索树的顺序是递增序列&#xff0c;将该序列中的相邻值两两比较找到最…

约定(模拟赛2 T3)

题目描述 小A在你的帮助下成功打开了山洞中的机关&#xff0c;虽然他并没有找到五维空间&#xff0c;但他在山洞中发现了无尽的宝藏&#xff0c;这个消息很快就传了出去。人们为了争夺洞中的宝藏相互陷害&#xff0c;甚至引发了战争&#xff0c;世界都快要毁灭了。小A非常地难…

2024论文精读:利用大语言模型(GPT)增强上下文学习去做关系抽取任务

文章目录 1. 前置知识2. 文章通过什么来引出他要解决的问题3. 作者通过什么提出RE任务存在上面所提出的那几个问题3.1 问题一&#xff1a;ICL检索到的**示范**中实体个关系的相关性很低。3.2 问题二&#xff1a;示范中缺乏解释输入-标签映射导致ICL效果不佳。 4. 作者为了解决上…

【Git】(基础篇七)—— IntelliJIDEA集成Git

InteliJ IDEA集成Git 现在有很多的集成工具帮助我们写代码&#xff0c;使用这些工具可以帮助我们加速写代码&#xff0c;很多工具也可以集成git&#xff0c;使用图形工具管理git&#xff0c;相信了解了底层运行逻辑的你能够很快地上手使用这些工具&#xff0c;本文以InteliJ I…

7 Vue3

相比 Vue2 1. 优点 vue3支持vue2的大多数特性&#xff0c;实现对vue2的兼容vue3对比vue2具有明显的性能提升 打包大小减少41%初次渲染快55%&#xff0c;更新快133%内存使用减少54% 更好的支持TypeScript使用Proxy代替defineProperty实现响应式数据 2. 性能提升的原因 静态标…

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了&#xff0c;需要用新的参数。如果有多个交易&#xff0c;读不同的参数文件&#xff0c;但是数据还是一套&#xff0c;就要改多个参数文件。或者只想执行参数文件的某一行数据&#xff0c;又不想调整参数文件顺序。 第一个问题目前想到…

数学基础 -- 泰勒展开式

泰勒展开 泰勒展开是将一个函数在某点附近展开成幂级数的工具。具体来说&#xff0c;对于一个在某点 a a a处具有 n n n阶导数的函数 f ( x ) f(x) f(x)&#xff0c;其泰勒展开式为&#xff1a; f ( x ) f ( a ) f ′ ( a ) ( x − a ) f ′ ′ ( a ) 2 ! ( x − a ) 2 f …

Ant Design Vue中日期选择器快捷选择 presets 用法

ant写文档的纯懒狗 返回的是一个day.js对象 范围选择时可接受一个数组 具体参考 操作 Day.js 话不多说 直接上代码 <a-range-pickerv-model:value"formData.datePick"valueFormat"YYYY-MM-DD HH:mm:ss"showTime:presets"presets"change&quo…