%Email:just_for_h264@163.com
%此程序利用贝叶斯分类算法,首先对两类样慎消本进行训练,
%进而可在屏幕上任意取点,程序可输出属于第一类,还是第二类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
close all
%读入两类训练样本数据
load data
%求两类训练样本的均值和方差
u1=mean(Sample1)
u2=mean(Sample2)
sigm1=cov(Sample1)
sigm2=cov(Sample2)
%计算两个样本的密度函数并显示
x=-20:0.5:40
y= -20:0.5:20
[X,Y] = meshgrid(x,y)
F1 = mvnpdf([X(:),Y(:)],u1,sigm1)
F2 = mvnpdf([X(:),Y(:)],u2,sigm2)
P1=reshape(F1,size(X))
P2=reshape(F2,size(X))
figure(2)
surf(X,Y,P1)
hold on
surf(X,Y,P2)
shading interp
colorbar
title('条件概率密度函数曲线')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%以下为测试部分
%利用ginput随机选取屏幕上的点(可连续取10个点)
%程序可根据点的位置自动地显示出属于那个类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pw1=0.4pw2=0.6
figure(1)
plot(Sample1(:,1),Sample1(:,2),'r.')
hold on
plot(Sample2(:,1),Sample2(:,2),'b.')
for i=1:10
[u,v]=ginput(1)
plot(u,v,'m*'宽樱知)
P1=pw1*mvnpdf([u,v],u1,sigm1)
P2=pw2*mvnpdf([u,v],u2,sigm2)
hold all
if(P1>P2)
disp('it belong to the first class')
else
disp('it belong to the second class'颂备)
end
end
1 x'-- x的转置矩阵x*x'的结果是矩阵或数值,由x的维数(x若为向量,维数就是其长度)决定
2 inv 求逆矩阵。
miu=1/(ad'*inv(R)*ad)
既然程序没有报错,那么(ad'*inv(R)*ad)就是一个数值,而
w = miu*inv(R)*ad = 1/(ad'*inv(R)*ad) * inv(R)*ad 是矩阵运算,
不能按照代数四则运算进行简单的“约分”败饥。
3 y(1,v)=w.'*a
v=v+1 这是为了记录向量y,v表液枯耐示当前值在向量中的位置。算完这一个后,位置向后移动,从v到(v+1),继续循环,算出的y值闹春就记录在(v+1)位置处
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)