目录
1.概率基础
2.联合概率和条件概率
3.基本概率案例
4.朴素贝叶斯-贝叶斯公式
5.朴素贝叶斯实例
6.sklean下使用朴素贝叶斯算法
参考文档
①由于事件的频数总是小于或等于试验的次数,所以频率在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在任何一次实验中有且仅有一个发生。
联合概率:包含多个条件,且所有条件同时成立的概率
记作: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是独立事件
有下列一张表
存在这么几个问题:
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
公式:
W为特征数量,C为目标类别
公式可转化为:
用文本分类的例子来理解这个公式,假设有10篇文章,3篇情感类,3篇新闻类,4篇科学类;我们通过文本特征提取将这十篇文章进行特征值化,将文本数据转换为特征值,那么就用若干个特征值,我们的目的就是通过对特征值进行建模来预测文本类别。
在这里,C代表文章类别
W代表特征数,通过对这十篇文章进行文本特征提取,我们获得形如“结婚”,“恋爱”,“报告”,“飞机”,“宇航员”,“某女士”的若干特征值。那么P(W)代表一篇一组特征值(被预测文档中出现的词)的概率,又可写为
那么P(W|C)则为给定文档类别下特征的概率,即C条件下W的概率,为条件概率。
根据条件概率的变形公式我们知道
而P(F1)=Ni/N
又因为P(F1,F2..FN)是都需要被除的
所以 P(F1,F2..FN)当计算文章类别时可省略,即
如图所示,我们需要计算某篇出现影院,支付宝,云计算的文章属于科技、娱乐的类别的概率
根据贝叶斯公式P(C|F1,F2..FN)=P(F1,F2..FN|C)*P(C),所以
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()
优点:
缺点:
概率基本性质: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