朴素贝叶斯算法-推导总结

  从今天起,总结机器学习算法,先从最简单的,朴素的贝叶斯算法开始,为什么最近又开始总结这些机器学习算法那?原因很简单,这些算法很久之前都是推导过的,但是没有总结,很快就忘记了,复习也不好复习,面试一问算法题目还好,到了数学推导,就磕磕绊绊,然后被各种diss,任重而道远。

相关知识:

(1)条件概率:

P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B) = \frac{P(AB)}{P(B)} P(AB)=P(B)P(AB)

(2)很显然可以得到:

P ( A B ) = P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(AB)=P(A|B)P(B)=P(B|A)P(A) P(AB)=P(AB)P(B)=P(BA)P(A)

(3)继续推导可以得到:

P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A) = \frac{P(AB)}{P(A)} P(BA)=P(A)P(AB)

(4)全概率公式(这里只给公式,先前条件就不提了):

P ( A ) = ∑ i = 1 n P ( B i ) P ( A ∣ B i ) P(A) = \sum_{i=1}^n P({B_i})P(A|{B_i}) P(A)=i=1nP(Bi)P(ABi)

推导过程:

有了上面这几个公式,基本就可以满足要求了,下面,开始推导朴素的贝叶斯分类器,主要参考李航的《统计学习方法》中的过程。先,提出问题,现在给出一堆数据或者是训练集:

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)

解释:x表示特征(可能有多个特征),y表示标签(可能是多个标签哦)。

朴素贝叶斯算法对条件概率分布做了条件独立性的假设,所以具体的条件独立性假设是:

公式1 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})=\prod _{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k) P(X=xY=ck)=P(X(1)=x(1),...,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)

解释: c k c_k ck 表示,标签Y,中的一个值, X ( 1 ) = x ( 1 ) , . . . , X ( n ) = x ( n ) {X^{(1)}=x^{(1)}, ..., X^{(n)}=x^{(n)}} X(1)=x(1),...,X(n)=x(n) 表示一组向量,可能有n个特征,为什么连乘?因为假设相互独立。

公式2 P ( Y = c k ∣ X = x ) = P ( Y = c k ⋂ X = x ) P ( 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(Y=c_k\bigcap X=x)}{P(X=x)}=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum_{k} P( X=x| Y=c_k)P(Y=c_k)} P(Y=ckX=x)=P(X=x)P(Y=ckX=x)=kP(X=xY=ck)P(Y=ck)P(X=xY=ck)P(Y=ck)

解释: P ( X = x ) P(X=x) P(X=x) 这个值要通过全概率公式来求,即 ∑ k P ( X = x ∣ Y = c k ) P ( Y = c k ) \sum_{k} P( X=x| Y=c_k)P(Y=c_k) kP(X=xY=ck)P(Y=ck)

现在,把公式1带入公式2得:
公式3 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) \prod _{j} P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k} P(Y=c_k) \prod _{j} P(X^{(j)}=x^{(j)}|Y=c_k)} P(Y=ckX=x)=kP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck)
其中 k = 1 , 2 , 3... , K k=1,2,3...,K k=1,2,3...,K

解释:现在就得出了朴素贝叶斯法分类的基本公式了。

朴素贝叶斯法分类器可表示为:

公式4 y = f ( x ) = a r g m a x c k 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 ) y=f(x)=argmax _{c_k}\frac{P(Y=c_k) \prod _{j} P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum_{k} P(Y=c_k) \prod _{j} P(X^{(j)}=x^{(j)}|Y=c_k)} y=f(x)=argmaxckkP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck)

解释:这个公式的意思就是,在所有的标签中,选择一个最大的后验概率那个标签,作为本次分类的结果。很显然,在最大化后验概率的时,公式4中的分母是相同的,所以可以进一步化简得到:

公式5 y = f ( x ) = a r g m a x c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=f(x)=argmax _{c_k}P(Y=c_k) \prod _{j} P(X^{(j)}=x^{(j)}|Y=c_k) y=f(x)=argmaxckP(Y=ck)jP(X(j)=x(j)Y=ck)

算法优缺点:

朴素贝叶斯分类算法,监督学习算法,而且是生成模型,优缺点主要包括(主要参考其他博文,已经给出链接):

(1)算法优点:
  1. 对大数量训练和查询时具有较高的速度。即使,使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已。(适合大量数据)
  2. 支持增量式运算。即可以实时的对新增的样本进行训练。
  3. 朴素贝叶斯对结果解释容易理解
  4. 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
  5. 所需估计的参数很少,对缺失数据不太敏感,算法也比较简单
(2)算法缺点:
  1. 由于使用了样本属性独立性的假设,所以如果样本属性有关联时其效果不好。
  2. 理论上,模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的(可以考虑用聚类算法先将相关性较大的属性聚类),这给模型的正确分类带来了一定影响。
  3. 在属性个数比较多或者属性之间相关性较大时,模型的分类效率比不上决策树模型。而在属性相关性较小时,贝叶斯模型的性能最为良好。
  4. 需要知道先验概率。
  5. 分类决策存在错误率。

应用场景:

文本分类、欺诈检测、垃圾邮件分类中使用较多。

声明: 总结学习,有问题可以批评指正,大神可以略过哦。

引用参考:
[1]:《统计学习方法》李航著
[2]:blog.csdn.net/zrh_CSDN/article/details/81007851

你可能感兴趣的:(机器学习)