Canonical Correlation Analysis(典型关联分析)

CCA原理:
关联分析,从线性回归开始!
同样是找样本之间的关系,在线性回归中是找通过拟合找出x和y的关系,当有多个维度时,也是一样找出Y=WX就可以了,但是这样我们会发现一个事实,那就是这个式子所代表的意义是Y的每个特征都于X所有的特征相关联,而它本身之间却没有联系。回归原点,如果将X和Y同等对待,考虑他们之间的相关性可以吗?可以的,Pearson告诉已经了我们:

ρ(X,Y)=cov(X,Y)D(X)D(Y)
其中cov(X,Y)是X和Y之间的协方差,而D(X),D(Y)是方差。那么最大化这个式子不就可以了?那对于多维的X,Y分别求使它们的W最大就行了,即求 w1x1+w2x2+...wnxn w1y1+w2y2+...wnyn 中的W,为区别起见分别取名为a和b,两个式子分别等于u,v,即 u=aTX,v=bTY 。那么此时优化的代价函数为:
argmaxa,bcov(u,v)D(u)D(v)

可以求出u和v的方差,协方差为
D(u)=D(aTX)=1ni=1n(aTxiaTE(xi))2=aTE(XXT)a
D(v)=D(bTY)=1ni=1n(bTyibTE(yi))2=bTE(YYT)b
cov(u,v)=cov(aTX,bTY)=E((aTX)(bTY)T)=aTE(XYT)b

之后带入原式就可以了,所以我们新的代价函数就为:
argmaxa,baTE(XYT)baTE(XXT)abTE(YYT)b

为了避免a和b同时扩大n倍后仍然产生符合条件的解,所以和 SVM一样,固定分母,优化分子,即损失函数变为:
argmaxa,baTE(XYT)b

s.t.aTE(XXT)a=1,bTE(YYT)b=1

求解上式有2种方法:

1.拉格拉日:
构造拉格朗日算子:

L=aTE(XYT)bλ2(aTE(XXT)a1)θ2(bTE(YYT)b1)

分别对a,b求导,可得:
λ=θ=aTE(XYT)b

发现竟然和损失函数一样,那么只要找出最大的 λ 就行了。

2.奇异值分解(Singular Value Decomposition,SVD

这里写图片描述

CCA应用:
CCA参数说明:
CCA(copy=True, max_iter=500, n_components=2, scale=True, tol=1e-06)

copy=True:是否复制
max_iter=500:迭代数阈值
n_components=2:组成树
scale=True:是否分割数据
tol=1e-06:迭代容忍度

sklearn作CCA:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cross_decomposition import CCA


n = 500
#两种噪音
l1 = np.random.normal(size=n)
l2 = np.random.normal(size=n)

latents = np.array([l1, l1, l2, l2]).T
X = latents + np.random.normal(size=4 * n).reshape((n, 4))
Y = latents + np.random.normal(size=4 * n).reshape((n, 4))

X_train = X[:n // 2]#切分数据集
Y_train = Y[:n // 2]
X_test = X[n // 2:]
Y_test = Y[n // 2:]

#计算相关系数Corr
print("Corr(X)")
print(np.round(np.corrcoef(X.T), 2))
print("Corr(Y)")
print(np.round(np.corrcoef(Y.T), 2))

cca = CCA(n_components=2)
cca.fit(X_train, Y_train)
X_train_r, Y_train_r = cca.transform(X_train, Y_train)
X_test_r, Y_test_r = cca.transform(X_test, Y_test)

plt.scatter(X_train_r[:, 0], X_train_r[:, 1], label="train",
            marker="*", c="b", s=50)
plt.scatter(X_test_r[:, 0], X_test_r[:, 1], label="test",
            marker="*", c="r", s=50)
plt.show()

>
Corr(X)
[[ 1. 0.46 0.02 0.04]
[ 0.46 1. 0.03 -0.06]
[ 0.02 0.03 1. 0.51]
[ 0.04 -0.06 0.51 1. ]]
Corr(Y)
[[ 1. 0.49 -0.07 -0.11]
[ 0.49 1. 0.03 -0.02]
[-0.07 0.03 1. 0.57]
[-0.11 -0.02 0.57 1. ]]

这里写图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值