朴素贝叶斯分类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有现成的封装好的分类方法,这里只不过是把过程写了一下而已。

  • 25
    点赞
  • 270
    收藏
    觉得还不错? 一键收藏
  • 51
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值