资源描述:
《朴素贝叶斯matlab实现.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、clcclearclosealldata=importdata('data.txt');wholeData=data.data;%交叉验证选取训练集和测试集cv=cvpartition(size(wholeData,1),'holdout',0.04);%0.04表明测试数据集占总数据集的比例cvpartition(n,'holdout',p)创建一个随机分区,用于在n个观测值上进行保持验证。该分区将观察分为训练集和测试(或保持)集。参数p必须是标量,当0
2、值。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(sampleNumber,1);fori=1:sampleNum
3、ber(测试集的行数)iflabel{i,1}=='R'labelData(i,1)=1;elseiflabel{i,1}=='B'labelData(i,1)=2;elselabelData(i,1)=3;endendtrainLabel=labelData(training(cv),:);trainSampleNumber=size(trainLabel,1);testLabel=labelData(test(cv),:);%计算每个分类的样本的概率labelProbability=tabulate(trainLabel);tabulate函数的功能是创建向量X信息数据频率表。其
4、函数使用格式: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):y=1情况下,第i个属性取j值的数量统计count_2=zeros(attrib
5、uteNumber,attributeValueNumber);%count_1(i,j):y=2情况下,第i个属性取j值的数量统计count_3=zeros(attributeNumber,attributeValueNumber);%count_1(i,j):y=3情况下,第i个属性取j值的数量统计%统计每一个特征的每个取值的数量forjj=1:3forj=1:trainSampleNumberforii=1:attributeNumberfork=1:attributeValueNumberifjj==1iftrainLabel(j,1)==1&&trainData(j,ii)
6、==kcount_1(ii,k)=count_1(ii,k)+1;endelseifjj==2iftrainLabel(j,1)==2&&trainData(j,ii)==kcount_2(ii,k)=count_2(ii,k)+1;endelseiftrainLabel(j,1)==3&&trainData(j,ii)==kcount_3(ii,k)=count_3(ii,k)+1;endendendendendend%计算第i个属性取j值的概率,P_a_y1是分类为y=1前提下取值,其他依次类推。P_a_y1=count_1./labelProbability(1,2);P_a_
7、y2=count_2./labelProbability(2,2);P_a_y3=count_3./labelProbability(3,2);%使用测试集进行数据测试labelPredictNumber=zeros(3,1);predictLabel=zeros(size(testData,1),1);forkk=1:size(testData,1)testDataTemp=testData(kk,:);Pxy1=1;Pxy2=1;Pxy3=1;%计算P