利用bayes分类器对mnist数据集或者cafir10进行二分类以及十分类,分类准确率达到95%以上。代码采用matlab编写,且包含mnist数据集,不用修改即可运行。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4434 2017-10-10 13:38 bayes分类器ayes_10_cla.m
文件 3516 2017-10-10 13:37 bayes分类器ayes_2_cla.m
文件 811 2011-04-27 23:02 bayes分类器loadMNISTImages.m
文件 516 2011-04-25 17:32 bayes分类器loadMNISTLabels.m
文件 7840016 1998-01-26 23:07 bayes分类器 10k-images.idx3-ubyte
文件 10008 1998-01-26 23:07 bayes分类器 10k-labels.idx1-ubyte
文件 47040016 1996-11-18 23:36 bayes分类器 rain-images.idx3-ubyte
文件 60008 1996-11-18 23:36 bayes分类器 rain-labels.idx1-ubyte
目录 0 2017-12-04 01:18 bayes分类器
----------- --------- ---------- ----- ----
54959325 9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%author: bin_chen
%%date: 2017-10-6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% download data
clear;
% mnist
images = loadMNISTImages(‘train-images.idx3-ubyte‘);
labels = loadMNISTLabels(‘train-labels.idx1-ubyte‘);
% cifar10
% cifar_train_data1=load(‘cifar-10-matlab/data_batch_1‘);
% cifar_train_data2=load(‘cifar-10-matlab/data_batch_2‘);
% cifar_train_data3=load(‘cifar-10-matlab/data_batch_3‘);
% cifar_train_data4=load(‘cifar-10-matlab/data_batch_4‘);
% cifar_train_data5=load(‘cifar-10-matlab/data_batch_5‘);
%
% images1=double(cifar_train_data1.data);
% images2=double(cifar_train_data2.data);
% images3=double(cifar_train_data3.data);
% images4=double(cifar_train_data4.data);
% images5=double(cifar_train_data5.data);
% images=[images1;images2;images3;images4;images5]‘;
% labels1=(cifar_train_data1.labels);
% labels2=(cifar_train_data2.labels);
% labels3=(cifar_train_data3.labels);
% labels4=(cifar_train_data4.labels);
% labels5=(cifar_train_data5.labels);
% labels=double([labels1;labels2;labels3;labels4;labels5]);
% image_mean=mean(images);
% images=images-repmat(image_meansize(images1)1);
% images = V_pca‘ * images; %降维后的训练数据
%% normalize(正则化)
L2 = sum(images.^2).^0.5; %每个样本特征值的二范距离
L2n = repmat(L2size(images1)1);
images=images./L2n;
clear L2;
clear L2n;
%% PCA dimensionality reduction
C = double(images * images‘);
[V D] = eig(C); % V:特征向量 D:特征值构成的对角矩阵
D=diag(D);
% D = (fliplr(diag(D)‘))‘;
D = cumsum(D) / sum(D); %最后一个元素为1
k = find(D >= 1e-2 1); % 忽略1%的能量
V_pca = V(: k:end); % 保留部分特征
clear C;
clear D;
clear V;
images = V_pca‘ * images;
%% training part
img_i={};
priori_i=zeros(101); % 先验概率
u_i=zeros(size(images1)10); % 平均值
sigma_i=zeros(size(images1)size(images1)10); % 每一类的协方差矩阵
sigma=zeros(size(images1)); % 整体协方差矩阵
for i=0:9
[loc~]=find(labels==i);
img_i{i+1}=images(:loc);
priori_i(i+1)=size(img_i{i+1}2)/size(images2); %先验概率
u_i(:i+1)=mean(img_i{i+1}2); %第i类特征的均值
x_u=img_i{i+1}-repmat(u_i(:i+1)[1size(img_i{i+1}2)]); %特征值-平均值
% 每一类的协方差矩阵
sigma_i(::i+1)=x_u*x_u‘/size(img_i{i+1}2)+0.001*eye(size(images1)); %加扰动,防止奇异
% 整体协方差矩阵
sigma=sigma+x_u*x_u‘;
end
sigma=sigma/size(images2)+0.001*eye(size(images1));
%% test part
test_images = loadMNISTImages(‘t10k-images.idx3-ubyte‘);
test_labels = loadMNISTLabels(‘t10k-labels.idx1-ubyte‘);
% cifar_test_data=load([‘cifar-10-matlab‘ ‘test_batch.mat‘]);
% test_images=double(cifar_test_data.data);
% test_images=test_images‘;
% test_labels=double(cifar_test_data.labels);
test_images = V_pca‘ * test_images; % 与训练数据按照同样的方式进行降维
% normalize
l2=sum(test_images
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4434 2017-10-10 13:38 bayes分类器ayes_10_cla.m
文件 3516 2017-10-10 13:37 bayes分类器ayes_2_cla.m
文件 811 2011-04-27 23:02 bayes分类器loadMNISTImages.m
文件 516 2011-04-25 17:32 bayes分类器loadMNISTLabels.m
文件 7840016 1998-01-26 23:07 bayes分类器 10k-images.idx3-ubyte
文件 10008 1998-01-26 23:07 bayes分类器 10k-labels.idx1-ubyte
文件 47040016 1996-11-18 23:36 bayes分类器 rain-images.idx3-ubyte
文件 60008 1996-11-18 23:36 bayes分类器 rain-labels.idx1-ubyte
目录 0 2017-12-04 01:18 bayes分类器
----------- --------- ---------- ----- ----
54959325 9
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)