机器学习-6.朴素贝叶斯

Posted wyply115

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习-6.朴素贝叶斯相关的知识,希望对你有一定的参考价值。

1. 基础的概率知识

  • 条件概率和联合概率
  • 联合概率:包含多个条件,且所有条件同时成立的概率。
  1. 记作:P( A , B ) = P(A)P(B)
  • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
  1. 记作:P(A|B)
  2. 特性:P(A1,A2|B) = P(A1|B)P(A2|B)
  3. 公式成立条件:A1和A2两个事件或特征相互独立,不会互相影响的前提下。
  • 全概率公式:
    如果事件组B1,B2,… 满足
    1.B1,B2…两两互斥,即 Bi ∩ Bj = ∅ ,i≠j , i,j=1,2,…,且P(Bi)>0,i=1,2,…;
    2.B1∪B2∪…=Ω ,则称事件组 B1,B2,…是样本空间Ω的一个划分
    设 B1,B2,…是样本空间Ω的一个划分,A为任一事件,则:
    P ( A ) = ∑ i = 1 n P ( B i ) P ( A ∣ B i ) P(A)=\\sum_i=1^nP(B_i)P(A|B_i) P(A)=i=1nP(Bi)P(ABi)
  • 举例:
    有样本如下:

    求以下几个问题的概率:
  1. 女神喜欢的概率?
  2. 职业是程序员并且体型匀称的概率?
  3. 在女神喜欢的条件下,职业是程序员的概率?
  4. 在女神喜欢的条件下,职业是产品,体重是超重的概率?
    解答:第一题,4/7; 第二题:p(程序员,匀称)= (3/7) * (4/7) = 12/49 ;第三题:2/4=1/2;第四题:p(产品,超重 | 女神喜欢) = p(产品 | 女神喜欢)p(超重 | 女神喜欢) = (1/2) * (1/4) = 1/8

2. 朴素贝叶斯

  • 贝叶斯公式:
    P ( C ∣ W ) = P ( W ∣ C ) P ( C ) P ( W ) P(C|W) = \\fracP(W|C)P(C)P(W) P(CW)=P(W)P(WC)P(C)
  • 注:w为给定文档的特征值(频数统计等),C为文档类别
  • 公示可以理解为:
    P ( C ∣ F 1 , F 2... ) = P ( F 1 , F 2... ∣ C ) P ( C ) P ( F 1 , F 2... ) P(C|F1,F2...)=\\fracP(F1,F2...|C)P(C)P(F1,F2...) P(CF1,F2...)=P(F1,F2...)P(F1,F2...C)P(C)
  • 注:其中C可以是不同的类别。
  1. P( C ):每个文档类别的概率(某文档类别数量/总文档数量)
  2. P(W|C):给定类别下特征(被预测文档中出现的词)的概率。
    (1). 计算方法:P(F1|C) = Ni/N
    (2). Ni为该F1词在C类别所有文档中出现的次数
    (3). N为所属类别C下的文档所有词出现的次数和
  3. P(F1,F2…):预测文档中每个词的概率
  • 理论推导:
    根据贝叶斯定理和朴素(条件独立)的假设可知道:对一个分类问题,给定样本特征x(假设特征向量维度为m),样本属于类别y的概率是 :
    p ( y ∣ x ) = p ( x ∣ y ) p ( y ) p ( x ) p(y|x)=\\fracp(x|y)p(y)p(x) p(yx)=p(x)p(xy)p(y)
    由于条件独立,可根据全概率公示,和条件概率的特性展开得:
    p ( y = c k ∣ x ) = ∏ i = 1 m p ( x i ∣ y = c k ) p ( y = c k ) ∑ k p ( y = c k ) ∏ i = 1 m p ( x i ∣ y = c k ) p(y=c_k|x)=\\frac\\prod_i=1^mp(x^i|y=c_k)p(y=c_k)\\sum_kp(y=c_k)\\prod_i=1^mp(x^i|y=c_k) p(y=ckx)=kp(y=ck)i=1mp(xiy=ck)i=1mp(xiy=ck)p(y=ck)
    则朴素贝叶斯分类器可表述为:
    f ( x ) = a r g m a x y k p ( y = c k ∣ x ) = a r g m a x y k ∏ i = 1 m p ( x i ∣ y = c k ) p ( y = c k ) ∑ k p ( y = c k ) ∏ i = 1 m p ( x i ∣ y = c k ) f(x)=argmax_y_kp(y=c_k|x)=argmax_y_k\\frac\\prod_i=1^mp(x^i|y=c_k)p(y=c_k)\\sum_kp(y=c_k)\\prod_i=1^mp(x^i|y=c_k) f(x)=argmaxykp(y=ckx)=argmaxykkp(y=ck)i=1mp(xiy=ck)i=1mp(xiy=ck)p(y=ck)
    对于所有的yk,由全加符号知道,分母的值都是一样的。因此朴素贝叶斯分类器最终可表示为:
    f ( x ) = a r g m a x y k p ( y = c k ∣ x ) = a r g m a x y k ∏ i = 1 m p ( x i ∣ y = c k ) p ( y = c k ) f(x)=argmax_y_kp(y=c_k|x)=argmax_y_k\\prod_i=1^mp(x^i|y=c_k)p(y=c_k) f(x)=argmaxykp(y=ckx)=argmaxyki=1mp(xiy=ck)p(y=ck)
  • 示例:
  • 如上图,娱乐类计算结果为0,这样肯定是不合适的,因此引出拉普拉斯平滑系数。
  • 拉普拉斯平滑系数:
    P ( F 1 ∣ C ) = N i + a N + a m P(F1|C)=\\fracNi+aN+am P(F1C)=N+amNi+a
  • a为指定的系数,一般为1,m为训练文档中统计出的特征词个数。
    假设我们设定a=1则:科技=(8+1)/(100+1) * (20+1)/(100+1) + (63+1)/(100+1) + 30/90 ;娱乐类同理,不再赘述。
  • 朴素贝叶斯算法一般应用于对文章分类。
  • API:sklearn.naive_bayes.MultinomialNB
  • 示例:sklearn.dataset中获取新闻原始数据,对其分割数据集并进行预测分类。
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split


def naviebayes():
    '''
    朴素贝叶斯进行文本分类
    :return: None
    '''

    # 1.获取原始数据
    news = fetch_20newsgroups(subset="all")

    # 2.进行数据分割
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)

    # 3.特征抽取
    tf = TfidfVectorizer()
    #   以训练集当中的词的列表进行每篇文章的重要性统计
    x_train = tf.fit_transform(x_train)
    # print(tf.get_feature_names())
    #   以训练集的特征对测试集进行重要性统计
    x_test = tf.transform(x_test)

    # 4.进行朴素贝叶斯算法预测
    mlt = MultinomialNB(alpha=1.0)
    mlt.fit(x_train以上是关于机器学习-6.朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章

机器学习--朴素贝叶斯分类,以及拉普拉斯校准

机器学习面试题——朴素贝叶斯

R语言机器学习 | 6 朴素贝叶斯

机器学习实战教程:朴素贝叶斯实战篇之新浪新闻分类

机器学习-6.朴素贝叶斯

机器学习—朴素贝叶斯