贝叶斯分类算法分析与实现
2018-07-02郭慧
郭 慧
(山西大学商务学院信息学院,山西 太原 030031)
0 引言
预测任务是数据挖掘的任务之一,它可以通过属性的值,预测特定属性的值。分类属于预测任务,通过训练集的学习,得到一个目标函数(模型)f,把每个属性值x通过该函数映射到离散的目标属性y上。贝叶斯算法是一种基于统计的分类算法[1,2]。在对小样本数据进行学习时,贝叶斯算法表现出良好的分类能力。为了对抗有的样本中没有数据的问题,引入了平滑的概念,实现了更为有效的分类[3]。
1 相关原理
针对分类问题,旨在实现从训练数据D={(x1,y1),(x2,y2),…,(xN,yN)}中得出训练目标P(Y=ck|X=x),给定x,求出x属于ck类别的概率[4]。根据概率论的相关知识,我们可以将该概率转换为联合概率与边缘概率的商。具体的求解过程如下:
(1)
上述推导中,假设每一个样本中的特征之间在给定类别下,是相互条件独立的,也就是:
P(X=x|Y=ck)=
P((X(1)=x(1),…,X(N)=x(N))|Y=ck)=
P(X(1)=x(1)|Y=ck),…,P(X(N)=x(N)|Y=ck)=
则式(1)等价于
贝叶斯分类器采用argmax函数进行分类,具体如下:
(2)
类别ck在训练数据的统计取得最大值时,自变量x的值,可以采用极大似然估计求出,具体如下:
在实际数据中,有的样本为空。这种情况可采用平滑方法对抗有的样本中没有数据,具体如下:
(3)
(4)
2 计算过程
以具体实例说明贝叶斯方法的计算过程。
训练样本如表1所示[5]。
表1 训练样本
其中,每一列代表的含义如下:
Day:第几天,Outlook:天气,Temperature:温度,Humidity:潮湿度,Wind:风力,PlayTennis:是否打网球。
给定新的样本数据Outlook=sunny,Temperature=cool,Humidity=high,Wind=strong,问PlayTennis的情况。
设λ=1,根据式(3)和式(4)分别进行计算。
P(yes)=(8+1)/(12+2)=9/14
P(no)=(4+1)/(12+2)=5/14
P(outlook=sunny|yes)=(2+1)/(8+3)=3/11
P(outlook=sunny|no)=(3+1)/(4+3)=4/7
P(temperature=cool|yes)=(3+1)/(8+3)=4/11
P(temperature=cool|no)=(1+1)/(4+3)=2/7
P(humidity=high|yes)=(3+1)/(8+2)=4/10
P(humidity=high|no)=(3+1)/(4+2)=4/6
P(wind=strong|yes)=(3+1)/(8+2)=4/10
P(wind=strong|no)=(2+1)/(4+2)=3/6
根据式(2),计算在不同分类下,P(Y=ck)∏jP(X(j)=x(j)|Y=ck)的值。
P(yes)P(sunny|yes)P(cool|yes)P(high|yes)P(strong|yes)=(9/14)*(3/11)*(4/11)*(4/10)*(4/10)=0.0102
(5)
P(no)P(sunny|no)P(cool|no)P(high|no)P(strong|no)=(5/14)*(4/7)*(2/7)*(4/6)*(3/6)=0.019 4
(6)
因为式(6)>(5),所以,给定新样本的预测结果PlayTennis=No。
3 实现
为了进一步验证贝叶斯分类算法的效果,把该算法应用到UCI数据集iris上,采用MATLAB R2017b实现。
2/3的数据作为训练集,1/3的数据作为测试集。主要算法如下:
步骤1:计算训练集中每一类的概率。如:第一种分类的概率
pClass1 = size(rows1,1) / size(training_set,1)
步骤2:计算属性在该分类下的概率。如:在第一种分类下第j个属性的概率 pAttributeClass(j,1)
=1/(sqrt(2*pi)*stdValue1(j))* exp(-(attribute(j)-meanValue1(j))^2/ (2*stdValue1(j)^2));
步骤3:比较样本属性的分类概率。如:若第i个测试样本属性概率乘积最大,也就是if (max([pXC1*pClass1, pXC2*pClass2, pXC3*pClass3]) == pXC1*pClass1) ,则测试样本分类为1,test_set(i,5) = 1。
最终,贝叶斯分类算法在iris测试集上的准确率为:0.979167。
4 小结
分析了贝叶斯分类算法的原理以及实现过程,运用贝叶斯分类算法在iris数据集上进行分类测试,准确率高,在测试集的48个样本中,正确的有47个。说明贝叶斯分类算法对于小样本数据有好的分类效果。
[1] 蔡永泉,王玉栋.以特征关联项改进贝叶斯分类器正确率[J].计算机应用与软件,2017,34(8):286-290.
[2] Dong W Y, Zhou M C. Gaussian Classifier-based Evolutionary Strategy for Multimodal[J].Optimization. IEEE Transactions on Neural Networks & Learning Systems,2014,25(6):1200-1216.
[3] 王双成,杜瑞杰,刘颖.连续属性完全贝叶斯分类器的学习与优化[J].计算机学报,2012,35(10):2129-2137.
[4] M.Julia Flores,Jose A. Gamez,Ana M.Martinez. Domains of Competence of the Semi-naive Bayesian Network Classifiers[G]. Information Sciences,2014:120-148.
[5] 李春贵,聂永红.基于面向对象方法的ID3算法的设计与实现[J].广西工学院学报,2004(3):1-5.