ML之NB:朴素贝叶斯Naive Bayesian算法的简介、应用、经典案例之详细攻略
目录
1、基于朴素贝叶斯的垃圾邮件文本分类:问题描述→数据预处理→建模→优化算法(拉普拉斯平滑)→反思NB算法
ML之NB:基于垃圾邮件数据集利用多项式朴素贝叶斯分类器实现二分类实战代码
ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估
NLP之TM之Dirichlet:朴素贝叶斯NB的先验概率之Dirichlet分布的应用
NLP之NB:基于Language_data不同语种训练数据集利用NB(朴素贝叶斯)算法实现对新语种分类检测
NLP之TEA之NB/LoR:基于Rotten Tomatoes影评数据集利用NB(朴素贝叶斯)、LoR(逻辑斯蒂回归)算法(+TfidfVectorizer)实现文本情感分类—五分类预测
NB算法的简介
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。
通过以上定理和“朴素”的假定,我们知道:
P(Category | Document) = P(Document | Category ) * P(Category) / P(Document)
朴素贝叶斯的基本方法:在统计数据的基础上,依据条件概率公式,计算当前特征的样本属于某个分类的概率,选择最大的概率分类。对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
1、朴素贝叶斯计算流程表述
- (1)x = {a1, a2,..., am}为待分类项,每个ai为x的一个特征属性
- (2)有类别集合C = {y1, y2, ..., yn}
- (3)计算P(y1|x), P(y2|x), ..., P(yn|x)
- (4)如果P(yk|x) = max{P(y1|x)
2、朴素贝叶斯的优缺点
2.1、优点
朴素贝叶斯算法假设了数据集属性之间是相互独立的,因此算法的逻辑性十分简单,并且算法较为稳定,当数据呈现不同的特点时,朴素贝叶斯的分类性能不会有太大的差异。换句话说就是朴素贝叶斯算法的健壮性比较好,对于不同类型的数据集不会呈现出太大的差异性。当数据集属性之间的关系相对比较独立时,朴素贝叶斯分类算法会有较好的效果。
2.2、缺点
属性独立性的条件同时也是朴素贝叶斯分类器的不足之处。数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低。
3、分类模型之DT与NB的比较
最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBM)。和决策树模型相比,朴素贝叶斯分类器(Naive Bayes Classifier 或 NBC)发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。
NB算法的应用:案例理解
1、基于朴素贝叶斯的垃圾邮件文本分类:问题描述→数据预处理→建模→优化算法(拉普拉斯平滑)→反思NB算法
问题描述 | 数据集:1000封邮件,每个邮件被标记为垃圾邮件c1或者非垃圾邮件c2 分类目标:给定第1001封邮件,判断它否为垃圾邮件,比如”我司可办理正规发票17%增值税发票点数优惠!“ 方法:朴素贝叶斯 核心:判断P(“垃圾邮件”|“具有某特征”)是否大于1/2。 |
数据预处理 | 构建数据表示:分词,把一整句话拆分成更细拉度的词语来进行表示。因为整体一句话很难让机器读懂学习去使用。 可以采用向量法。 T1、基于现成的单词词典;将所有邮件中出现的单词都统计出来,得到词典。记单词数目为N。 T2、基于原始词库表,因为我们常用的词也就N=5万个左右; 将每个邮件m映射成维度为N的向量x。 若单词wi在邮件m中出现过,则xi=1,否则,xi=0。即邮件的向量化:m → (x1,x2……xN)。 |
建模 | 采用NB算法建模: 第一步,计算两个类别的条件概率 贝叶斯公式:P(c|x)=P(x|c)*P(c) / P(x) n P(c1|x)=P(x|c1)*P(c1) / P(x) n P(c2|x)=P(x|c2)*P(c2) / P(x)。 注意这里x是向量 第二步,分解公式: o P(c|x)=P(x|c)*P(c) / P(x) o P(x|c)=P(x1,x2…xN|c)=P(x1|c)*P(x2|c)…P(xN|c)。特征条件独立假设 o P(x)=P(x1,x2…xN)=P(x1)*P(x2)…P(xN)。特征独立假设 引进朴素近似:S表示垃圾邮件,即传说中的条件独立性假设 公式简化:只对于二分类。两个公式相除得到的商>0.5时则为垃圾邮件。好处能把分母约掉。 比较后验概率大小进而得出结果:每一项都特别好求,只需要分别统计各类邮件中该关健词出现的概率就可以了,比如【发票】。只要商 >1推出是垃圾邮件。 其实从一个大词库内,统计一个词的词频,可以大批量的并行化进行,所以速度很快。 第三步,带入公式: P(c|x)=P(x|c)*P(c) / P(x) P(xi|cj):在cj(此题目,cj要么为垃圾邮件1,要么为非垃圾邮件2)的前提下,第i个单词xi出现的概率; P(xi):在所有样本中,单词xi出现的概率; P(cj) :在所有样本中,邮件类别cj出现的概率; |
优化算法 | 拉普拉斯平滑 p(x1|c1)是指的:在垃圾邮件c1这个类别中,单词x1出现的概率。 x1是待考察的邮件中的某个单词 定义符号 n n1:在所有垃圾邮件中单词x1出现的次数。如果x1没有出现过,则n1=0。 n n:属于c1类的所有文档的出现过的单词总数目。 进行拉普拉斯平滑: n 其中,N是所有单词的数目。修正分母是为了保证概率和为1。同理,以同样的平滑方案处理p(x1)。 |
反思 | 对朴素贝叶斯的思考 (1)、遇到生词怎么办?拉普拉斯平滑 (2)、编程的限制:小数乘积怎么办?取对数 (3)、一个词在样本中出现多次,和一个词在样本中出现一次,形成的词向量相同,由0/1改成计数 (4)、如何判断两个文档的距离?夹角余弦 (5)、如何判定该分类器的正确率?样本中:K个生成分类器,1000-K个作为测试集,进行交叉验证 (6)、若对象特征之间不独立,会演化成何种形式? |
2、基于朴素贝叶斯的情感文本分类
问题描述 | A=1时表示文档是正向情感,反之则为负向情感。 给定一篇新文档B,如何判定该文档是正/负向情绪的文档? |
整体思路 | (1)、将该文档B用进行分词、停用词去除等预处理 (2)、将该文档B用词袋模型(向量空间模型)进行表示 (3)、利用贝叶斯公式 (4)、分别计算P(A=1|B)、P(A=0|B),若前者大则正向情感,后者大则负向情感。 |
以结果为导向 | 给定一篇文档B,判断情感分类,则需要计算P(A|B),那么,根据贝叶斯公式可获得: |
分析目标 | 只需要计算P(A=1|B)即可,P(A=0|B)=1-P(A=1|B) 那么,需要从训练文档集合中估计出以下数值 P(A=1):一篇文章是正向的先验概率, P(A=0):一篇文章是负向的先验概率, P(B_i=1|A=1):词语B_i在正向文章中出现的概率 P(B_i=1|A=0):词语B_i在负向文章中出现的概率 |
分析内容 | 若P(B_i=1|A=1)很大,则该词语是一个正向情绪的词语,例如高兴、喜欢等。 若P(B_i=1|A=0)很大,则该词语是一个负向情绪的词语,例如生气、讨厌等。 |
计算 | 给定训练集合{(B, y)},包含n个文档,n=n_p+n_n n_p是正向文档个数、n_n是负向文档个数,B是文档的向量空间表示,y是文档的正负标签(0负向、1正向) (1)、非常简单,只需要对数据集合做一个简单统计即可,词语只计算出现与否,不讨论出现的次数。 (2)、向量空间模型只包含了一元词语,可以拓展为N-gram模型,包括词组、成语等。 P(A=1):所有文档中正向文档的比例n_p/n; P(A=0):所有文档中正向文档的比例n_n/n; P(B_i=1|A=1):词语B_i在正向文章中出现的概率count(B_i|A=1)/n_p; P(B_i=1|A=0):词语B_i在负向文章中出现的概率count(B_i|A=0)/n_n; |
NB算法的经典案例
垃圾邮件分类
ML之NB:基于垃圾邮件数据集利用多项式朴素贝叶斯分类器实现二分类实战代码
https://yunyaniu.blog.csdn.net/article/details/87886811
新闻分类
ML之NB:利用朴素贝叶斯NB算法(CountVectorizer+不去除停用词)对fetch_20newsgroups数据集(20类新闻文本)进行分类预测、评估
https://yunyaniu.blog.csdn.net/article/details/88082855
主题模型分类
NLP之TM之Dirichlet:朴素贝叶斯NB的先验概率之Dirichlet分布的应用
https://yunyaniu.blog.csdn.net/article/details/82056119
语种分类
NLP之NB:基于Language_data不同语种训练数据集利用NB(朴素贝叶斯)算法实现对新语种分类检测
https://yunyaniu.blog.csdn.net/article/details/87652618
影评分类
NLP之TEA之NB/LoR:基于Rotten Tomatoes影评数据集利用NB(朴素贝叶斯)、LoR(逻辑斯蒂回归)算法(+TfidfVectorizer)实现文本情感分类—五分类预测
https://yunyaniu.blog.csdn.net/article/details/87707184