理论教育 Python计算思维:贝叶斯分类

Python计算思维:贝叶斯分类

时间:2023-11-22 理论教育 版权反馈
【摘要】:贝叶斯分类是一类基于概率统计理论进行分类的算法的总称,这类算法均以贝叶斯定理为基础。以一组简单的数据来描述朴素贝叶斯如何实现分类更能说明问题。表8.4.1朴素贝叶斯分类样本集此时,统计来自非洲的学生,事件A“肤色黑”发生的概率为统计事件B“美洲”发生条件下,事件A“肤色黑”发生的概率P黑|美洲=1/3。在很多情况下,朴素贝叶斯分类算法可以与决策树和神经网络分类算法相媲美,且方法简单、分类准确率高、速度快。

Python计算思维:贝叶斯分类

贝叶斯分类是一类基于概率统计理论进行分类的算法的总称,这类算法均以贝叶斯定理为基础。

贝叶斯定理求解的问题为:已知某条件概率,如何得到两个事件交换后的概率。也就是在已知P(A|B)的情况下,如何求得P(B|A)。条件概率P(A|B)的定义则为:事件B已发生的前提下,事件A发生的概率,称作事件B发生下事件A的条件概率。条件概率的求解公式为:

贝叶斯定理求解P(B|A)公式为:

朴素贝叶斯(Naïve Bayes,NB)分类是贝叶斯分类中的一种,之所以称它为朴素贝叶斯,就是因为它的想法很朴素。现实生活中人们去判断某件事作出结论时,通常以最大概率为准。

以一组简单的数据来描述朴素贝叶斯如何实现分类更能说明问题。设采集了一组外国留学生的简单信息,以肤色作为数据特征,来判断其来源地,得到的信息罗列于表8.4.1。

表8.4.1 朴素贝叶斯分类样本集

此时,统计来自非洲的学生(即事件B“非洲”发生条件下),事件A“肤色黑”发生的概率为

统计事件B“美洲”发生条件下,事件A“肤色黑”发生的概率P黑|美洲=1/3。现在给定一个事件A“肤色黑”,判断其“来源地”事件B的概率,可以计算如下:

P非洲|黑=P黑|非洲×P非洲/P=100%×(样本中非洲的概率)/(样本中肤色黑的概率)

=1×(4/7)/(5/7)=4/5

P美洲|黑=1/3×(样本中美洲的概率)/(样本中肤色黑的概率)

=1/3×(3/7)/(5/7)=1/3×3/5=20%

由此根据大概率原则,可以判断此人来自非洲。

上述例子中对象的特征是非连续值,如“黑”可用1表达,“棕”用2表达,因而很容易计算其出现的概率。实际科学计算问题中,对象特征常常是连续的数值。在这种情况下,贝叶斯认为样本服从正态分布,因而可以使用正态分布计算其概率,公式如下:

其中x是样本集,σ为方差,η为均值。

对训练集中样本分类ci,对象特征ak的条件概率可根据下式计算:

从而使得贝叶斯算法容易实施。(www.daowen.com)

在很多情况下,朴素贝叶斯分类算法可以与决策树神经网络分类算法相媲美,且方法简单、分类准确率高、速度快。

Sklearn的naive_bayes包中含有朴素贝叶斯,使用过程也被sklearn统一了调用格式,与前面提到的支持向量机调用格式类似。使用朴素贝叶斯算法完成鸢尾花数据库的分类代码如下:

程序:鸢尾花贝叶斯

from sklearn import datasets

from sklearn.naive_bayes import Gaussian NB

iris=datasets.load_iris( )

X=iris.data

y=iris.target

from sklearn.model_selection import train_test_split

data_train,data_test,target_train,target_test=train_test_split(X,y)

bayes=Gaussian NB( ) #生成

model=bayes.fit(data_train,target_train)

pred=model.predict(data_test)

error=pred-target_test

print(target_test)

print(error)

程序运行的结果如下:

[2 1 0 0 1 0 2 1 2 2 0 0 2 1 0 2 1 1 2 1 2 1 1 0 1 0 1 0 2 2 1 0 0 2 0 1 2 0]

[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

比较支持向量机的结果,朴素贝叶斯的分类结果也很好。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈