详解基于朴素贝叶斯的情感分析及Python实现
相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要⼤量标注的词典,但是需要⼤量标记的数据,⽐如:
还是下⾯这句话,如果它的标签是:
python怎么读取excel的数据
服务质量 - 中 (共有三个级别,好、中、差)
╮(╯-╰)╭,其是机器学习,通过⼤量已经标签的数据训练出⼀个模型,
然后你在输⼊⼀条评论,来判断标签级别
宁馨的点评国庆活动,⽤62开头的信⽤卡可以6.2元买⼀个印有银联卡标记的冰淇淋,
有⾹草,巧克⼒和抹茶三种⼝味可选,我选的是⾹草⼝味,味道很浓郁。
另外任意消费都可以10元买两个马卡龙,个头虽不是很⼤,但很好吃,不是很甜的那种,不会觉得腻。
标签:服务质量 - 中
朴素贝叶斯
1、贝叶斯定理
假设对于某个数据集,随机变量C表⽰样本为C类的概率,F1表⽰测试样本某特征出现的概率,套⽤基本贝叶斯公式,则如下所⽰:
上式表⽰对于某个样本,特征F1出现时,该样本被分为C类的条件概率。那么如何⽤上式来对测试样本分类呢?
举例来说,有个测试样本,其特征F1出现了(F1=1),那么就计算P(C=0|F1=1)和P(C=1|F1=1)的概率值。前者⼤,则该样本被认为是0类;后者⼤,则分为1类。
对该公⽰,有⼏个概念需要熟知:
先验概率(Prior)。P(C)是C的先验概率,可以从已有的训练集中计算分为C类的样本占所有样本的⽐重得出。
证据(Evidence)。即上式P(F1),表⽰对于某测试样本,特征F1出现的概率。同样可以从训练集中F1特征对应样本所占总样本的⽐例得出。
似然(likelihood)。即上式P(F1|C),表⽰如果知道⼀个样本分为C类,那么他的特征为F1的概率是多少。
对于多个特征⽽⾔,贝叶斯公式可以扩展如下:
分⼦中存在⼀⼤串似然值。当特征很多的时候,这些似然值的计算是极其痛苦的。现在该怎么办?
2、朴素的概念
为了简化计算,朴素贝叶斯算法做了⼀假设:“朴素的认为各个特征相互独⽴”。这么⼀来,上式的分⼦就简化成了:
P(C)P(F1|C)P(F2|C)...P(Fn|C)。
这样简化过后,计算起来就⽅便多了。
这个假设是认为各个特征之间是独⽴的,看上去确实是个很不科学的假设。因为很多情况下,各个特征之间是紧密联系的。然⽽在朴素贝叶斯的⼤量应⽤实践实际表明其⼯作的相当好。
其次,由于朴素贝叶斯的⼯作原理是计算P(C=Fn)和P(C=Fn),并取最⼤值的那个作为其分类。⽽⼆者的分母是⼀模⼀样的。因此,我们⼜可以省略分母计算,从⽽进⼀步简化计算过程。
另外,贝叶斯公式推导能够成⽴有个重要前期,就是各个证据(evidence)不能为0。也即对于任意特征Fx,P(Fx)不能为0。⽽显⽰某些特征未出现在测试集中的情况是可以发⽣的。因此实现上通常要做⼀些⼩的处理,例如把所有计数进⾏+1(加法平滑 additive smoothing,⼜叫拉普拉斯平滑 Laplace smothing)。⽽如果通过增加⼀个⼤于 0 的可调参数 alpha 进⾏平滑,就叫 Lidstone 平滑。
基于朴素贝叶斯的情感分类
原始数据集,只抽了10条
读数据
读取excel⽂件,⽤的pandas库的DataFrame的数据类型
分词
对每个评论分词,分词的同时去除停⽤词,得到如下词表
每个列表是与评论⼀⼀对应的
统计
这⾥统计什么呢?统计两种数据
1. 评论级别的次数
这⾥有三个级别分别对应
c0 →好 2
c1 →中 3
c2 →差 5
2. 每个词在句⼦中出现的次数
得到⼀个字典数据
evalation [2, 5, 3]
半价 [0, 5, 0]
划算 [1, 1, 0]
不错 [0, 2, 0]
·········
不满 [0, 1, 0]
重要 [0, 1, 0]
清楚 [0, 1, 0]
具体 [0, 1, 0]
每个词(特征)后的 list坐标位:0,1,2分别对应好,中,差
以上⼯作完成之后,就是把模型训练好了,只不过数据越多越准确
测试
⽐如输⼊⼀个句⼦
世纪联华(百联西郊购物中⼼店)的点评⼀个号称国际⼤都市,收银处的⼈服务态度差到极点。银联活动30-10,还不可以连单。得到结果
c2-差
作者:静静⽈
来源:51CTO

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。