贝叶斯算法

贝叶斯算法:

  在大学的时候我们都学过贝叶斯公式:

    P(B | A) = P(AB) / P(A) = P(A | B)P(B) / P(A)

   表明了,在已知A,B共同发生的概率以及事件A发生的概率, 则可以知道在事件A发生的情况下发生事件B的概率。

   然后现在我们就可以将这个公式进行应用到工业中去,假设我们现在有很多的训练数据,这个时候训练数据里面有A、B两个事件将要发生,而A、B分别由各种特征所构成。这个时候我们可以算出来在A事件中每个特征发生的概率,以及在B事件中每个特征所发生的的概率,例如在A事件中特征v所占的概率计算公式:在构成能发生A的事件的所有数据S中特征v的个数占S的数据的概率,p_v = v_nums / S_nums。在整个训练数据中,我们可以求出来P(A) = A_nums / all_nums。其中all_nums表示所有数据的数量,A_nums,表示事件A所占的数量. (1)

   当我们算出来了每个事件中,特征所占的比例,这个时候来个数据T由各种特征所构成,这个时候求这个数据T属于哪个事件,可以通过公式:

    P( (A or B) | T) = P((A or B)T) / P(T) = P(T | (A or B) ) *P((A or B)) / P(T) 

  这个时候要判断数据是A or B,因为分母P(T)是一样的,所以我们只需要求解到分子的大小,哪个概率大则是哪个。

  这个时候就用到了朴素这个概念了,因为数据是由各种特征所构成的,所以朴素贝叶斯假设每个特征之间是相互独立的,所以由概率公式知道:

    若a,b两个事件相互独立,则P(ab)  = P(a) * P(b)

  所以T可以由t1,t2,t3...tn个特征值构成,所以P(T | (A or B)) =  P((t1, t2, t3...tn) | (A or B)) = P(t1| (A or B)) *P(t2 | (A or B))...*P(tn | (A or B)),所以在A的概率为:P(T | A) = P(t1 | A ) * P(t2 | A ) *P(t3 | A )... *P(tn | A)*P(A) (同理P(T | B))因为这个等式相当于y = x是一个单调递增的函数,又因为ln也是一个递增的函数,而且ln(a * b) = ln a + ln b,两个递增函数相互组合仍然是递增,所以我们我们可以对比两个概率在对数上面的大小,所以在事件A上面的概率为:ln(P(T | A)) = sum(ln(tn | A)) + ln(P(A))(同理T在事件B上面的概率(注意:B的概率,若是二分类则是(1 -  P(A), 否则另算))),这个时候我们在我们可以判断数据T属于事件A or B.(2)

其中:

(1)就是需要训练的部分,算出来三个值,分别为:在事件A中每个特征的概率,在事件B中每个特征的概率,以及事件A所发生的概率。

(2)就是预测的部分,其中 运用到了朴素的概念,假设每个特征之间是相互独立的。

 

posted @ 2020-07-28 17:06  瞬_冷  阅读(408)  评论(0)    收藏  举报