模式识别-贝叶斯分类器-知识总结与作业(python版)

机器学习 专栏收录该内容
8 篇文章 0 订阅

基于贝叶斯理论的分类器

采用贝叶斯决策理论的前提为:目标观测值随机且服从一定的分布

贝叶斯公式

设样本空间S划分为Bi,A为某一事件,则在A发生的条件下Bi发生的概率为:

P ( B i ∣ A ) = P ( B i A ) / P ( A ) = P ( A ∣ B i ) P ( B i ) / P ( A ) P(B_i|A)=P(B_iA)/P(A)=P(A|B_i)P(B_i)/P(A) P(BiA)=P(BiA)/P(A)=P(ABi)P(Bi)/P(A)

关键概念:先验概率 P ( B i ) P(B_i) P(Bi)、后验概率 P ( B i ∣ A ) P(B_i|A) P(BiA)、类条件概率密度 P ( A ∣ B i ) P(A|B_i) P(ABi)
先验概率通过各类别数量计算,类条件概率密度通过估计分布与参数计算

基于最小错误率的贝叶斯决策

决策规则:
x ∈ w i x \in w_i xwi if a r g m a x P ( w ∣ x ) = P ( w i ∣ x ) argmaxP(w|x)=P(w_i|x) argmaxP(wx)=P(wix)
why?
错误率定义:
P ( e ) = ∫ − ∞ ∞ p ( e , x ) d x = ∫ − ∞ ∞ p ( e ∣ x ) p ( x ) d x P(e) = ∫ _{-\infty} ^\infty p(e,x)dx= ∫ _{-\infty} ^\infty p(e|x)p(x)dx P(e)=p(e,x)dx=p(ex)p(x)dx
一维为例:
在这里插入图的片描述
阴影部分为总错误率,只有按照上述决策规则决策,总错误率最小。(决策分类点向左或向右都会使阴影面积变大)

待解决的问题:

类条件概率密度函数的参数如何估计

1 需要利用样本集估计 P ( x ∣ w i ) P(x|w_i) P(xwi)得到 P ^ ( x ∣ w i ) \hat{P}(x|w_i) P^(xwi),期望当 n → ∞ n\rightarrow \infty n时, P ^ ( x ∣ w i ) \hat{P}(x|w_i) P^(xwi)可以收敛于 P ( x ∣ w i ) P(x|w_i) P(xwi)
2 估计方法包括(1)极大似然估计(2)贝叶斯估计
(1)极大似然估计
把待估参数看作确定性的量,最佳估计就是使训练样本的概率为最大的那个值,即:使似然函数达到最大的参数值作为估计值。其中参数 θ \theta θ是确定的未知量(非随机)
设样本独立抽取,似然函数为:
P ( X ∣ θ ) = p ( x 1 , x 2 , . . . , x N ∣ θ ) = ∏ k = 1 N p ( x k ∣ θ ) P(X|\theta) = p(x_1,x_2,...,x_N|\theta) = \prod_{k=1}^Np(x_k|\theta) P(Xθ)=p(x1,x2,...,xNθ)=k=1Np(xkθ)
使 P ( X ∣ θ ) P(X|\theta) P(Xθ)达极大值的参数向量 θ ^ \hat{\theta} θ^ ,就是 θ \theta θ的最大似然估计,令 l ( θ ) = P ( X ∣ θ ) l(\theta) = P(X|\theta) l(θ)=P(Xθ),(为了方便也可以取对数),极大似然的结果就是 m a x l ( θ ) maxl(\theta) maxl(θ)即:
∇ θ l ( θ ) = 0 \nabla_{\theta}l(\theta) = 0 θl(θ)=0
假设为高斯分布
θ 1 = μ , θ 2 = σ 2 \theta_1=\mu,\theta_2=\sigma^2 θ1=μ,θ2=σ2,似然函数为:
H ( θ ) = l n l ( θ ) = ∑ k = 1 N l n p ( x k ∣ θ ) H(\theta) = lnl(\theta) = \sum_{k=1}^Nlnp(x_k|\theta) H(θ)=lnl(θ)=k=1Nlnp(xkθ)
对于一维正态分布
l n p ( x k ∣ θ ) = − 1 / 2 ( l n 2 π θ 2 + 1 / θ 1 ( x k − θ 1 ) 2 lnp(x_k|\theta) = -1/2(ln2\pi\theta_2+1/\theta_1(x_k-\theta_1)^2 lnp(xkθ)=1/2(ln2πθ2+1/θ1(xkθ1)2
求导并使导数为零得到:
在这里插入图片描述
(2)贝叶斯估计
θ \theta θ为服从某种先验分布的随机量,其先验概率密度为p( θ \theta θ),利用已知的训练样本,使 θ \theta θ的初始密度估计转化为后验概率密度 p ( θ ∣ X ) p(\theta|X) p(θX)。与贝叶斯决策基本思想一样,都是使贝叶斯风险最小。不同是一个决策真实类别,一个估计真实参数。
引入估计风险(代价函数) λ ( θ ^ , θ ) \lambda(\hat{\theta},\theta) λ(θ^,θ) 表示利用 θ ^ \hat{\theta} θ^代替 θ \theta θ带来的损失,对应 λ ( α i , ω i ) \lambda(\alpha_i,\omega_i) λ(αi,ωi)
则贝叶斯统计总平均风险为:
R = ∫ s ∑ j = 1 C λ ( α i , ω i ) P ( x , ω j ) d x R = ∫ _{s}\sum_{j=1}^C\lambda(\alpha_i,\omega_i)P(x,\omega_j)dx R=sj=1Cλ(αi,ωi)P(x,ωj)dx
其中s是包含x的空间,C为类别数
贝叶斯估计总平均风险为:
R = ∫ s R ( θ ^ ∣ x ) p ( x ) d x R = ∫_sR(\hat{\theta}|x)p(x)dx R=sR(θ^x)p(x)dx
其中 R ( θ ^ ∣ x ) = ∫ θ λ ( θ ^ , θ ) p ( θ ∣ x ) d θ R(\hat{\theta}|x) = ∫_\theta\lambda(\hat{\theta},\theta)p(\theta|x)d\theta R(θ^x)=θλ(θ^,θ)p(θx)dθ
求得的 θ \theta θ的估计值 θ ^ \hat{\theta} θ^应使R最小,等价于求使条件风险 R ( θ ^ ∣ x ) R(\hat{\theta}|x) R(θ^x) 最小的估计值 θ ^ \hat{\theta} θ^,其中估计风险可以自定义,较为常见的事平方误差函数
假设为高斯分布
已知正态分布的方差,需估计均值,假设
p ( x ∣ μ ) ∽ N ( μ , σ 2 ) , p ( μ ) ∽ N ( μ 0 , σ 0 2 ) p(x|\mu) \backsim N(\mu,\sigma^2),p(\mu) \backsim N(\mu_0,\sigma_0^2) p(xμ)N(μ,σ2),p(μ)N(μ0,σ02)
μ \mu μ的后验概率为:
p ( μ ∣ X ) = p ( X ∣ μ ) p ( μ ) / ∫ p ( X ∣ μ ) p ( μ ) d μ = a ∗ ∏ k = 1 N p ( x k ∣ μ ) p ( μ ) p(\mu|X) = p(X|\mu)p(\mu)/ ∫p(X|\mu)p(\mu)d\mu = a* \prod_{k=1}^Np(x_k|\mu)p(\mu) p(μX)=p(Xμ)p(μ)/p(Xμ)p(μ)dμ=ak=1Np(xkμ)p(μ)
代入可得:
p ( μ ∣ X ) = a ∗ e x p { − 1 2 [ ( N σ 2 + 1 σ 2 ) μ 2 − 2 ( 1 σ 2 ∑ k = 1 N x k + μ 0 σ 0 2 ) μ ] } p(\mu|X) = a*exp\{-{\frac{1}{2}}[(\frac{N}{\sigma^2}+\frac{1}{\sigma^2})\mu^2-2(\frac{1}{\sigma^2}\sum_{k=1}^Nx_k+\frac{\mu_0}{\sigma_0^2})\mu]\} p(μX)=aexp{21[(σ2N+σ21)μ22(σ21k=1Nxk+σ02μ0)μ]}
因为是一个关于 μ \mu μ的二次函数的指数函数所以可以假设 p ( μ ∣ X ) ∽ N ( μ n , σ N 2 ) p(\mu|X) \backsim N(\mu_n,\sigma_N^2) p(μX)N(μn,σN2),则对应关系为:
1 σ N 2 = N σ 2 + 1 σ 2 \frac{1}{\sigma_N^2} = \frac{N}{\sigma^2}+\frac{1}{\sigma^2} σN21=σ2N+σ21
μ N σ N 2 = 1 σ 2 ∑ k = 1 N x k + μ 0 σ 0 2 \frac{\mu_N}{\sigma_N^2} = \frac{1}{\sigma^2}\sum_{k=1}^Nx_k+\frac{\mu_0}{\sigma_0^2} σN2μN=σ21k=1Nxk+σ02μ0
得到 μ N = σ 0 2 N σ 0 2 + σ 2 ∑ k = 1 N x k + σ 0 2 N σ 0 2 + σ 2 μ 0 \mu_N = \frac{\sigma_0^2}{N\sigma_0^2+\sigma^2}\sum_{k=1}^Nx_k+ \frac{\sigma_0^2}{N\sigma_0^2+\sigma^2}\mu_0 μN=Nσ02+σ2σ02k=1Nxk+Nσ02+σ2σ02μ0
因为 μ ^ = ∫ μ P ( μ ∣ X ) d μ = μ N \hat{\mu} = ∫\mu P(\mu|X)d\mu = \mu_N μ^=μP(μX)dμ=μN 所以
μ ^ = σ 0 2 N σ 0 2 + σ 2 ∑ k = 1 N x k + σ 0 2 N σ 0 2 + σ 2 μ 0 \hat{\mu} = \frac{\sigma_0^2}{N\sigma_0^2+\sigma^2}\sum_{k=1}^Nx_k+ \frac{\sigma_0^2}{N\sigma_0^2+\sigma^2}\mu_0 μ^=Nσ02+σ2σ02k=1Nxk+Nσ02+σ2σ02μ0

决策面和判别函数如何获得

决策面方程即当两类区域相邻,可以表示为
g i ( x ) = g j ( x ) g_i(x) = g_j(x) gi(x)=gj(x)
其中 g i ( x ) = P ( w j ∣ x ) g_i(x) = P(w_j|x) gi(x)=P(wjx) ,方便起见可以进行对数变化得到:
g i ( x ) = l n ( P ( w i ∣ x ) ) = − 1 2 ( x − μ i ) T Σ i − 1 ( x − μ i ) − d 2 l n 2 π − 1 2 l n ∣ Σ i − 1 ∣ + l n P ( w i ) g_i(x) = ln(P(w_i|x) )=-\frac{1}{2}(x-\mu_i)^T\Sigma_i^{-1} (x-\mu_i)-\frac{d}{2}ln2\pi -\frac{1}{2}ln|\Sigma_i^{-1}| + lnP(w_i) gi(x)=ln(P(wix))=21(xμi)TΣi1(xμi)2dln2π21lnΣi1+lnP(wi)
决策面方程为: g i ( x ) − g j ( x ) = 0 g_i(x) - g_j(x) = 0 gi(x)gj(x)=0

一些课堂作业

极大似然估计

print('最大似然结果:')
male_height = male_data['身高(cm)'] # 处理身高
female_height = female_data['身高(cm)']
male_height.dropna() # 删除nan
female_height.dropna()
[male_u_height, male_sig_height] = norm.fit(male_height) # loc = data.mean() scale = np.sqrt(((data - loc)**2).mean())
[female_u_height, female_sig_height] = norm.fit(female_height)
print('身高的参数:男性均值{},方差{},女性均值{},方差{}'.format(male_u_height, male_sig_height, female_u_height, female_sig_height))
# 体重
male_weight = male_data['体重(kg)'] # 体重身高
female_weight = female_data['体重(kg)']
male_weight.dropna() # 删除nan
female_weight.dropna()
[male_u_weight, male_sig_weight] = norm.fit(male_weight) 
[female_u_weight, female_sig_weight] = norm.fit(female_weight)
print('体重的参数:男性均值{},方差{},女性均值{},方差{}'.format(male_u_weight, male_sig_weight, female_u_weight, female_sig_weight))
# 50米
[male_u_50, male_sig_50] = norm.fit(male_50) 
[female_u_50, female_sig_50] = norm.fit(female_50)
print('50米参数:男性均值{},方差{},女性均值{},方差{}'.format(male_u_50, male_sig_50, female_u_50, female_sig_50))

贝叶斯估计。利用上题得到的方差进行均值估计

print('\n*********************\n')
print('贝叶斯估计结果:')
u0 = 0
sig0 = 1
male_N = len(male_height)
male_u_height_bayes = (1/(male_N + male_sig_height**2))*(male_height.sum()) # 参考贝叶斯估计
female_N = len(female_height)
female_u_height_bayes = (1/(female_N + female_sig_height**2))*(female_height.sum())
print('身高的参数:男性均值{},女性均值{}'.format(male_u_height_bayes, female_u_height_bayes))

决策面

male = male_data[['身高(cm)','体重(kg)']]
male = np.array(male)
female = female_data[['身高(cm)','体重(kg)']]
female = np.array(female)
plt.scatter(male[:,0], male[:,1], alpha = 0.6)
plt.scatter(female[:,0], female[:,1], alpha = 0.6)

plt.xlabel('身高')
plt.ylabel('体重')
# 先验概率
P_male = len(male)/(len(male) + len(female))
P_famale = 1 - P_male
# 协方差矩阵
sig_male = np.cov(male.T)
sig_female = np.cov(female.T)
# 均值
mean_male = np.array([male_u_height, male_u_weight]).reshape(-1,1) # 列向量
mean_female = np.array([female_u_height, female_u_weight]).reshape(-1,1)
# 构建决策面
sample_height = np.linspace(150,200,50) # 构建50*50的一个待检测区域
sample_weight = np.linspace(40,100,50)
sample = np.zeros((50, 50))
for i in range(50):
    for j in range(50):
        x = np.array([sample_height[i],sample_weight[j]]).reshape(-1,1)
        sample[i,j] = 0.5 * (np.dot(np.dot((x-mean_male).T,np.linalg.inv(sig_male)), (x-mean_male))-\
        np.dot(np.dot((x-mean_female).T,np.linalg.inv(sig_female)), (x-mean_female))) +\
        0.5 * math.log(np.linalg.det(sig_male)/np.linalg.det(sig_female)) - math.log(P_male/P_famale)

plt.contour(sample_height, sample_weight, sample, 0, colors = 'green',linewidths=2)
# 画待区分的点
plt.scatter(170, 52, norm = 2, c = 'red', marker='s')
plt.scatter(178, 71, norm = 2, c = 'red', marker='s')
plt.legend(['男性','女性','待检测'])

结果展示
在这里插入图片描述

  • 1
    点赞
  • 1
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值