很久以前看吴恩达老师的视频和西瓜书时用jupyter写的,今天想起来就把它转到这里,真的挺方便。
贝叶斯决策论:所有相关概率都已知的理想情形下,基于这些概率和误判损失来选择最优的类别标记。
决策目标:最小化分类错误率,即对每个样本选择能使后验概率 P( c | x )最大的类别 c 标记。现实中,将求后验概率P(c|x)的问题转变为求先验概率P©和条件概率P(x|c)。
P ( c ∣ x ) = P ( x , c ) P ( x ) = P ( c ) ⋅ P ( c ∣ x ) P ( x ) P(c∣x)=\frac {P(x,c)}{P(x)}=\frac {P(c)⋅P(c∣x)}{P(x)} P(c∣x)=P(x)P(x,c)=P(x)P(c)⋅P(c∣x)
主要困难在于类条件概率P( x | c )是所有属性的联合概率,难以从有限的数据集中估计。
P(x):用于归一化的“证据”因子,与类标记无关。
求P( c ):类先验概率,表达了样本空间中各类样本所占的比例。一般通过各类样本出现的频率来进行估计。
求P( x | c ):类条件概率,根据数据采样用极大似然估计来估计概率分布参数。 缺点:估计结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。
朴素贝叶斯分类器:假设所有属性相互独立,互不干扰,避免了联合概率这个坑,转化为每个属性上的概率的连乘积:
P ( c ∣ x ) = P ( x , c ) P ( x ) = P ( c ) ⋅ P ( c ∣ x ) P ( x ) ) = P ( c ) P ( x ) ⋅ ∏ i = 1 d P ( x i ∣ c ) P(c∣x)=\frac {P(x,c)}{P(x)}=\frac {P(c)⋅P(c∣x)}{P(x)})=\frac {P(c)}{P(x)}⋅∏^d_{i=1}P(x_i∣c) P(c∣x)=P(x)P(x,c)=P(x)P(c)⋅P(c∣x))=P(x)P(c)⋅∏i=1dP(xi∣c)
d 为属性数目, x i x_i xi为x在第i个属性上的取值。
最终的朴素贝叶斯分类器表达式为(去掉了 P(x)):
h n b ( x ) = a r g m a x P ( c ) ∏ i = 1 d P ( x i ∣ c ) h_{nb}(x)=argmax P(c)∏^d_{i=1}P(x_i∣c) hnb(x)=argmaxP(c)∏i=1dP(xi∣c)
计算 P ( x i ∣ c ) P(x_i∣c) P(xi∣c) : 令 Dc 表示数据集在类别 c 上的样本数, D c , x i D_{c,xi} Dc,xi 表示 Dc 中在第 i 个属性上取值为 xi 的样本组成的集合, 则条件概率 P( xi | c) 可估计为:
P ( c ) = ∣ D c ∣ D P(c) = \frac {|D_c|}{D} P(c)=D∣Dc∣
P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P(x_i∣c) = \frac {|D_{c,xi}|}{|D_c|} P(xi∣c)=∣Dc∣∣Dc,xi∣
若是连续属性,用概率密度函数,假定其服从二维高斯分布。
拉普拉斯修正:为了避免训练集样本不充分二导致 D c , x i D_{c,xi} Dc,xi为0导致 P ( x i ∣ c ) P(x_i∣c) P(xi∣c)从而 P ( c ∣ x ) P(c∣x) P(c∣x)为0,对概率估计值进行“平滑”处理。
P ( c ) = ∣ D c ∣ + 1 D + N P(c) = \frac {|D_c|+1}{D+N} P(c)=D+N∣Dc∣+1
P ( x i ∣ c ) = ∣ D c , x i ∣ + 1 ∣ D c ∣ + N i P(x_i∣c) = \frac {|D_{c,xi}|+1}{|D_c|+N_i} P(xi∣c)=∣Dc∣+Ni∣Dc,xi∣+1
半朴素贝叶斯分类器:对属性条件进行了一定程度的放松。即适当考虑一部分属性之间的比较强的相互依赖性。
独依赖估计(OBE):假设每个属性在类别之外最多依赖一个其他属性
P ( c ∣ x ) ∝ P ( c ) Π i = 1 d P ( x i ∣ c , p a i ) P(c|x) \propto P(c)\Pi^d_{i=1}P(x_i|c,pai) P(c∣x)∝P(c)Πi=1dP(xi∣c,pai)
pai 为属性 x i x_i xi所依赖的属性,于是问题就变成了如何确定每个属性的父属性。
确定父属性:
1.超父。假定所有样本都依赖于同一个属性,用交叉验证的方法来选出 超父 。叫 SPODE方法。图 b 中,X1 是超父属性。
2.TAN:最大带全生成树为基础。
3.AODE:对每个属性构建SPODE,并将结果集成起来作为最终结果。
from IPython.display import Image
libo="C:/Users/libo/Desktop/machine learning/西瓜书/西瓜书图片/"
Image(filename = libo + "8.png", width=500, height=60)
当样本属性相关性未知时求解 P( x | c ) :采用贝叶斯网。
贝叶斯网:它借助有向图来刻画属性之间的依赖关系,并使用条件概率表来描述属性的联合概率分布。能对属性之间的依赖关系进行计算和评估,以找出一个最佳的分类模型。
一个贝叶斯网由结构 G 和参数 O 两部分构成,G 是个有向无环图,每个节点是一个属性,每一条边代表一个直接依赖关系;参数 O 包含了每个属性的条件概率表。
libo="C:/Users/libo/Desktop/machine learning/西瓜书/西瓜书图片/"
Image(filename = libo + "9.png", width=500, height=60)
贝叶斯网假设每个属性与它的非后裔属性独立,则对于属性x1, x2, …, xd的联合概率分布定义为:
P B ( x 1 , x 2 , ⋯ , x d ) = ∏ i = 1 d P B ( x i ∣ π i ) = ∏ i = 1 d θ x i ∣ π i P_B(x_1,x_2,\cdots ,x_d)=∏^d_{i=1}P_B(x_i| \pi_i)=∏^d_{i=1}\theta_{x_i|\pi_i} PB(x1,x2,⋯,xd)=∏i=1dPB(xi∣πi)=∏i=1dθxi∣πi
即属性的联合概率分布是每个具体属性在其父结点集下的条件概率的乘积.
若贝叶斯网已知,则只需要通过对训练样本计数,估计出每个节点的条件概率即可。
难点现在变成了所有可能的网络结构空间搜索最优贝叶斯网结构:NP难问题。定义一个评分函数来评价贝叶斯网与训练数据的契合程度,以此寻找结构最优的贝叶斯网。
评价函数: s ( B ∣ D ) = f ( θ ) ∣ B ∣ − ∑ i = 1 m l o g P B ( x i ) s(B|D)=f(\theta)|B| - \sum_{i=1}^mlogP_B(x_i) s(B∣D)=f(θ)∣B∣−∑i=1mlogPB(xi)
|B|是贝叶斯网的参数个数, f ( θ ) f(\theta) f(θ)表示描述每个参数所需的字节数。
第一种是贪心法,例如从某个网络结构出发,每次调整一条边,直到评分函数值不再降低为止
第二种是通过给网络结构施加约束来削减搜索空间,例如将网络结构限定为树形结构等。
贝叶斯网的推断:在训练好贝叶斯网后就可以用来回答“查询”,即通过一些属性变量的观测值来推测其它属性变量的取值。贝叶斯网的近似推断常使用吉布斯采样来完成:
比如,对已知的观察属性 E 的取值 e ,我们要判断在属性 Q 上会出现取值 q 的概率是多少,即求 P( q | e ) 的值,运用贝叶斯网 + 吉布斯采样的推断过程可以总结为以下几步:
a)对 Q 进行随机取值获得属性 Q 上的初始状态 q0
b)将当前的 Q 上的取值与 e 结合,并使用贝叶斯网去推断下一时刻的 Q 上取值为多少
c)判断新生成的 Q 与我们要预测的 q 是否一致,一致则计数器 n 加一
c)重复步骤 b)- c)T次,通过计算 n / T 我们可以近似得到 P( q | e ) 的值
训练样本不完整时的处理方法:不完整指的是因为目前样本的有限或残缺而导致存在未被观测的变量。
EM算法来解决。
libo="C:/Users/libo/Desktop/machine learning/西瓜书/西瓜书图片/"
Image(filename = libo + "10.png", width=500, height=60)
EM算法要解决的问题是: (1)求出每一个样本属于哪个分布 (2)求出每一个分布对应的参数
(1)初始化参数:先初始化男生身高的正态分布的参数:如均值=1.7,方差=0.1
(2)计算每一个人更可能属于男生分布或者女生分布;
(3)通过分为男生的n个人来重新估计男生身高分布的参数(最大似然估计),女生分布也按照相同的方式估计出来,更新分布。
(4)这时候两个分布的概率也变了,然后重复步骤(1)至(3),直到参数不发生变化为止。
EM(Expectation-Maximization)算法是常用的估计参数隐变量的利器,它是一种迭代式的方法,其基本思想就和它的名字一样分为两个步骤,第一步(E步)求隐变量的期望;第二步(M步)寻找参数最大似然估计;不断重复第一、第二步直到收敛到局部最优解。
- 基本知识
1)“判别式模型”(discriminative models)直接通过建模P(c|x)来预测类别c的模型就是判别式模型,主要算法:决策树、BP神经网络、支持向量机等
2)“生成式模型”(generative models)先对联合概率分布P(x,c)建模,然后再由此获得P(c|x)的模型就是生成式模型,主要算法:朴素贝叶斯、贝叶斯网络、马尔可夫随机场
3)大数定律(law of large numbers)这是一种描述当试验次数很大时所呈现的概率性质的定律。通俗地说,这个定理就是,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。偶然中包含着某种必然。
4)极大似然估计(Maximum Likelihood Estimation)根据数据采样来估计概率分布参数的经典方法,比如对参数 t 进行极大似然估计,就是试图在 t 所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。
5)吉布斯采样(Gibbs sampling)吉布斯采样是一种随机采样方法,首先根据已知初始值 e 产生一个初始点 q0,然后进行 T 次采样,每次根据第 t-1 次的结果 q(t-1) 生成一个新的第 t 次的采样样本 qt,每次采样后与查询变量 q 进行比对,一致则计数器 n 加一。T 次采样结束后, n 除以 T 的值可作为后验概率 P( q | e ) 的近似估算
6)EM(Expectation-Maximization)算法EM算法使用两个步骤交替计算:第一步是期望(E)步,利用当前估计的参数值来计算对数似然的期望值;第二步是最大化(M)步,寻找能使 E 步产生的似然期望最大化的参数值。然后,新得到的参数值重新被用于 E 步并开始下一轮的计算,直到收敛到局部最优解。
- 总结
1)贝叶斯分类器是基于贝叶斯决策论的基础上构建的,目的是对每个样本 x,选择能使后验概率 P( c | x )最大的类别标记
2)现实中 P( c | x ) 较难获得,所以将求后验概率 P( c | x ) 的问题转变为求先验概率 P( c ) 和条件概率 P( x | c )
3)根据大数定律,P( c ) 可通过各类样本出现的频率来进行估计
4)在完全遵守“属性条件独立性假设”时,类条件概率 P( x | c ) 可通过每个属性单独的条件概率的乘积得到
5)在适当放松“属性条件独立性假设”时,类条件概率 P( x | c ) 可通过每个属性在其父结点下的条件概率的乘积得到
6)在不清楚属性的条件独立性情况时,贝叶斯网是一个有效的算法,能对属性之间的依赖关系进行计算和评估,以找出一个最佳的分类模型
7)贝叶斯网学习的首要任务就是根据训练数据集来找出结构最“恰当”的贝叶斯网结构
8)“平滑”处理是解决零这个特殊值对结果不利影响的一个好策略
9)当遇到不完整的训练样本时,可通过使用EM算法对模型参数进行估计来解决