朴素贝叶斯分类MATLAB实现
原理:
首先将数据分成训练集和测试集,计算测试集中每个类的先验概率(就是每个类在训练集中占的比例),然后为样本的每个属性估计条件概率(就是属性值相同的样本在每一类中占的比例)为了方便理解请看下面的例子:(直接用的周志华机器学习那本书上的,下面使用的数据和次无关) 现在有一个西瓜,它的属性值如下,让判断它是好瓜还是坏瓜 首先我们要求每个类的先验概率,就是好瓜和坏瓜的比例 P(好瓜) = 8/17 = 0.471 P(坏瓜) = 9/17 = 0.529 然后为每个属性值估计概率 然后就可以计算出它是好瓜和坏瓜的概率了,那个概率大就认为它是那种瓜 源数据链接:链接:https://pan.baidu.com/s/1S0ImAY6WBUCp_sac0zyfLw 提取码:flj4 MATLAB实现:
[b] = xlsread(mix.xlsx,1,A1:C1628); x = b(:,1); y = b(:,2); c = b(:,3); data = [x,y]; NUM = 500;%样本数量 Test = sortrows([x(1:NUM,1),y(1:NUM,1),c(1:NUM,1)],3);%为方便处理按类对样本排序 temp = zeros(23,5);%用来存储样本中各个属性的均值、方差和每个类的概率 %计算出样本中各个属性的均值、方差和每个类的概率 for i = 1:23 X = []; Y = []; count = 0; for j = 1:NUM if Test(j,3)==i X = [X;Test(j,1)]; Y = [Y;Test(j,2)]; count = count + 1; end end temp(i,1) = mean(X); temp(i,2) = std(X); temp(i,3) = mean(Y); temp(i,4) = std(Y); temp(i,5) = count/NUM; end %计算预测结果 result = []; for m = 1:1628 pre = []; for n = 1:23 PX = 1/temp(n,2)*exp(((data(m,1)-temp(n,1))^2)/-2/(temp(n,2)^2)); PY = 1/temp(n,4)*exp(((data(m,2)-temp(n,3))^2)/-2/(temp(n,4)^2)); pre = [pre;PX*PY*temp(n,5)*10^8]; end [da,index]=max(pre); result = [result;index]; end xlswrite(mix.xlsx,result,E1:E1628); %画图 for i = 1:1628 rand(seed,result(i,1)); color = rand(1,3); plot(x(i,1),y(i,1),*,color,color); hold on; end %查看正确率 num = 0; for i = 1:1628 if result(i)==c(i) num = num+1;%正确的个数 end end
其实MATLAB有现成的封装好的分类方法,这里只不过是把过程写了一下而已。
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
机器学习之欠拟合与过拟合