⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 experiment1.m

📁 matlab 模式识别算法和实现及其相关实验。
💻 M
字号:
function y=experiment1()

m1=[0.42,-0.087,0.58;-0.2,-3.3,-3.4;1.3,-0.32,1.7;0.39,0.71,0.23;-1.6,-5.3,-0.15;-0.029,0.89,-4.7;-0.23,1.9,2.2;0.27,-0.3,-0.87;-1.9,0.76,-2.1;0.87,-1.0,-2.6];
m2=[-0.4,0.58,0.089;-0.31,0.27,-0.04;0.38,0.055,-0.035;-0.15,0.53,0.011;-0.35,0.47,0.034;0.17,0.69,0.1;-0.011,0.55,-0.18;-0.27,0.61,0.12;-0.065,0.49,0.0012;-0.12,0.054,-0.063];
m3=[0.83,1.6,-0.014;1.1,1.6,0.48;-0.44,-0.41,0.32;0.047,-0.45,1.4;0.28,0.35,3.1;-0.39,-0.48,0.11;0.34,-0.079,0.14;-0.3,-0.22,2.2;1.1,1.2,-0.46;0.18,-0.11,-0.49];
% a) 对类m1中的3个特征分别求最大似然估计u,d
u1=mean(m1(1:10,1))
d1=var(m1(1:10,1))
u12=mean(m1(1:10,2))
d2=var(m1(1:10,2))
u3=mean(m1(1:10,3))
d3=var(m1(1:10,3))
% b) 对m1中任意两个特征组合求最大似然估计
u12=mean(m1(1:10,1:2))
D12=cov(m1(1:10,1:2))
u13=mean(m1(1:10,1:2:3))
D13=cov(m1(1:10,1:2:3))
u23=mean(m1(1:10,2:3))
D23=cov(m1(1:10,2:3))
% c) 对m1中3个特征的组合求最大似然估计
u=mean(m1(1:10,:))
D=cov(m1(1:10,:))
% d) 假设高斯模型可分离,估计w2中的均值和协方差矩阵
u=mean(m2(1:10,:))
d=var(m2(1:10,:));
D=diag(d)
%--------------------------------------------------------------------------
% b) 对类别m2,m3,计算最优投影方向w
w=fisher(m2,m3);
% c) 画出投影前的点用‘*’标记,表示最优方向w的直线,并且标记出投影后的点在直线上的位置,用‘.’标记
subplot(1,2,1)
x1=m2(1:10,1);y1=m2(1:10,2);z1=m2(1:10,3);
x2=m3(1:10,1);y2=m3(1:10,2);z2=m3(1:10,3);
plot3(x1,y1,z1,'r*',x2,y2,z2,'b*')
hold on
x=-2:0.1:2;
y=w(2,1)/w(1,1)*x;
z=w(3,1)/w(1,1)*x;
plot3(x,y,z)
rotate3D on
subplot(1,2,2)
x=-2:0.1:2;
y=w(2,1)/w(1,1)*x;
z=w(3,1)/w(1,1)*x;
plot3(x,y,z)
hold on
% 对w2中点投影
for i=1:10
    x=(m2(i,1)+w(2,1)/w(1,1)*m2(i,2)+w(3,1)/w(1,1)*m2(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);
    y=w(2,1)/w(1,1)*x;
    z=w(3,1)/w(1,1)*x;
  plot3(x,y,z,'r*')  
end
hold on
% 对w3中的点投影
for i=1:10
    x=(m3(i,1)+w(2,1)/w(1,1)*m3(i,2)+w(3,1)/w(1,1)*m3(i,3))/(1+(w(2,1)/w(1,1))^2+(w(3,1)/w(1,1))^2);
    y=w(2,1)/w(1,1)*x;
    z=w(3,1)/w(1,1)*x;
  plot3(x,y,z,'b*')  
end
rotate3D on
% d)  用用一维高斯函数拟合,并且求分类决策面
for i=1:10
    mw1(i)=m2(i,:)*w;
    mw2(i)=m3(i,:)*w;
end
% mw1
% mw2
[u1,d1]=normfit(mw1);
[u2,d2]=normfit(mw2);
x=(log10(d1/d2)+(u2^2/d2-u1^2/d1))/2*(u1/d1-u2/d2)
% e)求分类误差
for i=1:10
if mw1(i)>x
    c1(i)=1;
elseif mw1(i)<x
    c1(i)=-1;
end
end
for i=1:10
if mw2(i)>x
    c2(i)=-1;
elseif mw2(i)<x
    c2(i)=1;
end
end
k=0;
for i=1:10
    if (c1(i)==-1)||(c2(i)==-1)
        k=k+1;
    end
end
p=(20-k)/20
% f) 使用非最优方向w=(1.0,2.0,-1.5)’重复(d)(e)两个步骤
w=[1,2,-1.5].'
for i=1:10
    mw1(i)=m2(i,:)*w;
    mw2(i)=m3(i,:)*w;
end
% mw1
% mw2
[u1,d1]=normfit(mw1);
[u2,d2]=normfit(mw2);
x=(log10(d1/d2)+(u2^2/d2-u1^2/d1))/2*(u1/d1-u2/d2)
for i=1:10
if mw1(i)>x
    c1(i)=1;
elseif mw1(i)<x
    c1(i)=-1;
end
end
for i=1:10
if mw2(i)>x
    c2(i)=-1;
elseif mw2(i)<x
    c2(i)=1;
end
end
k=0;
for i=1:10
    if (c1(i)==-1)||(c2(i)==-1)
        k=k+1;
    end
end
p=(20-k)/20

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function w=fisher(w1,w2)  %%w1,w2为10*3的矩阵,w为线性判别方法的投影向量
u1=mean(w1(1:10,:));
u2=mean(w2(1:10,:));
S1=(w1(1,:)-u1).'*(w1(1,:)-u1);
S2=(w2(1,:)-u2).'*(w2(1,:)-u2);
for i=2:10
    S1=S1+(w1(i,:)-u1).'*(w1(i,:)-u1);
    S2=S2+(w2(i,:)-u2).'*(w2(i,:)-u2);
end
    Sw=S1+S2;
    w=inv(Sw)*(u1-u2).'






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -