• 大小: 5KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: Matlab
  • 标签: matlab  beys  UCI  

资源简介

利用matlab实现的贝叶斯分类算法,其中包含数据格式转换算法,交叉验证算法和数据集统计算法,是UCI数据集通用的分类算法,准确率达到0.9427.

资源截图

代码片段和文件信息

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

% 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
[class attrib1 attrib2 attrib3 attrib4] = textread(‘C:\matlab2017b\my-file\beys\test.txt‘‘%s %f %f %f %f‘‘delimiter‘‘‘); 
X = [attrib1‘; attrib2‘; attrib3‘; attrib4‘]‘; 
[mn] = size(X);
Y = zeros(m 1); 
Y(strcmp(class‘L‘)) = 1; 
Y(strcmp(class‘B‘)) = 2; 
Y(strcmp(class‘R‘)) = 3;

%朴素贝叶斯算法实现分类问题(三类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);
    %选取每个属性在每一类中的取值
    jj1 = 1;
    jj2 = 1;
    jj3 = 1;
    for p = 1:l1
        if label_train(p) == 1
            X1(jj1:) = data_train(p:);
            jj1 = jj1 + 1;
        elseif label_train(p) == 2
            X2(jj2:) = data_train(p:);
            jj2 = jj2 + 1;
        elseif label_train(p) == 3
            X3(jj3:) = data_train(p:);
            jj3 = jj3 + 1;
        end
    end
   




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


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


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


    for i=1:l1
            x=data_train(i:);
            if label_train(i)==1 
                count1=count1+1;
                for j=1:n    %指示第j个属性
                    uni1 = unique(X1(:j));
                    for k=1:length(uni1)    %第j个属性为哪个值
                        if x(j)==uni1(k)
                            count_1(jk)=count_1(jk)+1;
                            break;
                        end
                    end
                end
            elseif label_train(i)==2              
                count2=count2+1;
                for j=1:n    %指示第j个属性
                    uni2 = unique(X2(:j));
                    for k=1:length(uni2)    %第j个属性为哪个值
                        if x(j)==uni2(k)
                            count_2(jk)=count_2(jk)+1;
                            break;
                        end
                    end
                end
            else
                count3=count3+1;
                for j=1:n    %指示第j个属性
                    uni3 = unique(X3(:j));
                

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-06-07 18:54  matlab贝叶斯分类(3)-UCI数据集通用分类器\
     文件        6521  2018-06-07 18:50  matlab贝叶斯分类(3)-UCI数据集通用分类器\Copy_2_of_beys.m
     文件        4698  2018-06-06 15:48  matlab贝叶斯分类(3)-UCI数据集通用分类器\iris.txt
     文件        6873  2018-06-06 17:21  matlab贝叶斯分类(3)-UCI数据集通用分类器\test.txt

评论

共有 条评论