贝叶斯分类器
贝叶斯分类器
文章目录
朴素贝叶斯
朴素贝叶斯分类器
一个重要的前提
属性之间的独立性假设
P(a1,...,an∣vj)=ΠiP(ai∣vj)P(a_1,...,a_n|v_j) = \Pi_iP(a_i|v_j)P(a1,...,an∣vj)=ΠiP(ai∣vj)
形式
vNB=argmaxvj∈VP(vj)ΠiP(ai∣vj)v_{NB} = arg \max_{v_j \in V}P(v_j)\Pi_iP(a_i|v_j)vNB=argvj∈VmaxP(vj)ΠiP(ai∣vj)
从训练数据中估计 P(ai∣vj)P(a_i|v_j)P(ai∣vj) 要比直接估计联合密度估计要容易得多。
估计
从训练样本中进行估计
- 对任意目标值 vjv_jvj 估计出 P^(vj)\hat P(v_j)P^(vj)
- 对任意一个 aja_jaj,估计出 P^(ai∣vj)\hat P(a_i|v_j)P^(ai∣vj)
-
vNB=argmaxvj∈VP^(vj)Πai∈xP^(ai∣vj)v_{NB} = arg \max\limits_{v_j \in V}\hat P(v_j)\Pi_{a_i \in x}\hat P(a_i|v_j)vNB=argvj∈VmaxP^(vj)Πai∈xP^(ai∣vj)
连续值属性
对于连续值属性的讨论
- 离散化
- 利用概率分布来进行估计 P(xj∣Cj)=12πσijexp(−(xj−μij)22σij2)P(x_j|C_j) = \frac{1}{\sqrt{2\pi}\sigma_{ij}}exp(-\frac{(x_j - \mu_{ij})^2}{2\sigma_{ij}^2})P(xj∣Cj)=2πσij1exp(−2σij2(xj−μij)2)
- 其中 μij\mu_{ij}μij 和 σij\sigma_{ij}σij 分别为类 CiC_iCi 中随机变量 xix_ixi 的期望和标准差,利用对应的样本期望和标准差来进行估计
潜在问题
- 如果某一个属性的条件概率为 000,那么整个类的后验概率也为 000
- 训练样本不能覆盖那么多属性值时,不能分类某些测试记录
针对第一个问题,采用平滑技术
nc+mpn+m,p=1k\frac{n_c+mp}{n+m},p = \frac{1}{k}n+mnc+mp,p=k1
其中 ppp 是按均匀概率的观念点出发,如果有 kkk 个可能的属性值,则取值为 1k\frac{1}{k}k1.
mmm 被称为等效样本.
那么修正式相当于 nnn 个实际观察加上 mmm 个按 ppp 分布的虚拟样本。
特点
- 对于孤立噪声点,朴素贝叶斯分类器是健壮的
- 可以处理属性值遗漏问题
- 可以处理无关属性
- 属性相关性高会降低朴素贝叶斯分类器的性能
贝叶斯信念网络
贝叶斯信念网络 (Bayes belief network,BBN)(Bayes\ belief\ network,BBN)(Bayes belief network,BBN)
概念
- 描述的是一组变量所遵循的概率分布,通过一组条件概率来指定一组条件独立性假设
- 可以表述变量自己上的条件独立性假设。比朴素贝叶斯分类器的限制更少。
- 如果一个节点的父母节点已知,则它条件独立于它的所有非后代节点。
贝叶斯信念网络的表示
- 一个无环有向图来标识
- 一个概率表,即一组局部条件概率的集合
训练
-
如果网络结构已知,且变量可以从训练数据中完全取得,那么训练就比较简单
-
如果网络结构已知,但是只有部分变量能从训练数据中观察到,那么学习问题就困难多了。类似于神经网络的隐藏层的学习。
-
如果结构位置,那么需要学习结构。
定义一个 评分函数 - 基于信息论准则
- 引入了归纳偏置
选择综合编码长度最短的贝叶斯网----最小长度描述准则
评分函数
S(B∣D)=f(θ)∣B∣−LL(B∣D)S(B|D) = f(\theta)|B| - LL(B|D)S(B∣D)=f(θ)∣B∣−LL(B∣D)
其中 ∣B∣|B|∣B∣ 是贝叶斯网的参数个数; f(θ)f(\theta)f(θ) 表示描述每个参数 θ\thetaθ 所需的字节数
其中 LL(B∣D)=∑i=1mlogPB(xi)LL(B|D) = \sum_{i=1}^m\log P_B(x_i)LL(B∣D)=i=1∑mlogPB(xi)
是贝叶斯网络的似然。
寻找一个贝叶斯网络 BBB 使得评分函数 S(B|D)最小
- 如果 f(θ)=1f(\theta) = 1f(θ)=1,则就是 AICAICAIC 准则
AIC(B∣D)=∣B∣−LL(B∣D)AIC(B|D) = |B| - LL(B|D)AIC(B∣D)=∣B∣−LL(B∣D) - 如果 f(θ)=12logmf(\theta) = \frac{1}{2}\log mf(θ)=21logm,则就是 BICBICBIC 准则
BIC(B∣D)=logm2∣B∣−LL(B∣D)BIC(B|D) = \frac{\log m}{2}|B| - LL(B|D)BIC(B∣D)=2logm∣B∣−LL(B∣D) - 如果 f(θ)=0f(\theta) = 0f(θ)=0 ,即不考虑进行编码长度,函数退化为对数似然。
S(B∣D)=−LL(B∣D)S(B|D) = - LL(B|D)S(B∣D)=−LL(B∣D)
参数 θxi∣πi=P^D(xi∣πi)\theta_{x_i|\pi_i} = \hat P_D(x_i|\pi_i)θxi∣πi=P^D(xi∣πi)。其中 P^D(⋅)\hat P_D(·)P^D(⋅) 是 DDD 上的经验分布。所以只需要进行搜索得到最优参数。
拓扑结构的学习
主观专家的编码
- 设 T=(X1,...,Xd)T = (X_1,...,X_d)T=(X1,...,Xd),表示变量的全序。
- 对于所有的 TTT 中的元素 XT(j)X_{T(j)}XT(j) 表示 TTT 中第 jjj 个次序最高的变量
- π(XT(j))={XT(1),...,XT(j−1)}\pi(X_{T(j)}) = \{X_{T(1)},...,X_{T(j-1)}\}π(XT(j))={XT(1),...,XT(j−1)} 表示排在 XT(j)X_{T(j)}XT(j) 前面的变量集合
- 从 π(XT(j))\pi(X_{T(j)})π(XT(j)) 中去掉对 XjX_jXj 没有影响的变量。这是由先验知识得到的
- 在 XT(j)X_{T(j)}XT(j) 和 π(XT(j))\pi(X_{T(j)})π(XT(j)) 中剩余的变量画弧。
这是一个如何通过主观专家来构建合理网络结构的过程。
梯度提升训练
-
wijkw_{ijk}wijk 代表概率表的一个表项,即在给定 UiU_iUi 取值 uiku_{ik}uik 时,网络变量 YiY_iYi 值为 yijy_{ij}yij 的概率。
-
梯度的计算:
∂lnP(D∣h)∂wijk=∑d∈DP(Yi=yij,Ui=uik∣d)wijk\frac{\partial \ln P(D|h)}{\partial w_{ijk}} = \sum_{d \in D}\frac{P(Y_i = y_{ij},U_i = u_{ik}|d)}{w_{ijk}}∂wijk∂lnP(D∣h)=d∈D∑wijkP(Yi=yij,Ui=uik∣d) -
梯度的更新:
wijk←wijk+η∑d∈DPh(yij,uik∣d)wijkw_{ijk} \leftarrow w_{ijk} + \eta \sum_{d \in D}\frac{P_h(y_{ij},u_{ik}|d)}{w_{ijk}}wijk←wijk+ηd∈D∑wijkPh(yij,uik∣d) -
权重的归一化:
wijk←wijk∑jwijkw_{ijk} \leftarrow \frac{w_{ijk}}{\sum_{j}w_{ijk}}wijk←∑jwijkwijk
该算法可能找到的是局部最优解。
网络的推断
- 推断出的结果一把都是一个概率分布。
- 利用贝叶斯公式来进行概率的而计算
例如:
- 如果没有任何先验信息判断一个人是否会患心脏病:
计算过程
P(HD=Yes)=∑α∑βP(HD=Yes∣E=α,D=β)P(E=α,D=β)P(HD = Yes) = \sum_\alpha\sum_\beta P(HD = Yes|E = \alpha,D = \beta)P(E = \alpha,D = \beta)P(HD=Yes)=α∑β∑P(HD=Yes∣E=α,D=β)P(E=α,D=β)
=∑α∑βP(HD=Yes∣E=α,D=β)P(E=α)P(D=β)= \sum_\alpha\sum_\beta P(HD = Yes|E = \alpha,D = \beta)P(E = \alpha)P(D = \beta)=α∑β∑P(HD=Yes∣E=α,D=β)P(E=α)P(D=β)
=0.25∗0.7∗0.25+0.45∗0.7∗0.75+0.55∗0.3∗0.25+0.75∗0.3∗0.75=0.49 = 0.25*0.7*0.25+0.45*0.7*0.75+ 0.55*0.3*0.25+0.75*0.3*0.75 = 0.49=0.25∗0.7∗0.25+0.45∗0.7∗0.75+0.55∗0.3∗0.25+0.75∗0.3∗0.75=0.49
⇒P(HD=No)=1−P(HD=Yes)=0.51\Rightarrow P(HD = No) = 1-P(HD = Yes) = 0.51⇒P(HD=No)=1−P(HD=Yes)=0.51
-
计算过程
P(BP=高)=∑P(BP=高∣HD=γ)P(HD=γ)P(BP = 高) = \sum P(BP = 高|HD = \gamma)P(HD = \gamma)P(BP=高)=∑P(BP=高∣HD=γ)P(HD=γ)
=0.85∗0.49+0.2∗0.51=0.5185 = 0.85*0.49+0.2*0.51 = 0.5185=0.85∗0.49+0.2∗0.51=0.5185
所以患心脏病的后验概率是:
P(HD=Yes∣BP=高)=P(BP=高∣HD=Yes)P(HD=Yes)P(BP=高)P(HD = Yes|BP = 高) = \frac{P(BP = 高|HD = Yes)P(HD = Yes)}{P(BP = 高)}P(HD=Yes∣BP=高)=P(BP=高)P(BP=高∣HD=Yes)P(HD=Yes)
=0.85∗0.490.5185=0.8033 = \frac{0.85*0.49}{0.5185} = 0.8033=0.51850.85∗0.49=0.8033
P(HD=No∣BP=高)=0.1967P(HD = No|BP = 高) = 0.1967P(HD=No∣BP=高)=0.1967
-
计算方式
P(HD=Yes∣BP=高,D=健康,E=Yes)P(HD = Yes|BP = 高,D = 健康,E = Yes)P(HD=Yes∣BP=高,D=健康,E=Yes)
=[P(HD=Yes∣BP=高,D=健康,E=Yes)P(BP=高∣D=健康,E=Yes)]∗P(HD=Yes∣D=健康,E=Yes)= [\frac{P(HD = Yes|BP = 高,D = 健康,E = Yes)}{P(BP = 高|D = 健康,E = Yes)}] * P(HD = Yes|D = 健康,E = Yes)=[P(BP=高∣D=健康,E=Yes)P(HD=Yes∣BP=高,D=健康,E=Yes)]∗P(HD=Yes∣D=健康,E=Yes)
=P(BP=高∣HD=Yes)P(HD=Yes∣D=健康,E=Yes)∑γP(BP=高∣HD=γ)P(HD=γ∣D=健康,E=Yes)= \frac{P(BP = 高|HD = Yes)P(HD = Yes|D = 健康,E = Yes)}{\sum_\gamma P(BP = 高| HD = \gamma)P(HD = \gamma|D = 健康,E = Yes)}=∑γP(BP=高∣HD=γ)P(HD=γ∣D=健康,E=Yes)P(BP=高∣HD=Yes)P(HD=Yes∣D=健康,E=Yes)
=0.85∗0.250.85∗0.25+0.2∗0.75=0.5862= \frac{0.85*0.25}{0.85*0.25+0.2*0.75} = 0.5862=0.85∗0.25+0.2∗0.750.85∗0.25=0.5862
则P(HD=No∣BP=高,D=健康,E=Yes)=0.4138P(HD = No|BP = 高,D = 健康,E = Yes) = 0.4138P(HD=No∣BP=高,D=健康,E=Yes)=0.4138
BBNBBNBBN 的特点
- 提供了一种图模型来捕获先验知识,还可以对变量之间的因果关系进行编码
- 构建网络结构的过程虽然费时费力,但是结构确定了,容易添加新的变量
- 贝叶斯网络很适合处理不完全数据
- 数据和先验信息以概率方式结合,所以可以避免过拟合问题。
- 算法总结1---贝叶斯分类器
- 贝叶斯分类器--文本分类应用
- 社交平台舆情分析项目的总结和感想(SELENIUM,NLTK,贝叶斯分类器)(一)
- Bayes classifier(贝叶斯分类器)
- 神经网络与机器学习笔记——贝叶斯分类器
- Python实现贝叶斯分类器
- 贝叶斯分类器中离散属性与连续属性的讨论
- 贝叶斯分类器
- 贝叶斯分类器及EM算法
- 机器学习笔记(六)贝叶斯分类器
- 机器学习之用 Python 从零实现贝叶斯分类器
- 贝叶斯分类器
- 贝叶斯分类器Matlab
- matlab 实现贝叶斯分类器
- 西瓜书贝叶斯分类器(总结)
- 7.3 朴素贝叶斯分类器
- 贝叶斯分类器
- 贝叶斯分类器--原理流程应用
- 贝叶斯分类器
- 最简单的贝叶斯分类器MATLAB实现