机器学习-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) = \frac{P(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...)=\frac{P(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)=\frac{p(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_{k}p(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_k}p(y=c_k|x)=argmax_{y_k}\frac{\prod_{i=1}^mp(x^i|y=c_k)p(y=c_k)}{\sum_{k}p(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_k}p(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)=\frac{Ni+a}{N+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, y_train)
    y_predict = mlt.predict(x_test) # 预测出的类别
    print("准确率:", mlt.score(x_test, y_test))

    return None


if __name__ == '__main__':
    naviebayes()
  • 输出结果为(动态划分的数据集每次结果会不一样):准确率: 0.8484719864176571
  • 朴素贝叶斯算法不需要调参
  • 优点:
    1. 其模型发源于古典数学理论,有稳定的分类效率。
    2. 对缺失数据不太敏感,算法比较简单,常用于文本分类。
    3. 分类准确度高,速度块
  • 缺点:
    1. 由于使用了样本属性独立的假设,因此如果样本属性有关联时效果不好。

3. 模型评估标准

  • 评估标准需要根据实际场景去选择。
  • 常用的就是准确率。
  • 其余还有,精确率(precision)和召回率(recall),F1-score。如下图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 分类模型评估API:sklearn.metrics.classification_report
    在这里插入图片描述

4. 模型选择与调优

  • 交叉验证与网格搜索
  • 网格搜索:通常情况下,有很多参数是需要手动指定的(如k-近邻中的k值),这种叫做超参数,但是手动过程繁琐,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证进行评估。最后选出最优参数组合建立模型。
  • 超参数搜索-网格搜索API:sklearn.model_selection.GridSearchCV
    在这里插入图片描述
  • 交叉验证:为了让评估的模型更加准确可信。
    所有数据分成n等份,如下图所示分成4等份就是4折交叉验证。求出每一个的准确率,最后计算平均值。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值