• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: Matlab
  • 标签: 贝叶斯  

资源简介

内含贝叶斯的代码,10次10折贝叶斯的代码,直接使用即可,还用相应的数据集样本,都可直接使用不需要修改。

资源截图

代码片段和文件信息

clear;
clc;
ex=importdata(‘test.txt‘);  %读入文件
X=ex.data;
[mn]=size(ex.textdata);  %数据大小

Y=zeros(m);
for i=1:m
    if strcmp(ex.textdata(i)‘L‘)==1
        Y(i)=1;
    elseif strcmp(ex.textdata(i)‘B‘)==1
        Y(i)=2;
    else Y(i)=3;
    end
end

%朴素贝叶斯算法实现分类问题(三类y=1y=2y=3)
%我们把所有数字序号末尾为1的留作测试集,其他未训练集
% m=625;   %样本总数
% m1=562;  %训练集样本数量
% m2=63;  %测试集样本数量

%10折10次交叉验证
indices = crossvalind(‘Kfold‘m10); %产生10个fold,即indices里有等比例的1-10
accuracy = 0;
for i=1:10
    test=(indices==i); %逻辑判断,每次循环选取一个fold作为测试集
    train=~test; %取test的补集作为训练集,即剩下的9个fold
    data_train=X(train:); %以上得到的数都为逻辑值,用与样本集的选取
    label_train=Y(train:); %label为样本类别标签,同样选取相应的训练集
    data_test=X(test:); %同理选取测试集的样本和标签
    label_test=Y(test:); 
    [l1l3] = size(label_train);
    [l2l4] = size(label_test);




    %三类样本数量分别记为count1count2count3
    count1=0;
    count2=0;
    count3=0;


    %count_1(ij)表示在第一类(y=1)的情况下,第i个属性是j的样本个数
    count_1=zeros(45);
    %count_2(ij)表示在第二类(y=2)的情况下,第i个属性是j的样本个数
    count_2=zeros(45);
    %count_3(ij)表示在第三类(y=3)的情况下,第i个属性是j的样本个数
    count_3=zeros(45);


    ii=1;%用来标识测试集的序号


    for i=1:l1
            x=data_train(i:);
            if label_train(i)==1 
                count1=count1+1;
                for j=1:4    %指示第j个属性
                    for k=1:5    %第j个属性为哪个值
                        if x(j)==k
                            count_1(jk)=count_1(jk)+1;
                            break;
                        end
                    end
                end
            elseif label_train(i)==2
                count2=count2+1;
                for j=1:4    %指示第j个属性
                    for k=1:5    %第j个属性为哪个值
                        if x(j)==k
                            count_2(jk)=count_2(jk)+1;
                            break;
                        end
                    end
                end
            else
                count3=count3+1;
                for j=1:4    %指示第j个属性
                    for k=1:5    %第j个属性为哪个值
                        if x(j)==k
                            count_3(jk)=count_3(jk)+1;
                            break;
                        end
                    end
                end
            end


        %分别计算三类概率y1=p(y=1)、y2=p(y=2)、y3=p(y=3)的估计值
        y1=count1/l1;
        y2=count2/l1;
        y3=count3/l1;


        %y_1(ij)表示在第一类(y=1)的情况下,第i个属性取值为j的概率估计值
        %y_2(ij)表示在第二类(y=2)的情况下,第i个属性取值为j的概率估计值
        %y_3(ij)表示在第三类(y=3)的情况下,第i个属性取值为j的概率估计值
        for i=1:4
            for j=1:5
                y_1(ij)=count_1(ij)/count1;
                y_2(ij)=count_2(ij)/count2;
                y_3(ij)=count_3(ij)/count3;
            end
        end
    end


    %做预测p1p2p3分别表示输入值xx为第1,2,3类的概率




    cc=0;   %用cc表示正确分类的样本
    for i=1:l2
        xx=data_test(i:);
        yy=label_test(i);
        p1=y1*y_1(1xx(1))*y_1(2xx(2))*y_1(3xx(3))*y_1

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4149  2018-06-06 19:44  matlab贝叶斯分类(2)-10折10次交叉验证\Copy_of_beys.m
     文件        6873  2018-06-06 17:21  matlab贝叶斯分类(2)-10折10次交叉验证\test.txt
     目录           0  2019-11-02 09:49  matlab贝叶斯分类(2)-10折10次交叉验证\

评论

共有 条评论