广义线性模型
指数分布族
前面学习了线性回归和logistic回归。我们知道对于P(y|x;θ)
若y属于实数,满足高斯分布,得到基于最小二乘法的线性回归,若y取{0,1},满足伯努利分布,得到Logistic回归。
这两个算法,其实都是广义线性模型的特例。
1) 伯努利分布
http://www.cnblogs.com/mikewolf2002/p/7667944.html
2) 高斯分布
http://www.cnblogs.com/mikewolf2002/p/7669977.html
指数分布族的定义:
若一类概率分布可以写成如下形式,那么它就属于指数分布族:
P(y;η)=b(y)exp(ηTT(y)−a(η))
η称作分布的自然参数,通常是一个实数。T(y)称作充分统计量,通常T(y)=y,实际上是一个概率分布的充分统计量(统计学知识)。对于给定的a,b,T三个函数,上式定义了一个以η为参数的概率分布集合,即改变η可以得到不同的概率分布。
https://en.wikipedia.org/w/index.php?title=Exponential_family&oldid=648989632
证明伯努利分布是指数分布族:
伯努利分布式对0,1问题进行建模,它的分布律如下:
Ber(ϕ),p(y=1;φ)=φ;p(y=0;φ)=1−φ
伯努利分布是对0,1问题进行建模的,对于Bernoulli(φ),y∈{0,1}有p(y=1;φ)=φ;p(y=0;φ)=1−φ,下面将其推导成指数分布族形式:
L(θ)=P(y;φ)=φy(1−φ)1−y=exp(log(φy(1−φ)1−y))=exp(ylog(φ)+(1−y)log(1−φ))=exp(ylog(φ1−φ)+log(1−φ))
将其与指数族分布形式对比,可以看出:
b(y)=1
T(y)=y
η=logϕ1−ϕ=>ϕ=11+e−η
a(η)=−log(1−ϕ)=log(1+eη)
表明伯努利分布也是指数分布族的一种。从上述式子可以看到,η的形式与logistic函数(sigmoid)一致,这是因为 logistic模型对问题的前置概率估计其实就是伯努利分布。
高斯分布
下面对高斯分布进行推导,推导公式如下(为了方便计算,我们将方差σ2设置为1):
N(μ,1)=1√2πexp−12(y−μ)2=1√2πexp−12y2+yμ−12μ2=1√2πexp−12y2expyμ−12μ2
将上式与指数族分布形式比对,可知:
b(y)=1√2πexp−12y2
T(y)=y
η=μ
a(η)=μ22
两个典型的指数分布族,伯努利和高斯分布。其实大多数概率分布都可以表示成指数分布族形式,如下所示:
- 伯努利分布(Bernoulli):对 0、1 问题进行建模;
- 多项式分布(Multinomial):对 K 个离散结果的事件建模;
- 泊松分布(Poisson):对计数过程进行建模,比如网站访问量的计数问题,放射性衰变的数目,商店顾客数量等问题;
- 伽马分布(gamma)与指数分布(exponential):对有间隔的正数进行建模,比如公交车的到站时间问题;
- β 分布:对小数建模;
- Dirichlet 分布:对概率分布进建模;
- Wishart 分布:协方差矩阵的分布;
广义线性模型GLM
选定了一个指数分布族后,怎样来推导出一个GLM呢?
假设:
(1)y|x;θ ExponentialFamily(η),即假设试图预测的变量y在给定x,以θ作为参数的条件概率,属于以η作为自然参数的指数分布族,例:若要统计网站点击量y,用泊松分布建模。
(2) 给定x,目标是求出以x为条件的T(y)的期望E[T(y)|x],即让学习算法输出h(x)=E[T(y)|x]
(3)η=θTx,即自然参数和输入特征x之间线性相关,关系由θ决定。仅当η是实数时才有意义,若η是一个向量,则ηi=θTix
推导伯努利分布的GLM:
y|x;θ ExponentialFamily(η),伯努利分布属于指数分布族,对给定的x,θ,学习算法进行一次预测的输出:
hθ(x)=E[y|x;θ]=ϕ=11+e−η=1(1+e−θTx)
得到logistic回归算法。
正则响应函数:g(η)=E[y;η],将自然参数η和y的期望联系起来
正则关联函数:g−1
推导多项式分布的GLM:
多项式分布是在k个可能取值上的分布,即y∈1,..,k,如将收到的邮件分成k类,诊断某病人为k种病中的一种等问题。
(1)将多项式分布写成指数分布族的形式:
设多项式分布的参数:ϕ1,ϕ2,…,ϕk ,且k∑i=1ϕi=1 ,ϕi表示第i个取值的概率分布,最后一个参数可以由前k−1个推导出,所以只将前k−1个ϕ1,ϕ2,…,ϕk−1视为参数。
多项式分布是少数几个T(y)!=y的分布,T(1)∼T(k)都定义成一个k−1维的列向量,表示为:
T(1)=[100⋮0]T(2)=[010⋮0]T(3)=[001⋮0]T(k−1)=[000⋮1]T(k)=[000⋮0]
这样定义T(y)是为了将多项式分布写成指数分布族形式。
*定义符号:指示函数,1{.}
1{True} = 1, 1{False} = 0,即大括号内命题为真,值为1,否则为0。
例:1{2=3} = 0, 1{1+1=2} = 1
用T(y)i表示T(y)的第i个元素,则T(y)i=1{y=i}
根据参数ϕ的意义(ϕi表示第i个取值的概率分布),可推出:
p(y;ϕ)=ϕ1{y=1}1ϕ1{y=2}2...ϕ1{y=k}k=ϕ1{y=1}1ϕ1{y=2}2...ϕ1−k−1∑i=11{y=i}k=ϕ(T(y))11ϕ(T(y))22...ϕ1−k−1∑i=1(T(y))ik=>exp(T(y))1log(ϕ1)+exp(T(y))2log(ϕ2)+...+(1−k−1∑i=1(T(y))i)log(ϕk)=exp(T(y))1log(ϕ1/ϕk)+exp(T(y))2log(ϕ2/ϕk)+...+exp(T(y))k−1log(ϕk−1/ϕk)+log(ϕk))=b(y)exp(ηTT(y)−a(η))
可得:
η=[log(ϕ1/ϕk)log(ϕ2/ϕk)⋮log(ϕk−1/ϕk)]
a(η)=−log(ϕk)
b(y)=1
证明多项式分布是指数分布族。
再用η表示ϕ:
ηi=logϕiϕkeηi=ϕiϕkϕkeηi=ϕiϕkk∑i=1eηi=k∑i=1ϕi=1ϕi=eηik∑j=1eηj
(2)根据上述假设(3)中自然参数和输入x的线性关系,可求得:
p(y=i|x;θ)=ϕi=eηik∑j=1eηj=eθTixk∑j=1eθTjx
(3)根据上述假设(2)中的输出h(x)=E[T(y)|x],可求得:
hθ(x)=E[T(y)|x;θ]=[1{y=1}|x;θ1{y=2}|x;θ⋮1{y=k−1}|x;θ]=[ϕ1ϕ2⋮ϕk−1]=[eθT1xk∑j=1eθTjxeθT2xk∑j=1eθTjx⋮eθTk−1xk∑j=1eθTjx]
称这种回归算法为softmax回归,是logistic回归的推广。
Softmax回归的训练方法和logistic相似,通过极大似然估计找到参数θ,其对数似然性为:
l(θ)=m∑i=1logp(y(i)|x(i);θ);=m∑i=1logk∏l=1(eθTlx(i)k∑j=1eθTjx(i))1{y(i)=l}=m∑i=1(k∑l=1(1{y(i)=l}log(eθTlx(i)k∑j=1eθTjx(i))))
其中θ是一个k×(n+1)的矩阵,代表这k个类的所有训练参数,每个类的参数是一个n+1维的向量。
跟Logistic回归一样,softmax也可以用梯度下降法或者牛顿迭代法求解,但在softmax回归中直接用上述对数似然函数求导是不能更新参数的,因为它存在冗余的参数,通常用牛顿方法中的Hessian矩阵也不可逆,是一个非凸函数,那么可以通过添加一个权重衰减项来修改代价函数,使得代价函数是凸函数,并且得到的Hessian矩阵可逆
再通过梯度上升或牛顿方法找对数似然性的最大值,即可求出参数θ。
详细的公式推导见:http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2013-10-14 Kmeans算法原理极其opencv实现(转帖)