最近在看CCA,为了证明CCA的性能,自己写了一个matlab代码
有关CCA的网页 http://www.cnblogs.com/jerrylead/archive/2011/06/20/2085491.html
Y1=[1,0;1,0;1,1;0,1;0,1;1,1;1,0;1,0];
X1=[-5,3;-4,3;-2,2;-1,1;2,0.5;3,2;6,3;7,4];
mean1=mean(X1);%0均值处理
for i=1:8
X1(i,:)=X1(i,:)-mean1;
end
mean1=mean(Y1);
for i=1:8
Y1(i,:)=Y1(i,:)-mean1;
end
M=inv(X1'*X1+eye(2))*(X1'*Y1*inv(Y1'*Y1+eye(2))*Y1'*X1);%求得特征值分解目标函数
[D,I]=eigs(M);
w=D(:,1);%求得投影向量
X2=X1*w;%降维
0均值处理后的Y1
0均值处理后的X1
降维后的X1
最后我们来看看降维后的数据,X2,X2中第1、2、7、8都是属于第一类,投影降维后的数据X2中就是比较近,第3、6个数据即属于第一类也属于第二类也比较近,第4、5数据属于第二类也是比较近的,可见他的投影方向完全不是PCA的样子,而是与LDA比较像,他是LDA在多标签情况下的延伸。bingo