matlab 实现贝叶斯分类器

贝叶斯详解

网上有很多文章介绍贝叶斯原理,这里推荐个链接。
http://blog.csdn.net/anneqiqi/article/details/59666980

贝叶斯分类器

这里再说贝叶斯分类器的设计步骤:
1.对每个簇的数据求均值mu 和协方差矩阵sigma
2.对测试数据,将其对每个簇用均值和协方差矩阵求相关性。
3.将数据分类到相关性大的簇中。

matlab代码

分类器函数 bayesClassifer.m

function [ labels ] = bayesClassifer(trainData,trainLabel,K,testData)
%trainData 训练数据
%trainLabel 训练数据的标签
%K 训练数据的类数
%testData 测试数据
[~,dimentr]=size(trainData);
[numsts,dimente]=size(testData);
if dimentr~=dimente
    disp('错误!测试数据和训练数据维数不一样!');
    return;
end
mu=zeros(K,dimentr);%各个类的均值
sigma=zeros(dimentr*K,dimentr);%各个类的协方差
%计算各个类的均值和协方差
for i=1:K
    mu(i,:)=mean(trainData(trainLabel==i,:));
    sigma(((i-1)*dimentr+1):i*dimentr,:)=cov(trainData(trainLabel==i,:));
end
%对测试数据对各个类进行比对
labels=zeros(numsts,1);
for i=1:numsts
    P=zeros(1,K);
    for j=1:K
        %求相关性函数
        P(j)=mvnpdf(testData(i,:),mu(j,:),sigma((j-1)*dimentr+1:j*dimentr,:));
    end
    [~,maxIndex]=max(P);
    labels(i)=maxIndex;
end
%可视化
color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; 
if dimentr==2
    subplot(1,2,1);
    for i=1:K
        plot(trainData(trainLabel==i,1),trainData(trainLabel==i,2),char(color(i)));
        hold on;
    end
    title('训练数据');
    subplot(1,2,2);
    for i=1:K
        plot(testData(labels==i,1),testData(labels==i,2),char(color(i)));
        hold on;
    end
    title('测试数据');
elseif dimentr==3
    subplot(1,2,1);
    for i=1:K
        plot(trainData(trainLabel==i,1),trainData(trainLabel==i,2),trainData(trainLabel==i,3),char(color(i)));
        hold on;
    end
    title('训练数据');
    subplot(1,2,2);
    for i=1:K
        plot(testData(labels==i,1),testData(labels==i,2),trainData(trainLabel==i,3),char(color(i)));
        hold on;
    end
    title('测试数据');
else
    disp('维度不符合画图标准(1维的懒得画),咱就不画啦');
end

end

测试数据生成和分类。

clear;
clc;
n=100;
%生成训练数据
mu1=[2 10];
mu2=[10 2];
sigma1=[1.5 0;0 1];
sigma2=[1 0.5;0.5 2];
r1=mvnrnd(mu1,sigma1,n);
r2=mvnrnd(mu2,sigma2,n);
trainData=[r1;r2];
trainLabel=[ones(100,1);2*ones(100,1)];
%生成测试数据
mu1=[5 5];
n=200;
sigma1=[0.5 0;0 0.5];
testData=mvnrnd(mu1,sigma1,n);
%测试
labels=bayesClassifer(trainData,trainLabel,2,testData);

实验结果

matlab 实现贝叶斯分类器_第1张图片

你可能感兴趣的:(机器学习)