1. 作者介绍

龚应豪,男,西安工程大学电子信息学院,2021级研究生
研究方向:机器视觉与人工智能
电子邮件:1581778668@qq.com

吴燕子,女,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:模式识别与人工智能
电子邮件:1219428323@qq.com

2. 朴素贝叶斯算法

2.1 贝叶斯算法

设类别C={y(1),y(2)…y(m)},特征向量X={x(1)},x(2)…x(n)},
贝叶斯分类器的工作原理如下:
1.求解在X条件下每个类别的概率即求得:
在这里插入图片描述
2.概率最大的项对应的类别即为X的预测类别:在这里插入图片描述
最大值对应的类别即为预测类别。然而在实际情况中往往无法直接求得,所以根据贝叶斯公式将求解最大值转化为求解:
在这里插入图片描述P(X)与类别无关且为固定值,不会影响 中的最大值的求解,因此将式子简化为如下形式:
在这里插入图片描述
总结:贝叶斯分类器就是最大后验概率估计

2.2 朴素贝叶斯算法

何为朴素?朴素代表着特征向量X={x(1),x(2)…x(n)}中每一个特征x(i)相互独立。那么朴素贝叶斯分类器可以表达为:
在这里插入图片描述

3. Sklearn中的朴素贝叶斯算法

在sklearn中,提供了若干种朴素贝叶斯的实现算法,不同的朴素贝叶斯算法,主要是P(xi|y)的分布假设不同,进而采用不同的参数估计方式。我们能够发现,朴素贝叶斯算法主要就是计算P(xi|y),一旦P(xi|y)确定,最终属于每个类别的概率,自然也就迎刃而解了。
常用的三种朴素贝叶斯为:
◎高斯朴素贝叶斯(GaussianNB)
◎伯努利朴素贝叶斯(BernoulliNB)
◎多项式朴素贝叶斯(MultinomialNB)

3.1 高斯朴素贝叶斯算法

适用于连续变量,其假定各个特征xi在各个类别y下是服从正态分布的,算法内部使用正态分布的概率密度函数来计算概率如下:
在这里插入图片描述

3.2 多项式朴素贝叶斯算法

多项式朴素贝叶斯,适用于离散变量,其假设各个特征xi在各个类别y下是服从多项式分布的,故每个特征值不能是负数。计算如下:
在这里插入图片描述

3.3 伯努利朴素贝叶斯

设试验E只有两个可能的结果:A与A¯,则称为E为伯努利试验。伯努利朴素贝叶斯,适用于离散变量,其假设各个特征xi在各个类别y下是服从n重伯努利分布(二项分布)的,因为伯努利试验仅有两个结果,因此,算法会首先对特征值进行二值化处理(假设二值化的结果为1与0),计算方式如下:
在这里插入图片描述

在训练集中,会进行如下的估计:
在这里插入图片描述

4. 实验过程

4.1 数据集介绍

scikit-learn内置的乳腺癌数据集来自加州大学欧文分校机器学习仓库中的威斯康辛州乳腺癌数据集。数据集最早源于威斯康星州临床科学中心。每个记录代表一个乳腺癌的随访数据样本。这些是DR Wolberg自1984-1995随访搜集连续乳腺癌患者数据,数据仅包括那些具有侵入性的病例乳腺癌并没有远处转移的医学指标数据集。
数据集样本实例数:569个,其中357个良性,212个恶性。
特征(属性)个数:30个特征属性和2个分类目标(恶性-Malignant,良性-Benign)。
特征(属性)信息:30个数值型测量结果由数字化细胞核的10个不同特征的均值、标准差和最差值(即最大值)构成。这些特征包括:
· radius(半径):mean of distances from center to points on the perimeter
· texture(质地):standard deviation of gray-scale values
· perimeter(周长)
· area(面积)
· smoothness(光滑度):local variation in radius lengths
· compactness(致密性):perimeter^2 / area - 1.0
· concavity(凹度):severity of concave portions of the contour
· concave points(凹点)
· symmetry(对称性)
· fractal dimension(分形维数):“coastline approximation” - 1

4.2 代码实现

#导入sklearn库自带的乳腺癌数据集,分别使用GaussianNB、MultinomialNb、BernouliNB3种分类器进行分类预测,并比较输出3种分类器预测的准确率优劣。

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import BernoulliNB
from sklearn.model_selection import train_test_split

#下载数据集并对数据集分割
cancers = datasets.load_breast_cancer()
X = cancers.data
Y = cancers.target
#print(X.shape)
#print(Y.shape)
#print(cancers.DESCR)
#将数据集拆分为训练集和测试集,训练集占80%,测试集占20%
# 注意返回值: 训练集train,x_train,y_train,测试集test,x_test,y_test
# x_train为训练集的特征值,y_train为训练集的目标值,x_test为测试集的特征值,y_test为测试集的目标值
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)

#三种朴素贝叶斯分类方式

#高斯贝叶斯分类器
model_linear1 = GaussianNB()
model_linear1.fit(x_train, y_train)
train_score1 = model_linear1.score(x_train, y_train)
test_score1 = model_linear1.score(x_test, y_test)
print('高斯贝叶斯训练集的准确率:%f; 测试集的准确率:%f'%(train_score1, test_score1))
preresult = model_linear1.predict(x_test)
print(preresult)
print(y_test)

#多项式贝叶斯分类器
model_linear2 = MultinomialNB()
model_linear2.fit(x_train, y_train)
train_score2 = model_linear2.score(x_train, y_train)
test_score2 = model_linear2.score(x_test, y_test)
print('多项式贝叶斯训练集的准确率:%f; 测试集的准确率:%f'%(train_score2, test_score2))
preresult = model_linear2.predict(x_test)
print(preresult)
print(y_test)

#伯努利贝叶斯分类器
model_linear3 = BernoulliNB()
model_linear3.fit(x_train, y_train)
train_score3 = model_linear3.score(x_train, y_train)
test_score3 = model_linear3.score(x_test, y_test)
print('伯努利贝叶斯训练集的准确率:%f; 测试集的准确率:%f'%(train_score3, test_score3))
preresult = model_linear3.predict(x_test)
print(preresult)
print(y_test)

4.3 实验结果

在这里插入图片描述

参考

1.参考数据集.

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐