logo资料库

基于bayes分类的MATLAB程序.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
基于 Bayes 分类的 MATLAB 程序 %题中所给各类样本数据及观察 x w1=[0 0;2 1;1 0];w2=[-1,1;-2,0;-2,-1];w3=[0,-2;0,-1;1,-2]; x=[-2,2]'; syms x1 x2 Xr=[x1,x2];Xc=[x1;x2]; %算出各类状态的先验概率, samplenum=length(w1)+length(w2)+length(w3); p1=length(w1)/samplenum; p2=length(w2)/samplenum; p3=length(w3)/samplenum; %算出各类的均值,协方差,及协方差的逆矩阵. u1=mean(w1)';u2=mean(w2)';u3=mean(w3)'; D1=cov(w1);D2=cov(w2);D3=cov(w3); invD1=inv(D1);invD2=inv(D2);invD3=inv(D3); %在三类协方差不相等时,分别计算观察 x 的 gi(x) i=1,2,3;决定观察 x 属于的类别. g1=-1/2*(x-u1)'*invD1*(x-u1)-1/2*log(det(D1))+log(p1); g2=-1/2*(x-u2)'*invD2*(x-u2)-1/2*log(det(D2))+log(p2); g3=-1/2*(x-u3)'*invD3*(x-u3)-1/2*log(det(D3))+log(p3); g=[g1,g2,g3]; w=find(g==max(g)); fprintf('协方差不相等时,x belongs to W%d\n',w); %求出三类相邻区域的分界线方程. W1=-0.5*invD1;W2=-0.5*invD2;W3=-0.5*invD3; ww1=invD1*u1;ww2=invD2*u2;ww3=invD3*u3; w10=-1/2*u1'*invD1*u1-1/2*log(det(D1))+log(p1); w20=-1/2*u2'*invD2*u2-1/2*log(det(D2))+log(p2); w30=-1/2*u3'*invD3*u3-1/2*log(det(D3))+log(p3); %W1 与 W2 的分界线. rear=w10-w20; g12=Xr*round(W1-W2)*Xc+(ww1-ww2)'*Xc+rear; g12=simple(g12); %W1 与 W3 的分界线. rear=w10-w30; g13=Xr*round(W1-W3)*Xc+(ww1-ww3)'*Xc+rear; g13=simple(g13); %W2 与 W3 的分界线. rear=w20-w30; g23=Xr*round(W2-W3)*Xc+(ww2-ww3)'*Xc+rear; g23=simple(g23); %绘制各类数据点及分界线. subplot(2,2,1) plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.')
hold on ezplot(g12) ezplot(g13) ezplot(g23) title('各类间混合分界线') subplot(2,2,2) plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*') hold on ezplot(g12) legend('第一类','第二类','分界线') subplot(2,2,3) plot(w1(:,1),w1(:,2),'b+',w3(:,1),w3(:,2),'k.') hold on ezplot(g13) legend('第一类','第三类','分界线') subplot(2,2,4) plot(w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') hold on ezplot(g23) legend('第二类','第三类','分界线') %三类协方差相等时,分别计算观察 x 的 gi(x) i=1,2,3;决定观察 x 属于的类别. D=D1+D2+D3;invD=inv(D); g1=(x-u1)'*invD*(x-u1); g2=(x-u2)'*invD*(x-u2); g3=(x-u3)'*invD*(x-u3); g=[g1,g2,g3]; w=find(g==min(g)); fprintf('协方差相等时,x belongs to w%d',w); W12=invD*(u1-u2);W13=invD*(u1-u3);W23=invD*(u2-u3); x120=1/2*(u1+u2)-(log(p1/p2)*(u1-u2))/((u1-u2)'*invD*(u1-u2)); x130=1/2*(u1+u3)-(log(p1/p3)*(u1-u3))/((u1-u3)'*invD*(u1-u3)) x230=1/2*(u2+u3)-(log(p2/p3)*(u2-u3))/((u2-u3)'*invD*(u2-u3)) %求出三类相邻区域的分界线方程. g12=W12'*(Xc-x120); g12=simple(g12); g13=W13'*(Xc-x130); g13=simple(g13); g23=W23'*(Xc-x230); g23=simple(g23);
%绘制各类数据点及分界线. figure(2) subplot(2,2,1) plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') hold on ezplot(g12) ezplot(g13) ezplot(g23) title('各类间混合分界线') subplot(2,2,2) plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*') hold on ezplot(g12) legend('第一类','第二类','分界线') subplot(2,2,3) plot(w1(:,1),w1(:,2),'b+',w3(:,1),w3(:,2),'k.') hold on ezplot(g13) legend('第一类','第三类','分界线') subplot(2,2,4) plot(w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') hold on ezplot(g23) legend('第二类','第三类','分界线')
分享到:
收藏