朴素贝叶斯matlab实现(共7页)_第1页
朴素贝叶斯matlab实现(共7页)_第2页
朴素贝叶斯matlab实现(共7页)_第3页
朴素贝叶斯matlab实现(共7页)_第4页
朴素贝叶斯matlab实现(共7页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、clcclearclose alldata=importdata('data.txt');wholeData=data.data;%交叉验证选取训练集和测试集cv=cvpartition(size(wholeData,1),'holdout',0.04);%0.04表明测试数据集占总数据集的比例cvpartition(n,'holdout',p)创建一个随机分区,用于在n个观测值上进行保持验证。该分区将观察分为训练集和测试(或保持)集。参数p必须是标量,当0<p<1时,cvpartition为测试集随机选择大约p*n个观测值。当p是整

2、数时,cvpartition为测试集随机选择p个观测值。p的默认值是0.1trainData=wholeData(training(cv),:);testData=wholeData(test(cv),:);label=data.textdata;attributeNumber=size(trainData,2); size(A,2):获取矩阵A的列数。attributeValueNumber=5;%将分类标签转化为数据(因为在分类数据集中有3个类别,分别是R、B、L所以将类别转换为数字)sampleNumber=size(label,1);labelData=zeros(sampleNumb

3、er,1);for i=1:sampleNumber(测试集的行数) if labeli,1='R' labelData(i,1)=1; elseif labeli,1='B' labelData(i,1)=2; else labelData(i,1)=3; endendtrainLabel=labelData(training(cv),:);trainSampleNumber=size(trainLabel,1);testLabel=labelData(test(cv),:);%计算每个分类的样本的概率labelProbability=tabulate(tra

4、inLabel);tabulate函数的功能是创建向量X信息数据频率表。其函数使用格式:tbl = tabulate(x)创建的TBL(数据频率表)的结构:第一列:x的唯一值 第二列:每个值的实例数量 第三列:每个值的百分比%P_yi,计算P(yi)P_y1=labelProbability(1,3)/100;(第一行,第三个元素)P_y2=labelProbability(2,3)/100;P_y3=labelProbability(3,3)/100;count_1=zeros(attributeNumber,attributeValueNumber);%count_1(i,j):

5、y=1情况下,第i个属性取j值的数量统计count_2=zeros(attributeNumber,attributeValueNumber);%count_1(i,j):y=2情况下,第i个属性取j值的数量统计count_3=zeros(attributeNumber,attributeValueNumber);%count_1(i,j):y=3情况下,第i个属性取j值的数量统计%统计每一个特征的每个取值的数量for jj=1:3 for j=1:trainSampleNumber for ii=1:attributeNumber for k=1:attributeValueNumber i

6、f jj=1 if trainLabel(j,1)=1&&trainData(j,ii)=k count_1(ii,k)=count_1(ii,k)+1; end elseif jj=2 if trainLabel(j,1)=2&&trainData(j,ii)=k count_2(ii,k)=count_2(ii,k)+1; end else if trainLabel(j,1)=3&&trainData(j,ii)=k count_3(ii,k)=count_3(ii,k)+1; end end end end endend%计算第i个属性取

7、j值的概率,P_a_y1是分类为y=1前提下取值,其他依次类推。P_a_y1=count_1./labelProbability(1,2);P_a_y2=count_2./labelProbability(2,2);P_a_y3=count_3./labelProbability(3,2);%使用测试集进行数据测试labelPredictNumber=zeros(3,1);predictLabel=zeros(size(testData,1),1);for kk=1:size(testData,1) testDataTemp=testData(kk,:); Pxy1=1; Pxy2=1; Px

8、y3=1; %计算P(x|yi) for iii=1:attributeNumber Pxy1=Pxy1*P_a_y1(iii,testDataTemp(iii); Pxy2=Pxy2*P_a_y2(iii,testDataTemp(iii); Pxy3=Pxy3*P_a_y3(iii,testDataTemp(iii); end %计算P(x|yi)*P(yi) PxyPy1=P_y1*Pxy1; PxyPy2=P_y2*Pxy2; PxyPy3=P_y3*Pxy3; if PxyPy1>PxyPy2&&PxyPy1>PxyPy3 predictLabel(kk,

9、1)=1; disp('this item belongs to No.',num2str(1),' label or the R label') labelPredictNumber(1,1)=labelPredictNumber(1,1)+1; elseif PxyPy2>PxyPy1&&PxyPy2>PxyPy3 predictLabel(kk,1)=2; labelPredictNumber(2,1)=labelPredictNumber(2,1)+1; disp('this item belongs to No.&#

10、39;,num2str(2),' label or the B label') elseif PxyPy3>PxyPy2&&PxyPy3>PxyPy1 predictLabel(kk,1)=3; labelPredictNumber(3,1)=labelPredictNumber(3,1)+1; disp('this item belongs to No.',num2str(3),' label or the L label') endendtestLabelCount=tabulate(testLabel);% 计算

11、混淆矩阵disp('the confusion matrix is : ')C_Bayes=confusionmat(testLabel,predictLabel) 89· 103以上部分就是针对于这个已有的数据集进行的算法的实现。· 结果与分析 C_Bayes是计算出来的混淆矩阵。 其结果为: C_Bayes=83000000148003000014为了验证该自编程序是否可靠,我再使用了Matlab自带的贝叶斯算法的函数fitcnb进行该数据的分类测试Nb=fitcnb(trainData,trainLabel);y_nb=Nb.predict(testData);C_nb=confusionmat(testLabel,y_nb)· 1· 2· 3· 4其中C_nb是采用自带函数得到的结果的混淆矩阵 其结果为: C_nb=83000000148003000014可以发现其结果是完全一样的。&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论