一、朴素贝叶斯的学习和分类
- 假设训练集: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T=\{(x_1,y_1 ),(x_2,y_2 ),…,(x_N,y_N )\} T={(x1,y1),(x2,y2),…,(xN,yN)};由联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)产生。其中 x ∈ R n x∈R^n x∈Rn; y ∈ { c 1 , c 2 , … , c K } y∈\{c_1,c_2,…,c_K\} y∈{c1,c2,…,cK}。
- 朴素贝叶斯法通过训练数据集学习联合概率分布 P ( X , Y ) P(X,Y) P(X,Y);具体的是学习以下先验概率分布和条件概率分布: P ( Y = c k ) ; k = 1 , 2 , 3 … , K P(Y=c_k ) ; k=1,2,3…,K P(Y=ck);k=1,2,3…,K P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , … , X ( n ) = x ( n ) ∣ Y = c k ) ; k = 1 , 2 , 3 … , K P(X=x|Y=c_k )=P(X^{(1) }=x^{(1) },…,X^{(n) }=x^{(n) } |Y=c_k) ;k=1,2,3…,K P(X=x∣Y=ck)=P(X(1)=x(1),…,X(n)=x(n)∣Y=ck);k=1,2,3…,K最后在得到联合概率分布 P ( X , Y ) P(X,Y) P(X,Y)。
- 条件概率分布 P ( X = x ∣ Y = c k ) P(X=x|Y=c_k ) P(X=x∣Y=ck)有指数级个参数;假设 x ( ( j ) ) x^((j)) x((j))可取的值有 S j S_j Sj个, j = 1 , 2 , … , n , Y j=1,2,…,n,Y j=1,2,…,n,Y可取的值有 K K K个,则条件概率的参数个数为: K ∏ j = 1 n S j K∏_{j=1}^nS_j K∏j=1nSj .实际估计这么多个参数是不可能的。
- 注意:这个地方的参数个数可能相对比较难理解一点:
- 其实我们可以将联合概率分类和条件概率分布都理解为一个句子,句子的行表示 X X X,列表示 Y Y Y,中间存的就是概率即参数,这样矩阵的行数:就是 X X X可能的取值个数,列数:就是 Y Y Y可能取值的个数。例如:对于上面的条件概率分布,其对应的矩阵行数: ∏ j = 1 n S j ∏_{j=1}^nS_j ∏j=1nSj,列数: K K K。所有矩阵的元素个数即参数个数就是 K ∏ j = 1 n S j K∏_{j=1}^nS_j K∏j=1nSj。
- 而对于先验概率分布相对容易很多,我们可以将它理解为一个长度为
K
K
K的数组,数组中的元素就是该分布的参数(
K
K
K个),每个元素代表着
Y
Y
Y的一个取值的概率。
- 为了减少条件概率分布的参数个数,朴素贝叶斯法对条件概率分布做出了条件独立的假设。这个条件概率变为: P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , … , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X=x|Y=c_k )=P(X^{(1) }=x^{(1) },…,X^{(n) }=x^{(n) } |Y=c_k)=∏_{j=1}^nP(X^{(j) }=x^{(j) } |Y=c_k) P(X=x∣Y=ck)=P(X(1)=x(1),…,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)参数的个数由乘变成加,即: K ∑ j = 1 n S j K∑_{j=1}^nS_j K∑j=1nSj
- 朴素贝叶斯法学习的是联合概率分布,所以是生成模型。条件独立假设等于是说用于分类的特征在类别确定的条件下都是独立的。
- 朴素贝叶斯分类时:对于给定的输入 x x x,通过学习到的模型(其实就是矩阵)计算后验概率 P ( Y = c k ∣ X = x ) P(Y=c_k |X=x) P(Y=ck∣X=x),将后验概率最大的类别作为 x x x的类别。后验概率的公式: P ( Y = c k │ X = x ) = P ( X = x ∣ Y = c k ) ∗ P ( Y = c k ) ∑ K P ( X = x ∣ Y = c k ) ∗ P ( Y = c k ) P(Y=c_k│X=x)=\frac{P(X=x|Y=c_k )*P(Y=c_k )}{∑_KP(X=x|Y=c_k )*P(Y=c_k ) } P(Y=ck│X=x)=∑KP(X=x∣Y=ck)∗P(Y=ck)P(X=x∣Y=ck)∗P(Y=ck) P ( Y = c k │ X = x ) = P ( Y = c k ) ∗ ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ K P ( Y = c k ) ∗ ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) P(Y=c_k│X=x)=\frac{P(Y=c_k )*∏_jP(X^{(j) }=x^{(j) } |Y=c_k)}{∑_KP(Y=c_k )*∏_jP(X^{(j) }=x^{(j) } |Y=c_k)} P(Y=ck│X=x)=∑KP(Y=ck)∗∏jP(X(j)=x(j)∣Y=ck)P(Y=ck)∗∏jP(X(j)=x(j)∣Y=ck)观测上面公式我们发现,对所有的 c k c_k ck公式的分母时相同的,所以对判断大小没有影响,则分类公式可以改为: y = f ( x ) = max c k P ( Y = c k ) ∗ ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=f(x)=\max_{c_k }P(Y=c_k )*∏_j P(X^{(j) }=x^{(j) } |Y=c_k) y=f(x)=ckmaxP(Y=ck)∗j∏P(X(j)=x(j)∣Y=ck)
二、朴素贝叶斯的参数估计算法
1、极大似然估计:
- 朴素贝叶斯法的学习,其实质就是估计先验概率 P ( X , Y ) P(X,Y) P(X,Y)和条件概率分布 P ( X = x ∣ Y = c k ) P(X=x|Y=c_k ) P(X=x∣Y=ck),也就是确定: P ( X , Y ) P(X,Y) P(X,Y)对于数组中的元素和 P ( X = x ∣ Y = c k ) P(X=x|Y=c_k ) P(X=x∣Y=ck)对应矩阵中的元素。我们可以使用极大似然估计法来确定其中的参数。
- 补充以下最大似然估计的数学知识:由于这里是离散性的随机变量所以只讲离散型的情况:
- 若总体 X X X为离散型,其概率分布列为: P ( X = x ) = p ( x ; θ ) P(X=x)=p(x;θ) P(X=x)=p(x;θ);其中 θ θ θ为为未知参数。设 我们以有的样本为 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1,x2,…,xn),则所有样本同时发生的概率是: L ( θ ) = L ( x 1 , x 2 , … , x n ; θ ) = ∏ i = 1 n p ( x i , θ ) L(θ)=L(x_1,x_2,…,x_n;θ)=∏_{i=1}^np(x_i,θ) L(θ)=L(x1,x2,…,xn;θ)=i=1∏np(xi,θ)这个函数也叫似然函数。
- 最大似然估计法的基本思想是:我们估计出的 θ θ θ要使我们已经采用得到的样本发生概率最大化,即要使似然函数最大化。
- 这样我们求出似然函数的最大值点就是我们要的参数 θ θ θ,注意样本 ( x 1 , x 2 , … , x n ) (x_1,x_2,…,x_n) (x1,x2,…,xn)都是已知的
- 最后经过最大似然估计法,我们得到的先验概率为: P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) N ; k = 1 , 2 , … , K P(Y=c_k )=\frac{∑_{i=1}^N I(y_i=c_k)}{N} ; k=1,2,…,K P(Y=ck)=N∑i=1NI(yi=ck);k=1,2,…,K其实质就是用频率来估计概率。
- 条件概率 P ( X ( j ) = x ( j ) ∣ Y = c k ) P(X^{(j) }=x^{(j) } |Y=c_k) P(X(j)=x(j)∣Y=ck)的最大似然估计为:这里假设第 j j j个特征 X ( j ) X^{(j) } X(j)可取值的集合为: { a j 1 , a j 2 , … , a j S j } \{a_{j1},a_{j2},…,a_{jS_j }\} {aj1,aj2,…,ajSj}: P ( X ( j ) = a j l │ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l ; y i = c k ) ∑ i = 1 N I ( y i = c k ) P(X^{(j) }=a_{jl}│Y=c_k )=\frac{∑_{i=1}^N I(x_i^{(j) }=a_{jl};y_i=c_k)}{∑_{i=1}^NI(y_i=c_k)} P(X(j)=ajl│Y=ck)=∑i=1NI(yi=ck)∑i=1NI(xi(j)=ajl;yi=ck) x i ( j ) x_i^{(j) } xi(j)表示第 i i i个样本的第 j j j个特征。
- 当我我们有了样本,根据上面的共就可以估计出:先验概率分布 P ( Y = c k ) P(Y=c_k ) P(Y=ck)对应的列表的K个参数,和条件概率分布n个特征的 n n n个条件分布 P ( X ( j ) = a j l │ Y = c k ) P(X^{(j) }=a_jl│Y=c_k ) P(X(j)=ajl│Y=ck)对应的 n n n个矩阵的所有参数。分类是我们就可以通过查找这个矩阵和列表求出决策函数的值,从而得到预测。
2、贝叶斯估计:
- 根据决策函数: y = f ( x ) = max c k P ( Y = c k ) ∗ ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=f(x)=\max_{c_k }P(Y=c_k )*∏_j P(X^{(j) }=x^{(j) } |Y=c_k) y=f(x)=ckmaxP(Y=ck)∗j∏P(X(j)=x(j)∣Y=ck)我们发现,他们是连成的这会导致只有其中一个元素为 0 0 0最后得到的概率就会为 0 0 0,即使在其他元素比较大的情况下。特别是在 X ( j ) X^{(j) } X(j)中某个取值训练样本中没有是,这个问题尤为严重。
- 为了解决这个问题我们使用贝叶斯估计,条件概率的贝叶斯估计为: P λ ( X ( j ) = a j l │ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l ; y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ P_λ (X^{(j) }=a_{jl}│Y=c_k )=\frac{∑_{i=1}^NI(x_i^{(j) }=a_jl;y_i=c_k)+λ}{∑_{i=1}^NI(y_i=c_k)+S_j λ} Pλ(X(j)=ajl│Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl;yi=ck)+λ其中 λ ≥ 0 λ≥0 λ≥0, 条件概率的贝叶斯估计为: P ( Y = c k ) = ∑ i = 1 N I ( y i = c k ) + λ N + K λ P(Y=c_k )=\frac{∑_{i=1}^NI(y_i=c_k)+λ}{N+Kλ} P(Y=ck)=N+Kλ∑i=1NI(yi=ck)+λ