前面我们学习的都是 discriminant learning algorthm, 直接对 p(y|x) 进行建模,或直接学习 X→Y 的映射。GDA 和 naive bayes 是 generative learning algorithm, 对 p(x|y) 建模,再通过贝叶斯公式计算 p(y|x)=p(x|y)p(y)p(x)
Gaussian Discriminant Analysis
对于输入,这里我们不再延续 x0=1 的传统,x∈Rn
assumption: x|y ~ N(μ,Σ)
multivariate gaussian recap
如果随机变量 Z 服从高斯分布,即 Z ~ N(μ,Σ), Z∈Rn,μ∈Rn,Σ∈Rn×n
EZ=μCov(Z)=E((Z−μ)(Z−μ)T)p(x;μ,Σ)=1(2π)n2|Σ|12exp(−12(x−μ)TΣ−1(x−μ))
对于二分类问题:
GDA model:
x|y=0 ~ N(μ0,Σ)
x|y=1 ~ N(μ1,Σ)
y ~ Ber(ϕ)
共有 μ0,μ1,Σ,ϕ 这几个参数。
对于数据集 {(x(i),y(i))}mi=1
可以计算联合概率
L(ϕ,μ0,μ1,Σ)=m∏i=1p(x(i),y(i);ϕ,μ0,μ1,Σ)=m∏i=1p(x(i)|y(i))p(y(i))l(ϕ,μ0,μ1,Σ)=log(L(ϕ,μ0,μ1,Σ))
最优化目标即为 l(ϕ,μ0,μ1,Σ), 使用极大似然估计求得参数的估计值。
ϕ=∑mi=11{y(i)=1}mμ0=∑mi=11{y(i)=0}x(i)∑mi=11{y(i)=0}μ1=∑mi=11{y(i)=1}x(i)∑mi=11{y(i)=1}Σ=1mm∑i=1(x(i)−μy(i))(x(i)−μy(i))T
在最后做预测时,预测的标签为:
ayrgmaxp(y|x)=ayrgmaxp(x|y)p(y)p(x)=ayrgmaxp(x|y)p(y)
即找出后验概率最大的类别。
与逻辑回归的联系和比较
可以证明,
p(y=1|x;ϕ,μ0,μ1,Σ)=11+exp(−θTx),θ=f(ϕ,μ0,μ1,Σ)
这就是 sigmoid 函数,可见 GDA 和 逻辑回归有某种联系。
下面分别看一下这两种模型:
- GDA
assumption :
x|y=i ~ N(μi,Σ)
y ~ Ber(ϕ)
- Logistic Regression
p(y=1|x)=11+exp(−θTx)
可以证明 GDA's assumption implies LR's assumption, but LR's assumption does not implies GDA's assumption. 可见 GDA 做了一个更强的假设。
这使得我们在应用时应该合理地选择模型,如果我们能确定数据来源符合 GDA 的假设或者近似符合,那么 GDA 的效果往往会比逻辑回归好,即使数据集不大,这是因为更强的假设意味着我们告诉了模型更多的信息。(模型的信息来源:数据,假设)但是如果数据不符合 GDA 的假设,我们却采用 GDA 模型,那么效果的好坏就难以确定了,可能刚好还不错,也有可能很差,相比而言逻辑回归更加 robust。
Naive Bayes
用一个例子来讲解朴素贝叶斯模型 : spam Email filter
首先考虑如何标识 input feature vector:
建立一个词典,将特征词放入词典,假设词典大小为 n,那么输入就是一个 n 维向量,如果第 i 个词出现,那么第 i 个分量为 1,否则为 0.
即 x∈{0,1}n,xi=1{word i appears in email}
want to model: p(x|y),p(y)
如果 n = 10,000, 那么 x 有 210,000 种可能取值,那么 parameter vector 就有 210,000−1 维,这是无法忍受的。
在朴素贝叶斯模型中,假设:
xi s is conditionally independent given y.
在这个例子中,就是说,知道这个邮件是 spam email 这件事之后,知道 xi 是否为 1 对知道 xj 是否为 1 没有影响。
p(x1,...,xn|y)=p(x1|y)p(x2|x1,y)....p(xn|x1,...,y)=p(x1|y)...p(xn|y)
其中第一步不依赖于任何假设,第二步使用了朴素贝叶斯假设。
朴素贝叶斯模型有这些参数
ϕj|y=1=p(xj=1|y=1)ϕj|y=0=p(xj=1|y=0)ϕ=p(y=1)
和 GDA 类似,要求得这些参数,只要使联合概率最大化:
L(ϕy,ϕj|y)=m∏i=1p(x(i),y(i);ϕy,ϕj|y)
通过求偏导数求得:
ϕy=∑mi=11{y(i)=1}mϕj|y=∑mi=11{x(i)j=1,y(i)=1}∑mi=11{y(i)=1}
在预测的时候,
p(y=1|x)=p(x|y=1)p(y=1)/p(x)=n∏i=1p(xi|y=1)p(y=1)/(n∏i=1p(xi|y=1)p(y=1)+n∏i=1p(xi|y=0)p(y=0))
后验概率最大的那一组即为预测的标签。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义