朴素贝叶斯算法_朴素贝叶斯算法及其应用

在这篇文章中,我们将尝试以简单的方式理解什么是朴素贝叶斯,它是如何工作的以及我们如何应用朴素贝叶斯分类器将文本或评论分类为“肯定”或“否定”,我们将通过电影评论案例进行研究。

什么是朴素贝叶斯?

贝叶斯定理是由Reverend Bayes开发的最早的概率推理算法之一(他过去常常尝试推断上帝的存在)并且对于某些用例仍然表现得非常好。

最好用一个例子来理解这个定理,假设你是一个推销员,并且你想帮助顾客选择汽车,这个顾客不知道该买什么,所以你的工作就是帮他选择一个,现在,你会开始问他这样的问题:

  • 你的预算是多少?
  • 你最喜欢哪个品牌?
  • 你在找新车还是用过一辆车?等等..

所以基于他的答案,我们可以将它们视为汽车的特征,如价格,品牌,年龄......如果一辆汽车的指标达到一个超过你心目中预期的水平,你就可以选择这个。

8769a0aa41ba4239cd859b8d86d7dedf.png

贝叶斯分类器

贝叶斯定理的工作方式与我们根据某些相关事件(品牌,价格,旧/新等)的概率计算事件概率(汽车是候选人)的方式相同。

需要考虑的一件事是这些条件彼此独立。例如,如果一辆丰田汽车有一定的价格区间,那么购买该汽车的可能性就不如说它是另一个价格大致相同的品牌。为了进一步认识这一点,有两个指标我们正在考虑,品牌和价格。假设我们单独查看这些指标,可以设计一个模型,标记属于客户预算范围内的所有品牌。然而,我们可能会有很多误报,因为其他品牌汽车很有可能也属于预算范围。因此,通过考虑品牌和价格两个特征,我们肯定会得到更准确的结果,哪些是潜在的候选人,哪些不是。

这是算法的前提假设,它认为每个特征彼此独立,但并非总是如此,因此可能影响最终决策。

朴素贝叶斯定理背后的数学

当你对朴素贝叶斯定理搜索时,你肯定会得到这个公式:

0923479ad9cf1724765dbbf5c3eafd83.png

朴素贝叶斯定理

解释一下:

P(A) 是A先前独立发生的概率。

P(B) 是B先前独立发生的概率。

P(A|B) 在B条件下出现A的后验概率

P(B|A) 在A条件下B发生的可能性概率。

假设我们需要考虑很多个特征共同影响最终概率,我们可以得到下面这个公式:

014febb84c4bc80cb8e43e6642bb6e5b.png

概率计算公式

来举个例子看看:

有两份报纸,人民日报和浙江日报,其中每张报纸出现“商业”和“股票”的概率如下:

  • P(S|RM)人民日报有“商业”的可能性:0.7
  • P(M|RM)人民日报有“股票”的可能性:0.2
  • P(S|ZJ)浙江日报有“商业”的可能性:0.1
  • P(M|ZJ)浙江日报有“股票”的可能性:0.1

现在假设阅读两份报纸的人是一样多的即P(RM)=0.5,P(ZJ)=0.5。

那么这里的y代表类变量,例子中报纸的名称,xn代表特征向量,例子中的词语。假定每个特征向量相互独立,我们要计算浙江日报中有“商业”和“股票”的可能性。

P(ZJ | S,M)=(P(ZJ)* P(S | ZJ)* P(M | ZJ))/ P(S,M)

除了P(S,M)其他变量都是已知的

P(S,M)=(p(ZJ)* P(S / ZJ)* P(M / ZJ))+(P(RM)* P(S / RM)* P(M / RM))

将他们替换成概率进行计算,结果是P(RM| S,M)=0.933,P(ZJ|S,M)=0.067,这里的数据都是假设。

在现实中的应用

在我们描述之前,我们需要知道Bag of Words(BoW)概念,这个术语用于指定具有“词袋”或需要使用的文本数据集合的问题。BoW的基本思想是获取一段文本并计算该文本中单词的频率。值得注意的是,BoW概念单独处理每个单词,单词出现的顺序无关紧要。我们可以将文档集合转换为矩阵,每个文档都是一行,每个单词(标记)是列,相应的(行,列)值是该文档中每个单词或标记的出现频率。

接着我们来看:

我们有四句话:[‘Hello, how are you!’, ‘Win money, win from home.’, ‘Call me now’, ‘Hello, Call you tomorrow?’]

将其转换为词矩阵

69f78bbff7900bffbc263c47657d2db9.png

单词频数矩阵

为了解决这个问题,我们将使用sklearns count vectorizer方法执行以下操作:

它将字符串标记化(将字符串分隔成单个单词)并为每个标记提供整数ID。它计算每个ID的出现次数。

CountVectorizer方法自动将所有标记化的单词转换为小写形式,这样就不会以不同的方式处理像“he”和“He”这样的单词。它使用小写参数执行此操作,默认情况下该参数设置为True。

它还忽略了所有标点符号,因此后跟标点符号的单词(例如:'hello!')的处理方式不同于没有前缀或带有标点符号后缀的相同单词(例如:'hello')。它使用token_pattern参数执行此操作,该参数具有默认正则表达式,该表达式选择2个或更多字母数字字符的标记。

要注意的第三个参数是stop_words参数。停用词是指语言中最常用的单词。它们包括“am”,“an”,“and”,“the”等字样。通过将此参数值设置为english,CountVectorizer将自动忽略内置列表中的所有单词(来自我们的输入文本)英语停止scikit-learn中的单词。这非常有用,因为当我们试图找到某些关键词时,停用词可能会扭曲我们的计算。

代码太长就不贴了。

结论

Naive Bayes相对于其他分类算法的主要优势之一是它能够处理极其多的特征。在我们的例子中,每个单词都被视为一个特征,并且有数千个不同的单词。此外,即使存在不相关的特征,它也表现良好,并且相对不受它们的影响。它的另一个主要优点是相对简单。Naive Bayes'开箱即用,并且很少需要调整它的参数,除非通常在已知数据分布的情况下。它很少会过度使用数据。另一个重要的优点是它的模型训练和预测时间对于它可以处理的数据量来说非常快。总而言之,Naive Bayes还是非常好用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值