数学建模社区-数学中国

标题: 求助--建模中MATLAB马氏距离计算--详细过程 [打印本页]

作者: dukaibing    时间: 2009-8-9 12:11
标题: 求助--建模中MATLAB马氏距离计算--详细过程
有以下数据:
6只Apf蠓虫的触长,翅膀数据
触长/mm1.141.181.21.261.281.3
翅长/mm1.781.961.86221.96
9只Af蠓虫触长,翅膀数据
触长/mm1.241.361.381.381.381.41.481.541.56
翅长/mm1.721.741.641.821.91.71.821.822.08

编程序实现求:两类蠓虫到另一类蠓虫总体的马氏距离
Apf=[1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96];
Af=[1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];

d11=sqrt([mahal(Apf,Apf),mahal(Apf,Af),mahal(Af,Apf),mahal(Af,Af)])

得到结果:
Apf类到Apf类马氏距离/mm1.66661.71620.80250.85360.88981.4535   
Apf类到Af类马氏距离/mm3.40314.17343.14543.54343.31012.7175   
Af类到Apf类马氏距离/mm4.04726.44898.66855.59194.32498.10838.11499.63936.5871
Af类到Af类马氏距离/mm1.84420.57551.39650.5431.26340.93450.77831.55292.1296



我的问题是: 如:  Apf类到Apf类马氏距离    是怎样计算出来的?
   我知道有马氏距离计算公式:
那么具体的计算过程是怎样的呢?望知道这方面知识的高手能指点一下!   
最好能举例,指点一下具体的操作过程。
    感激不尽
作者: dukaibing    时间: 2009-8-9 12:12
补充:如按照D2 = MAHAL(Y,X)来的话,令X,Y分别等于一个具体的矩阵,然后算其  该类样本的均值与协方差矩阵,然后进行计算。可以按照步骤进行吗?
作者: 追梦者    时间: 2009-8-9 16:18
本帖最后由 追梦者 于 2009-8-10 11:30 编辑

恩,我好像见过这样的题目不过是用神经网络做的;
如上述题目:
p=[1.14 1.18 1.2 1.26 1.28 1.3   1.24 1.36 1.38 1.38 1.38 1.4 1.48
    1.78 1.96 1.86 2 2 1.96 1.72 1.74 1.64 1.82 1.9 1.7 1.82 ];%两种昆虫的数值
%说的具体先,上面两种昆虫的数据你是这样写的
%Apf=[1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96];
%Af=[1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
%在神经网络中p=[1.14 1.18 1.2 1.26 1.28 1.3   1.24 1.36 1.38 1.38 1.38 1.4 1.48
%1.78 1.96 1.86 2 2 1.96 1.72 1.74 1.64 1.82 1.9 1.7 1.82 ]=[Apf',Af']注意要转制加上“ ' ”。因为神经网络中每次训练的向量是以p中每列向量作为训练向量的。
t=[ones(1,6),2*ones(9,1)];%前六个的昆虫我们设为第1类。后面九个昆虫我们设为第2类就是[1 1 1 1 1 1 2 2 2 2 2 2 2 2 2];
t=ind2vec(t);%将上面的t转化为0-1变量,1表示1在第一个,2表示1在第二个;转化后的t即为[1 1 1 1 1 1 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 1 1 1 1 1 1 1 1 1]
net=newlvq(minmax(p),11,[6/15  9/15]);%创建函数,minmax(p)表示p中每行的最大最小值,11表示中间层的神经元个数。[6/15  9/15]表示两类昆虫的占的比例。
net.trainparam.goal=0.001;%训练需要达到的目标的精度
net.trainparam.epochs=1000;%训练次数
net=train(net,p);%开始训练
假如我要判断u=[1.2 5.3 3.6;
                         1.45 5.6.3]三个昆虫
y=sim(net,u);
y=vec2ind(y);%将0-1变量转化为1,2。
%对了除此之外,假如说我有三类昆虫,我也可以设1,2,3;
不知解释的是否明了,O(∩_∩)O~有问题再向我发信息就行了,只要看到了一定回,不会的话,也会回的O(∩_∩)O~
作者: 追梦者    时间: 2009-8-9 17:32
本帖最后由 追梦者 于 2009-8-9 18:58 编辑

恩,以前也做过马氏判别法,不过忘得差不多了,只有几个记得O(∩_∩)O~,不知能不能帮上忙
你写的求和符号,你应该知道他代表协方差矩阵。
%定义一个函数
function y=mashi(Apf,Af,x)
%Apf和Af的协方差矩阵
a=cov(Apf);
b=cov(Af);
%计算距离并判别,u是触长和翅膀的均值向量
u_Apf=[sum(Apf(1,:/size(Apf,2);sum(Apf(2,:/size(Apf,2)]
u_Af=[sum(Af(1,:/size(Af,2);sum(Af(2,:/size(Af,2)];
d1^2=(x-u_Apf)'*inv(a)*(x-u_Apf);
d1^2=(x-u_Af)'*inv(b)*(x-u_Af);
if d1^2<d1^2
y=1;
else
y=0;
end
__________________________________________________________________________________
%"data.m"
Apf=[1.14,1.78;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96];
Af=[1.24,1.72;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
x=[1.2 5.3 3.6;
      1.45 5.6.3]
__________________________________________________________________________________
%"main.m"
data;
y=mashi(Apf,Af,x);
————————————————————————————————————————————————————
得出结论。
在MATLAB中内置函数mahal大体意思就这样O(∩_∩)O~
作者: 追梦者    时间: 2009-8-9 17:35
恩,忘了提醒一下,上面的冒号“:”我是用中文打的。运行时要改下O(∩_∩)O~
作者: 追梦者    时间: 2009-8-9 17:38
对了,我上面做的是判别
作者: 东方明珠-WDZYQ    时间: 2009-8-9 17:38
新东西,得接触哈
作者: dukaibing    时间: 2009-8-10 09:42
3# 追梦者


谢谢您的帮忙!您能将您用神经网络做出来的程序  注释一下  吗?    谢谢了
作者: zyp0807523220    时间: 2010-6-26 00:05
好·······································
作者: chenhuiyu    时间: 2011-9-4 00:35
我就是要找这个呢
作者: chenhuiyu    时间: 2011-9-4 00:36
挺有用的,先学习学习先
作者: (^o^)/~    时间: 2012-7-11 10:47
谢谢啦 呵呵

作者: 秋leaves    时间: 2012-7-11 11:00
?哪个马氏啊……




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5