核典型关联分析(KCCA)算法原理
2015-07-24 16:34
423 查看
Kernel Canonical Correlation Analysis
1、CCA的不足
普通的线性CCA只能探索两组随机变量之间的线性关系,而在实际情况中,变量间的关系往往是非线性的,于是非线性的CCA出现了,KCCA就是一种常用的非线性CCA算法。KCCA是把核函数的思想引入CCA中,思想是把低维的数据映射到高维的特征空间(核函数空间),并通过核函数方便地在核函数空间进行关联分析。2、算法实现
首先引入一个把数据映射到高维特征空间的的映射(从m维到n维的映射):ϕ:x=(x1,...,xm)↦ϕ(x)=(ϕ1(x),...,ϕn(x)),(m<n)\phi: \textbf{x} = (x_1,...,x_m) \mapsto \phi(\textbf{x}) = (\phi_1(\textbf{x}),...,\phi_n(\textbf{x})) , (m
核Kernel是指一个函数K,对所有的x,z\textbf{x},\textbf{z}有:
K(x,z)=⟨ϕ(x),ϕ(z)⟩K(\textbf{x},\textbf{z}) = \langle \phi(\textbf{x}), \phi(\textbf{z})\rangle
设两组向量的样本矩阵为:
Xp×N=(X1,...,XN),Yq×N=(Y1,...,YN)X_{p\times N} = (\textbf{X}_1,...,\textbf{X}_N),Y_{q\times N} = (\textbf{Y}_1,...,\textbf{Y}_N)
设ϕX,ϕY\phi_X,\phi_Y分别表示作用于X,YX,Y上的变换,即:
ϕX(X)=(ϕX(X1),...,ϕX(XN)),ϕY(Y)=(ϕY(Y1),...,ϕY(YN))\phi_X(\textbf{X}) = (\phi_X(\textbf{X}_1),...,\phi_X(\textbf{X}_N)),\phi_Y(\textbf{Y}) = (\phi_Y(\textbf{Y}_1),...,\phi_Y(\textbf{Y}_N))
变换后的ϕX(X)、ϕY(Y)\phi_X(\textbf{X})、\phi_Y(\textbf{Y})均为n x N维矩阵。之后和线性CCA类似,我们希望找到两个n维向量wX,wYw_\textbf{X},w_\textbf{Y},使得u=wTXϕX(X)u=w_X^T\phi_X(\textbf{X})与 v=wTYϕY(Y)v=w_Y^T\phi_Y(\textbf{Y})相关系数ρ\rho最大。
在X、YX、Y上定义核矩阵KX、KY(均为N×N)K_X、K_Y(均为N\times N)如下:
KX(i,j)=KX(Xi,Xj)=ϕX(Xi)TϕX(Xj),KY(i,j)=KY(Yi,Yj)=ϕY(Yi)TϕY(Yj)K_X(i,j) = K_X(X_i,X_j) =\phi_X(\textbf{X}_i)^T\phi_X(\textbf{X}_j),K_Y(i,j) = K_Y(Y_i,Y_j) = \phi_Y(\textbf{Y}_i)^T\phi_Y(\textbf{Y}_j)
该问题可以转化为一个优化问题:
L(wX,wY,λX,λY)=αTMα−λX2αTLα−λY2βTNβL(w_{X},w_{Y},\lambda_X,\lambda_Y) = \alpha^TM\alpha-\frac{\lambda_X}{2}\alpha^TL\alpha-\frac{\lambda_Y}{2}\beta^TN\beta
其中:
M=1NKTXJKYM = \frac{1}{N}K_X^TJK_Y
L=1NKTXJKX+ηKXL = \frac{1}{N}K_X^TJK_X+\eta K_X
N=1NKTYJKY+ηKYN = \frac{1}{N}K_Y^TJK_Y+\eta K_Y
J=I−11TJ = I - \textbf{1}\textbf{1}^T
1=(1,...,1)T\textbf{1} = (1,...,1)^T
参考《CCA在数字图像处理中的应用研究》
《canonical correlation analysis: an overview with application to learning methods》
由理论推导可得:
wX=∑Ni=1αiϕX(Xi),wY=∑Ni=1βiϕY(Yi)w_X = \sum_{i=1}^{N}\alpha_i\phi_X(X_i),w_Y = \sum_{i=1}^{N}\beta_i\phi_Y(Y_i)
则有:
u=wTXϕX(X)=∑Ni=1αiϕX(Xi)TϕX(X)u = w_X^T\phi_X(X) = \sum_{i=1}^{N}\alpha_i\phi_X(X_i)^T\phi_X(X) (2.1)
v=wTYϕY(Y)=∑Ni=1βiϕY(Yi)TϕY(Y)v = w_Y^T\phi_Y(Y) = \sum_{i=1}^{N}\beta_i\phi_Y(Y_i)^T\phi_Y(Y) (2.2)
具体的KCCA实现步骤如下:
(1)由样本X、Y以及核函数K(x,z)K(\textbf{x},\textbf{z})的定义计算核矩阵KX、KYK_X、K_Y
高斯核函数为:
K(x,z)=e−∣x−z∣22σ2K(\textbf{x},\textbf{z}) = e^{-\frac{\lvert \textbf{x}-\textbf{z}\rvert^2}{2\sigma^2}}
(2)计算M、N、L;
(3)由以下式子计算α、β\alpha、\beta:
L−1MN−1MTα=λ2αL^{-1}MN^{-1}M^T\alpha = \lambda^2\alpha
N−1MTL−1Mβ=λ2βN^{-1}M^TL^{-1}M\beta = \lambda^2\beta
(4)由2.1、2.2式计算u,vu,v:
u=∑Ni=1αiKX(Xi,X)u = \sum_{i=1}^{N}\alpha_iK_X(X_i,X)
v=∑Ni=1βiKY(Yi,Y)v= \sum_{i=1}^{N}\beta_iK_Y(Y_i,Y)
通过很多样本对X,YX,Y可以得到很多u,vu,v对,通过这些u,vu,v对可以画图观察u,vu,v之间的线性相关性,并计算相关系数ρ(u,v)\rho(u,v),其实最后计算u,vu,v可以直接利用核矩阵和α,β\alpha,\beta求解。
相关文章推荐
- Linux网络编程之使用TCP传输文件
- 如何取得Spring管理的bean (请用第3种方法):
- 【源代码】java.util.Stack & Queue
- uva 10594 Data Flow (最小费最大流+题目给的数据有错)
- Codeforces Round #313 (Div. 2) C Gerald's Hexagon 计数
- HTML DOM submit() 方法
- jquery ajax备用
- (转)反转单链表的几种方法
- 统计难题
- Espresso——Android测试工具Espresso简介
- zoj1715
- android布局-GridLayout
- KEIL/IAR 与 Doxygen 快速上手 - 嵌入式编程的注释管理小技巧
- 聊聊并发——HashMap、HashTable及ConcurrentHashMap
- JFinal的设计思想和理念是什么?有哪些创新点?
- 照相机的曝光和白平衡
- Uniyt : 场景LoadLevel时资源和对象的处理流程
- 【暴力搜索】[HDU 1518]Square
- hdu 1080 Human Gene Functions
- 还原数据库出错