📑 查看全课大纲(第 20 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
典型相关系数阵计算与代码实战
约 30 分钟
小象实战讲义 · 多元统计分析
在多元统计分析中,当两组指标存在不同量纲或数量级差异显著时,若直接使用原始协方差矩阵求解典型相关,方差较大的变量将会主导分析结果,从而扭曲真实的统计关联。因此,基于数据标准化后的相关系数矩阵进行典型相关分析(Canonical Correlation Analysis, CCA)是工业界与学术界的通用标准。本节系统推导由相关系数矩阵求解典型相关系数的特征值方程,并基于 Python 与 sklearn 库完整实现典型相关系数、典型变量得分及因子载荷的计算与实战解读。
💡 核心导读
- 消除量纲影响:通过 -score 标准化消除指标量纲与数量级差异,由样本相关阵 代替协方差阵
- 分块矩阵形式:将相关系数矩阵分块为 ,明确组内与组间关联结构
- 代数特征值方程:典型相关系数平方 为矩阵 的非零特征值
- 典型载荷与结构矩阵:通过原始变量与典型变量的相关系数解释提取因子的实际业务含义
- Python 实战落地:基于
sklearn.cross_decomposition.CCA完成从模型拟合到典型载荷提取的全流程
一、从协方差矩阵到相关系数矩阵
1.1 为何必须进行标准化?
设两组随机向量分别为 和 。在实际业务中, 组可能是人体的生理指标(如身高以厘米计、体重以公斤计、血压以毫米汞柱计),而 组可能是运动机能指标(如肺活量以毫升计、引体向上以次数计)。
不同变量的方差可能相差数个数量级。若不对数据做无量纲化处理,典型相关分析所求得的线性组合系数将严重受各变量方差大小的牵制。
为此,对各变量进行零均值、单位方差的标准化处理:
经过标准化后,变量的协方差矩阵即转化为样本相关系数矩阵: 其中:
- 为第一组变量自身的互相关阵,对角线全为 1;
- 为第二组变量自身的互相关阵,对角线全为 1;
- 为两组变量之间的互相关阵。
二、典型相关变量的代数求解推导
2.1 优化问题构建
设标准化变量的线性组合为典型变量:
要求解权向量 和 ,使得 与 的相关系数最大化:
由于线性组合乘以非零常数不改变相关系数,我们引入方差归一化约束条件: 此时目标函数转化为在约束条件下最大化协方差:
2.2 特征方程的建立
构造拉格朗日函数:
分别对向量 和 求一阶偏导并令其为零向量:
将第一式左乘 ,第二式左乘 ,结合约束条件 与 : 即拉格朗日乘子 ,它恰好等于典型相关系数!
假定 与 均为可逆满秩阵,由第二式解得: 代入第一式中,消去 可得: 两边同时左乘 ,整理得标准特征值方程:
同理,若先消去 ,可得关于向量 的特征值方程:
2.3 结论与性质
- 矩阵 与 具有完全相同的非零特征值;
- 非零特征值的个数为 ,且所有特征值落在区间 内;
- 特征值按降序排列:;
- 第 对典型相关系数即为 ,对应的特征向量经过归一化后即为典型系数向量 与 。
三、典型变量得分与典型结构矩阵
在完成典型系数的计算后,需要对典型变量代表的统计学含义进行解释。通常借助两类重要矩阵:
3.1 典型变量得分(Canonical Variate Scores)
将标准化样本矩阵 与 分别代入系数向量: 向量 与 记录了每个样本在第 对典型变量上的得分,可用于后续的低维投影作图与聚类分析。
3.2 典型载荷矩阵(Canonical Loadings)
典型载荷定义为原始标准化变量与典型变量之间的简单相关系数: 载荷绝对值越接近 1,表示该原始变量受该典型变量的影响越大,这对解释典型变量的实际物理含义至关重要。
四、Python 代码实战:基于 sklearn 的 CCA
在工程实践中,推荐直接使用 sklearn.cross_decomposition.CCA。下面我们通过模拟两组含有共性潜变量的高维指标,演示从拟合、相关系数计算到典型载荷分析的全流程。
import numpy as np
from sklearn.cross_decomposition import CCA
np.random.seed(42)
n = 120
t1 = np.random.normal(0, 1, size=n)
t2 = np.random.normal(0, 1, size=n)
X = np.column_stack([
0.8 * t1 + np.random.normal(0, 0.4, size=n),
0.7 * t1 + np.random.normal(0, 0.5, size=n),
0.4 * t2 + np.random.normal(0, 0.6, size=n)
])
Y = np.column_stack([
0.75 * t1 + np.random.normal(0, 0.4, size=n),
0.6 * t1 + 0.5 * t2 + np.random.normal(0, 0.4, size=n)
])
cca = CCA(n_components=2)
cca.fit(X, Y)
X_c, Y_c = cca.transform(X, Y)
r1 = np.corrcoef(X_c[:, 0], Y_c[:, 0])[0, 1]
r2 = np.corrcoef(X_c[:, 1], Y_c[:, 1])[0, 1]
x_loadings = np.array([np.corrcoef(X[:, j], X_c[:, 0])[0, 1] for j in range(3)])
y_loadings = np.array([np.corrcoef(Y[:, j], Y_c[:, 0])[0, 1] for j in range(2)])
print("第一典型相关对相关系数:", round(float(r1), 4))
print("第二典型相关对相关系数:", round(float(r2), 4))
print("X 组各变量在第一典型变量上的载荷:", np.round(x_loadings, 4).tolist())
print("Y 组各变量在第一典型变量上的载荷:", np.round(y_loadings, 4).tolist())代码输出与结果解读
运行上述脚本,控制台输出如下统计结果:
第一典型相关对相关系数: 0.8074
第二典型相关对相关系数: 0.4609
X 组各变量在第一典型变量上的载荷: [0.9542, 0.7928, 0.2911]
Y 组各变量在第一典型变量上的载荷: [0.8887, 0.9006]实战结果解读:
- 典型相关强度:第一典型相关对的相关系数高达
0.8074,表明两组变量之间存在极强的线性共线性;第二对典型相关系数降至0.4609,反映了次级变异结构的关联。 - X 组变量载荷结构:变量 和 在第一典型变量上的载荷分别达到
0.9542和0.7928,而 仅为0.2911。这清晰表明第一典型变量主要由前两个指标驱动。 - Y 组变量载荷结构:变量 与 在第一典型变量上的载荷均在
0.88以上,说明第一典型变量对准确捕获了两组变量受公共潜在信号 驱动的整体联动特征。
📝 动手练一练
- 特征值方程推导:已知 组有 2 个变量, 组有 3 个变量,且两组变量相关系数矩阵非奇异。请问矩阵 的阶数是多少?其非零特征值最多有几个?
- 典型载荷计算:在某典型相关分析中,第一典型变量权向量为 , 组变量的相关系数矩阵为 。请计算两个原始变量在第一典型变量上的因子载荷。
参考答案:
- 组维度 , 组维度 。矩阵 为 , 为 , 为 , 为 。因此相乘得到的矩阵 阶数为 。其非零特征值的最大个数为 个。
- 依据典型载荷向量公式 : 注:在实际满足方差约束 时,载荷绝对值均严格 。
本章小结
本节重点讨论了基于相关系数矩阵求解典型相关分析的理论与工程实战:
- 标准化必要性:多元统计中消除量纲和方差悬殊的关键在于基于样本相关阵开展分析;
- 代数本质:典型相关系数的平方等价于广义特征值方程的特征值,典型权向量即为对应的特征向量;
- 典型载荷:通过原始变量与典型变量的互相关(因子载荷),为抽象的典型综合指标赋予具体的业务涵义;
- Python 工具链:熟练运用
sklearn.cross_decomposition.CCA即可高效完成模型训练与指标提取。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问