典型相关分析CCA附算法应用及程序Word格式.docx
《典型相关分析CCA附算法应用及程序Word格式.docx》由会员分享,可在线阅读,更多相关《典型相关分析CCA附算法应用及程序Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
和
之间具有最大的相关性,
为第一对典型变量;
同
理,寻找第二对投影方向
得到第二对典型变量
使其与第一对典型变量不相关,且
之间又具有最大相关性。
这样下去,直到x与y的典型变量提取完毕为止。
从而x与y之间的相关性分析,只需通过分析少数几对典型变量的关系即可达到目的。
3、CCA算法详解
(3)
考虑到:
的极值只与
和
的方向有关,而与它们的大小无关,为了得到唯一解不失一般性,加入限制条件:
(4)
问题变为在约束条件式下,求使准则函数式取最大值的典型投影矢量对
求解上述优化问题,可定义拉格朗日函数:
(5)
分别对
求导数,并令为零,得到:
(6)
(7)
(8)
(9)
对H进行奇异值分解:
分别将
,
,…
与
看做是变换后的特征分量:
(14)
(15)
(16)
投影后的组合特征用于分类,其中变换矩阵为:
(17)
4、典型相关分析应用实例
欲研究儿童形态与肺通气功能的关系,测得某小学40名8~12岁健康儿童(身高X1,体重X2,胸围X3)与肺通气功能(肺活量Y1,静息通气Y2和每分钟最大通气量Y3),分析儿童形态和肺通气指标的相关性,确定典型变量的对数。
x1=[140.6,135.7,140.2,152.1,132.2,147.1,147.5,130.6,154.9,142.4,136.5,162,
148.9,136.3,159.5,165.9,134.5,152.5,138.2,144.2];
x2=[43.7,39.5,48,52,36,45,47,38,48,42,38,58,42,33,49,55,41,53,35.5,42];
x3=[77,63,75,88,62,78,76,61,87,74,69,95,80,68,87,93,61,83,66,76];
y1=[2.6,2,2.6,2.8,2.1,2.8,3.1,2,2.9,2.33,1.98,3.29,2.7,2.4,2.98,3.1,2.25,2.96,
2.13,2.52];
y2=[7,7,6.1,10.1,7.4,9.25,8.78,5.31,10.6,11.1,7.77,3.35,10.1,7.8,11.77,13.14,
8.75,6.6,6.62,5.59];
y3=[108,91,101,112,97,92,95,77,80,76,49,58,82,76,88,110,75,71,105,82];
(1)仿真结果分析结:
(实验平台:
Matlab2014,程序见附录)
R1=0.9282
R2=0.5302
R3=0.0081
R2==0.5302
(2)结果分析:
三幅分别对应不同特征值所对应的儿童形态与肺通气功能的关系,
显然,第一幅图的线性关系最好,即儿童形态与肺通气功能的相关性最大,变化趋势一致,进行特征融合以达到降维的目的。
六、心得体会
通过本次大作业,对小样的典型相关分析查阅了很多文献,对文献的阅读的辨别能力有了很大提升,抓住文献中的重点要点,进行深一步的理解;
其次在程序的编写中,CCA的编写从原理到算法解析再到算法的逻辑结构,一步步的将CCA的思想理解透彻并体现在MATLAB的程序中,在程序编写的过程中也遇到了很多挫折和编译失败的困惑,但是通过网上查阅和向教员请教以及同学的询问,一一得到解决,最终完成了本次大作业的撰写,其中也收获到了很多东西,学到了很多,希望以后能扎实学习,更进一步。
附录:
clearall
clc
x1=[140.6,135.7,140.2,152.1,132.2,147.1,147.5,130.6,154.9,142.4,136.5,162,148.9,136.3,159.5,165.9,134.5,152.5,138.2,144.2];
x2=[43.7,39.5,48,52,36,45,47,38,48,42,38,58,42,33,49,55,41,53,35.5,42];
x3=[77,63,75,88,62,78,76,61,87,74,69,95,80,68,87,93,61,83,66,76];
y1=[2.6,2,2.6,2.8,2.1,2.8,3.1,2,2.9,2.33,1.98,3.29,2.7,2.4,2.98,3.1,2.25,2.96,2.13,2.52];
y2=[7,7,6.1,10.1,7.4,9.25,8.78,5.31,10.6,11.1,7.77,3.35,10.1,7.8,11.77,13.14,8.75,6.6,6.62,5.59];
y3=[108,91,101,112,97,92,95,77,80,76,49,58,82,76,88,110,75,71,105,82];
mx1=sum(x1)/20;
mx2=sum(x2)/20;
mx3=sum(x3)/20;
my1=sum(y1)/20;
my2=sum(y2)/20;
my3=sum(y3)/20;
d=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
x1=x1-mx1.*d;
x2=x2-mx2.*d;
x3=x3-mx3.*d;
y1=y1-my1.*d;
y2=y2-my2.*d;
y3=y3-my3.*d;
%b=imread('
1.jpg'
);
%a=imread('
2.jpg'
%c=rgb2gray(a);
%d=rgb2gray(b);
%c=double(imresize(c,[128,128]));
%d=double(imresize(d,[128,128]));
%zushu=size(X,1);
A=[x1'
x2'
x3'
];
B=[y1'
y2'
y3'
[Wx,Wy,r,n,m]=CCA_algorithm(A,B);
%CCA_zq.(Z,zushu,2)
Z=Wx
Y=Wy
U1=Wx(:
1);
U2=Wx(:
2);
U3=Wx(:
3);
V1=Wy(:
V2=Wy(:
V3=Wy(:
figure
(1);
plot(U1,V1,'
*'
figure
(2);
plot(U2,V2,'
r*'
figure(3);
g^'
)
%CCA函数调用:
function[U,V,nmuta,nmutatwo,U_replace,V_replace]=CCA_algorithm(X,Y)
%计算典型相关分析的程序
n=size(X,1);
p=size(X,2);
q=size(Y,2);
X=X-repmat(mean(X,1),n,1);
Y=Y-repmat(mean(Y,1),n,1);
Z=[XY];
Covz=cov(Z);
S11=Covz(1:
p,1:
p);
S22=Covz(p+1:
end,p+1:
end);
S12=Covz(1:
p,p+1:
%S21=Covz(p+1:
end,1:
S21=S12'
;
k=1;
Ip=eye(p);
Iq=eye(q);
ifrank(S11)~=p
S11=S11+k*Ip;
end
ifrank(S22)~=q
S22=S22+k*Iq;
%避免出现复数,不使用S11^(-1/2)
K=S11^(-1/2)*S12*S22^(-1/2);
d=rank(K);
[U1,S1,V1]=svd(K,0);
U2=U1(:
1:
d);
V2=V1(:
A=S11^(-1/2)*U2;
B=S22^(-1/2)*V2;
%A=S11^(1/2)\U2;
%B=S22^(1/2)\V2;
U=X*A;
V=Y*B;
nmuta=diag(S1);
nmuta=nmuta(1:
%使用下面的效果是一样的
M1=inv(S11)*S12*inv(S22)*S21;
M2=inv(S22)*S21*inv(S11)*S12;
[V1,D1]=eig(M1);
[V2,D2]=eig(M2);
%归一化
gu1=V1'
*S11*V1;
gu1=1./sqrt(diag(gu1));
gu1=repmat(gu1'
p,1);
a=V1.*gu1;
gu2=V2'
*S22*V2;
gu2=1./sqrt(diag(gu2));
gu2=repmat(gu2'
q,1);
b=V2.*gu2;
d1=size(find(diag(D1)~=0),1);
%对特征值自动排序的,由大到小%d1=min(max(diag(D1),0),1);
d2=size(find(diag(D2)~=0),1);
dd=min(d1,d2);
Utwo=a(:
dd);
Vtwo=b(:
nmutatwo=sqrt(diag(D1));
%已经取过平方根了
nmutatwo=nmutatwo(1:
A1=Utwo;
B1=Vtwo;
U_replace=X*A1;
V_replace=Y*B1;
end