概率基础,朴素贝叶斯算法,朴素贝叶斯在sklean下的用法

目录

1.概率基础

2.联合概率和条件概率

3.基本概率案例

4.朴素贝叶斯-贝叶斯公式

5.朴素贝叶斯实例

6.sklean下使用朴素贝叶斯算法

参考文档


1.概率基础

①由于事件的频数总是小于或等于试验的次数,所以频率在0~1之间,从而任何事件的概率在0~1之间,即

0≤P(A)≤1.

②每次试验中,必然事件一定发生,因此它的频率为1,从而必然事件的概率为1,如,在掷骰子试验中,由于出现的点数最大是6,因此P(E)=1

③每次试验中,不可能事件一定不出现,因此他的频率为0,从而不可能事件的概率为0.如,在掷骰子试验中,P(F)=0

④当事件A与B互斥时,A∪B发生的频数等于A发生的频数与B发生的频数之和,从而A∪B的频率Fn(A∪B)=Fn(A)+Fn(B)

由此得到概率的加法公式: P(A∪B)=P(A)+P(B)

⑤特别的,若事件B与事件A互为对立事件,则A∪B为必然事件,P(A∪B)=1.在由加法公式得到P(A)=1-P(B)

⑥若某事件发生当且仅当事情A发生或B发生,则称此事件为事件A与B的并事件,记作(A∪B)

⑦若某事件发生当且仅当事件A发生且B发生,则称此事件为事件A与B的交事件,记作(A∩B)

⑧若A∩B为不可能事件,A∪B为必然事件,那么称事件B与事件A互为对立事件,其含义是:事件A与事件B在任何一次实验中有且仅有一个发生。

 

2.联合概率和条件概率

联合概率:包含多个条件,且所有条件同时成立的概率

记作:P(A,B)

又P(A,B)=P(A)P(B)

条件概率:事件A在事件B已经发生的条件下发生的概率

记作:P(A|B)

又称为B条件下A的概率

特性:P(A1,A2|B)=P(A1|B)P(A2|B)  

注意:A1和A2是独立事件

 

3.基本概率案例

有下列一张表

 

概率基础,朴素贝叶斯算法,朴素贝叶斯在sklean下的用法_第1张图片

存在这么几个问题:

1.被女神喜欢的概率

P(A)=4/7

2.职业是程序员并且体现匀称的概率

联合概率

是程序员的概率:3/7

体重是匀称的概率:4/7

P(匀称,程序员)=3/7 * 4/7=12/49

3.在女神喜欢的条件下,职业是程序员的概率

条件概率

女神已经喜欢,所以概率是1

女神喜欢中的人中满足职业是程序员的有2,

故:p(程序员|女神喜欢)=2/4=1/2

4.在女神喜欢的条件下,职业是产品,体重是匀称的概率

条件概率

女神已经喜欢,所以概率是1

女神喜欢中的人中满足职业是产品的概率为2/4

女神喜欢中的人中满足体重为匀称的概率为3/4

故:p(产品,匀称|女神喜欢)=p(产品|女神喜欢)*p(匀称|女神喜欢)=2/4 * 3/4 = 3/8

 

4.朴素贝叶斯-贝叶斯公式

公式:

概率基础,朴素贝叶斯算法,朴素贝叶斯在sklean下的用法_第2张图片

W为特征数量,C为目标类别

公式可转化为:

用文本分类的例子来理解这个公式,假设有10篇文章,3篇情感类,3篇新闻类,4篇科学类;我们通过文本特征提取将这十篇文章进行特征值化,将文本数据转换为特征值,那么就用若干个特征值,我们的目的就是通过对特征值进行建模来预测文本类别。

在这里,C代表文章类别

  • P(C)代表每个文档类别的概率=(某文章类别数/总文章数)

W代表特征数,通过对这十篇文章进行文本特征提取,我们获得形如“结婚”,“恋爱”,“报告”,“飞机”,“宇航员”,“某女士”的若干特征值。那么P(W)代表一篇一组特征值(被预测文档中出现的词)的概率,又可写为

  • P(W)=P(F1,F2,F3...FN)

那么P(W|C)则为给定文档类别下特征的概率,即C条件下W的概率,为条件概率。

根据条件概率的变形公式我们知道

  • P(F1,F2..FN|C)=P(F1|C) * P(F2|C) ... P(FN|C)

而P(F1)=Ni/N

  • Ni为该F1词在C类别文档中出现的次数
  • N为在所有文档出现的次数

又因为P(F1,F2..FN)是都需要被除的

  • P(C1|F1,F2..FN)=P(F1,F2..FN|C1)*P(C1) / P(F1,F2..FN)
  • P(C2|F1,F2..FN)=P(F1,F2..FN|C2)*P(C2) / P(F1,F2..FN)

所以 P(F1,F2..FN)当计算文章类别时可省略,即

  • P(C|F1,F2..FN)=P(F1,F2..FN|C)*P(C)

 

5.朴素贝叶斯实例

如图所示,我们需要计算某篇出现影院,支付宝,云计算的文章属于科技、娱乐的类别的概率

概率基础,朴素贝叶斯算法,朴素贝叶斯在sklean下的用法_第3张图片

根据贝叶斯公式P(C|F1,F2..FN)=P(F1,F2..FN|C)*P(C),所以

  • P(科技|影院,支付宝,云计算)=P(影院)*P(支付宝)*P(云计算)*P(科技)=8/100 * 20/100 * 63/100 * 30/90 = 0.00456109
  • P(娱乐|影院,支付宝,云计算)=P(影院)*P(支付宝)*P(云计算)*P(娱乐)=56/121 * 15/121 * 0/121 * 60/90 = 0

 

6.sklean下使用朴素贝叶斯算法

API:sklearn.naive_bayes.MultinomialNB(alpha=1.0)

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.datasets import fetch_20newsgroups

def bayes():
    news = fetch_20newsgroups(subset="all")

    #训练集划分
    x_train,x_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25)

    #文本特征抽取
    tf = TfidfVectorizer()
    #估计器:从训练集中抽取文本特征
    tf.fit(x_train)
    #转换器:文本特征值化
    x_train = tf.transform(x_train)
    x_test = tf.transform(x_test)

    #调用朴素贝叶斯算法进行预估,P(C|F1,F2..FN)=P(F1,F2..FN|C)*P(C)
    #计算单个样本的特征值在每个分类下的概率
    #平滑系数为1(排除特征值为0的干扰)
    mlt=MultinomialNB(alpha=1.0)
    mlt.fit(x_train,y_train)

    predict=mlt.predict(x_test)
    #估算出的目标值与实际目标值对比,满足即预测正确,统计总的正确率
    score=mlt.score(x_test,y_test)

    print("预测的文章类别",predict)
    print("精确性:",score)

if __name__ =="__main__":
    bayes()

 

7.朴素贝叶斯优缺点

优点:

  • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率
  • 对缺失数据不太敏感,算法也比较简单,常用于文本分类
  • 分类准确度高,速度快

缺点:

  • 由于使用了样本数学独立性假设,所以如果样本属性有关联时其效果不好

 

参考文档

概率基本性质:https://baike.baidu.com/item/%E6%A6%82%E7%8E%87%E5%9F%BA%E6%9C%AC%E6%80%A7%E8%B4%A8/3048505

拉普拉斯平滑系数:https://blog.csdn.net/qq_39037383/article/details/89363141

解决fetch_20newsgroups下载数据很慢问题:https://rumenz.com/rumenbiji/fetch_20newsgroups-download-slow.html

你可能感兴趣的:(机器学习,概率基础,朴素贝叶斯算法,朴素贝叶斯,sklean)