白癜风有治愈的吗 http://baidianfeng.39.net/qzzt/bdfnzhm/1.1朴素贝叶斯算法简介1.2概率基础复习1.概率定义
概率定义为一件事情发生的可能性
扔出一个硬币,结果头像朝上
P(X):取值在[0,1]
2.案例:判断女神对你的喜欢情况在讲这两个概率之前我们通过一个例子,来计算一些结果:
问题如下:
女神喜欢的概率?
职业是程序员并且体型匀称的概率?
在女神喜欢的条件下,职业是程序员的概率?
在女神喜欢的条件下,职业是程序员、体重超重的概率?
计算结果为:
P(喜欢)=4/7P(程序员,匀称)=1/7(联合概率)P(程序员
喜欢)=2/4=1/2(条件概率)P(程序员,超重
喜欢)=1/4
思考题:在小明是产品经理并且体重超重的情况下,如何计算小明被女神喜欢的概率?
即P(喜欢
产品,超重)=?
此时我们需要用到朴素贝叶斯进行求解,在讲解贝叶斯公式之前,首先复习一下联合概率、条件概率和相互独立的概念。
3.联合概率、条件概率与相互独立联合概率:包含多个条件,且所有条件同时成立的概率
记作:P(A,B)
条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
记作:P(A
B)
相互独立:如果P(A,B)=P(A)P(B),则称事件A与事件B相互独立。
4.贝叶斯公式4.1公式介绍4.2案例计算那么思考题就可以套用贝叶斯公式这样来解决:
P(喜欢
产品,超重)=P(产品,超重
喜欢)P(喜欢)/P(产品,超重)
上式中,
P(产品,超重
喜欢)和P(产品,超重)的结果均为0,导致无法计算结果。这是因为我们的样本量太少了,不具有代表性。
本来现实生活中,肯定是存在职业是产品经理并且体重超重的人的,P(产品,超重)不可能为0;
而且事件“职业是产品经理”和事件“体重超重”通常被认为是相互独立的事件,但是,根据我们有限的7个样本计算“P(产品,超重)=P(产品)P(超重)”不成立。
而朴素贝叶斯可以帮助我们解决这个问题。
朴素贝叶斯,简单理解,就是假定了特征与特征之间相互独立的贝叶斯公式。
也就是说,朴素贝叶斯,之所以朴素,就在于假定了特征与特征相互独立。
所以,思考题如果按照朴素贝叶斯的思路来解决,就可以是
P(产品,超重)=P(产品)*P(超重)=2/7*3/7=6/49p(产品,超重
喜欢)=P(产品
喜欢)*P(超重
喜欢)=1/2*1/4=1/8P(喜欢
产品,超重)=P(产品,超重
喜欢)P(喜欢)/P(产品,超重)=1/8*4/7/6/49=7/12
那么这个公式如果应用在文章分类的场景当中,我们可以这样看:
公式分为三个部分:
P(C):每个文档类别的概率(某文档类别数/总文档数量)
P(W│C):给定类别下特征(被预测文档中出现的词)的概率
Ni为该F1词在C类别所有文档中出现的次数
N为所属类别C下的文档所有词出现的次数和
计算方法:P(F1│C)=Ni/N(训练文档中去计算)
P(F1,F2,…)预测文档中每个词的概率
如果计算两个类别概率比较:
所以我们只要比较前面的大小就可以,得出谁的概率大
4.3文章分类计算需求:通过前四个训练样本(文章),判断第五篇文章,是否属于China类
计算结果
P(C
Chinese,Chinese,Chinese,Tokyo,Japan)--P(Chinese,Chinese,Chinese,Tokyo,Japan
C)*P(C)/P(Chinese,Chinese,Chinese,Tokyo,Japan)=P(Chinese
C)^3*P(Tokyo
C)*P(Japan
C)*P(C)/[P(Chinese)^3*P(Tokyo)*P(Japan)]#这个文章是需要计算是不是China类,是或者不是最后的分母值都相同:#首先计算是China类的概率:P(Chinese
C)=5/8P(Tokyo
C)=0/8P(Japan
C)=0/8#接着计算不是China类的概率:P(Chinese
C)=1/3P(Tokyo
C)=1/3P(Japan
C)=1/3
#这个文章是需要计算是不是China类:首先计算是China类的概率:0.P(Chinese
C)=5/8--6/14P(Tokyo
C)=0/8--1/14P(Japan
C)=0/8--1/14接着计算不是China类的概率:0.P(Chinese
C)=1/3--(经过拉普拉斯平滑系数处理)2/9P(Tokyo
C)=1/3--2/9P(Japan
C)=1/3--2/91.3案例:商品评论情感分析1.api介绍
sklearn.naive_bayes.MultinomialNB(alpha=1.0)
朴素贝叶斯分类
alpha:拉普拉斯平滑系数
2.商品评论情感分析2.1步骤分析1)获取数据
2)数据基本处理
2.1)取出内容列,对数据进行分析
2.2)判定评判标准
2.3)选择停用词
2.4)把内容处理,转化成标准格式
2.5)统计词的个数
2.6)准备训练集和测试集
3)模型训练
4)模型评估
2.2代码实现importpandasaspdimportnumpyasnpimportjiebaimportmatplotlib.pyplotaspltfromsklearn.feature_extraction.textimportCountVectorizerfromsklearn.naive_bayesimportMultinomialNB
1)获取数据
#加载数据data=pd.read_csv("./data/书籍评价.csv",encoding="gbk")data
2)数据基本处理
#2.1)取出内容列,对数据进行分析content=data["内容"]content.head()#2.2)判定评判标准--1好评;0差评data.loc[data.loc[:,评价]=="好评","评论标号"]=1#把好评修改为1data.loc[data.loc[:,评价]==差评,评论标号]=0#data.head()good_or_bad=data[评价].values#获取数据print(good_or_bad)#[好评好评好评好评差评差评差评差评差评好评差评差评差评]#2.3)选择停用词#加载停用词stopwords=[]withopen(./data/stopwords.txt,r,encoding=utf-8)asf:lines=f.readlines()print(lines)fortmpinlines:line=tmp.strip()print(line)stopwords.append(line)#stopwords#查看新产生列表#对停用词表进行去重stopwords=list(set(stopwords))#去重列表形式print(stopwords)#2.4)把“内容”处理,转化成标准格式