采用贝叶斯决策理论的前提为:目标观测值随机且服从一定的分布
设样本空间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(Bi∣A)=P(BiA)/P(A)=P(A∣Bi)P(Bi)/P(A)
关键概念:先验概率 P ( B i ) P(B_i) P(Bi)、后验概率 P ( B i ∣ A ) P(B_i|A) P(Bi∣A)、类条件概率密度 P ( A ∣ B i ) P(A|B_i) P(A∣Bi) 先验概率通过各类别数量计算,类条件概率密度通过估计分布与参数计算
决策规则: x ∈ w i x \in w_i x∈wi if a r g m a x P ( w ∣ x ) = P ( w i ∣ x ) argmaxP(w|x)=P(w_i|x) argmaxP(w∣x)=P(wi∣x) 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(e∣x)p(x)dx 一维为例: 阴影部分为总错误率,只有按照上述决策规则决策,总错误率最小。(决策分类点向左或向右都会使阴影面积变大)
1 需要利用样本集估计 P ( x ∣ w i ) P(x|w_i) P(x∣wi)得到 P ^ ( x ∣ w i ) \hat{P}(x|w_i) P^(x∣wi),期望当 n → ∞ n\rightarrow \infty n→∞时, P ^ ( x ∣ w i ) \hat{P}(x|w_i) P^(x∣wi)可以收敛于 P ( x ∣ w i ) P(x|w_i) P(x∣wi) 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=1∏Np(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=1∑Nlnp(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=1∑Cλ(α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μ=a∗k=1∏Np(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)=a∗exp{−21[(σ2N+σ21)μ2−2(σ21k=1∑Nxk+σ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=1∑Nxk+σ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=1∑Nxk+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=1∑Nxk+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(wj∣x) ,方便起见可以进行对数变化得到: 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(wi∣x))=−21(x−μi)TΣi−1(x−μi)−2dln2π−21ln∣Σi−1∣+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(['男性','女性','待检测'])结果展示