机器学习之朴素贝叶斯算法原理+Python实现

您所在的位置:网站首页 概率计算原理 机器学习之朴素贝叶斯算法原理+Python实现

机器学习之朴素贝叶斯算法原理+Python实现

2024-03-19 16:35| 来源: 网络整理| 查看: 265

朴素贝叶斯 1.简介

​ 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种。其分类原理就是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概率作为该特征所属的类。

​ 之所以称之为“朴素”,是因为贝叶斯分类只做最原始、最简单的假设:所有的特征之间是相对独立的。

2.数学基础 2.1相对独立

​ 假设X有x1,x2,…xn个特征,P(x) = P(x1)P(x2)…P(xn)

2.2条件概率

假设有A,B两个事件,在B事件发生的条件下,A事件发生的概率。

P ( A ∣ B ) = P ( A B ) P ( A ) P(A|B)=\frac{P(AB)}{P(A)} P(A∣B)=P(A)P(AB)​

2.3全概率公式(从原因到结果)

考察在每一种情况下事件A发生的概率,计算A的概率。

P ( B ) = ∑ i = 1 n P ( A i ) P ( B ∣ A i ) P(B)=\sum_{i=1}^{n} P(A_{i} )P(B|A_{i} ) P(B)=i=1∑n​P(Ai​)P(B∣Ai​) 公式表示若事件A1,A2,…,An构成一个完备事件组且都有正概率,则对任意一个事件B都有公式成立。

2.4贝叶斯公式(从结果到原因)

在事件A发生的条件下,考察每种情况出现的条件概率

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ∣ A ) P ( A ) + P ( B ∣ A ′ P ( A ′ ) ) P(A|B)=\frac{P(B|A)P(A)}{P(B|A)P(A)+P(B|A^{'} P(A^{'} ))} P(A∣B)=P(B∣A)P(A)+P(B∣A′P(A′))P(B∣A)P(A)​ 其中样本空间由A和A’组成。

3.算法原理 3.1朴素贝叶斯公式推导

由条件概率公式: P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\frac{P(AB)}{P(A)} P(B∣A)=P(A)P(AB)​ 可以推导出: P ( A B ) = P ( B ∣ A ) P ( A ) P(AB)=P(B|A)P(A) P(AB)=P(B∣A)P(A) 同理可得: P ( A B ) = P ( A ∣ B ) P ( B ) P(AB)=P(A|B)P(B) P(AB)=P(A∣B)P(B) 由于(5)和(6)相等: P ( B ∣ A ) P ( A ) = P ( A ∣ B ) P ( B ) P(B|A)P(A)=P(A|B)P(B) P(B∣A)P(A)=P(A∣B)P(B) 可以推出贝叶斯公式: P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)​

3.2公式分析

P(A):为先验概率,即在B事件发生之前,对A事件发生概率的预判。

P(A|B):为后验概率,即在B事件发生之后,对A事件发生概率的重新评估。

P(B|A)/P(B):为可能性函数,是一个调整因子,使得预估概率更加接近真实概率。

所以贝叶斯公式可以表示为:后验概率=先验概率 * 调整因子

如果调整因子>1,则表示先验概率被增强,事件A发生的可能性变大。

如果调整因子=1,则表示事件B对判断事件A发生的概率没有帮助。

如果调整因子 p0: return 1 else: return 0 6.2.8朴素贝叶斯测试函数

参数说明:

​ testVec:测试样本

返回:

​ 测试样本的类别

def testingNB(testVec): dataSet,classVec = loadDataSet() #创建实验样本 vocabList = createVocabList(dataSet) #创建词汇表 trainMat= get_trainMat(dataSet) #将实验样本向量化 p0V,p1V,pAb = trainNB(trainMat,classVec) #训练朴素贝叶斯分类器 thisone = setOfWords2Vec(vocabList, testVec) #测试样本向量化 if classifyNB(thisone,p0V,p1V,pAb)==1: print(testVec,'属于侮辱类') #执行分类并打印分类结果 else: print(testVec,'属于非侮辱类') #执行分类并打印分类结果 6.2.9测试用例

测试样本1

testVec1 = ['love', 'my', 'dalmation'] testingNB(testVec1)

测试样本2

testVec2 = ['stupid', 'garbage'] testingNB(testVec2) 6.3多项式朴素贝叶斯

多项式朴素贝叶斯也是多用于文本处理,其原理和计算的流程和伯努利朴素贝叶斯基本一致,唯一的区别在于单词的计数方式, 在文本处理的环节中,我们将单词是否出现在词组作为特征,但在多项式朴素贝叶斯中,我们将单词在词组中出现的次数作为特征,因此只需要更改setOfWords2Vec的函数即可,变成如下方式:

def bagOfWords2VecMN(vocabList, inputSet): returnVec = [0] * len(vocabList) for word in inputSet: if word in vocabList: returnVec[vocabList.index(word)] += 1#单词在单词表中每出现一次,则加1 return returnVec


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3