📑 查看全课大纲(第 4 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
样品与变量相似性度量(距离与相似系数)
约 48 分钟
样品与变量相似性度量
小象实战讲义 · 多元统计分析
聚类分析是多元统计中探索数据内在结构的重要工具。在正式进行聚类之前,我们首先需要解决一个根本问题:如何量化地衡量两个对象(无论是样品还是变量)之间的“相似”或“相异”程度?本节将系统介绍用于度量相似性的核心概念——距离与相似系数,它们是后续所有聚类方法的基石。学完本节,你将能根据数据特点,为聚类分析选择合适的相似性度量标准。
💡 核心导读
- 距离 vs 相似系数:距离衡量“相异性”,值越大越不相似;相似系数衡量“相似性”,值越大越相似。
- 样品相似性度量:重点掌握明氏距离(含欧氏距离、曼哈顿距离)、马氏距离和兰氏距离的公式、优缺点及适用场景。
- 变量相似性度量:理解夹角余弦和相关系数(皮尔逊相关系数)的几何与统计意义。
- 数据预处理:了解标准化(如极差正规化)对消除量纲影响的重要性。
- Python实战:使用
scipy和numpy快速计算多种距离与相似系数。
一、聚类分析概述与相似性度量的意义
聚类分析旨在根据研究对象在多个特征上的表现,将其划分为若干个“相似”的组(类)。与有监督的分类(如判别分析)不同,聚类是一种无监督学习方法,我们事先并不知道数据应分为几类,也不知道每个样品属于哪一类,完全由数据本身的内在结构决定。
核心挑战:如何定义“相似”?例如,将美国各州按人口、面积、教育程度等指标聚类,我们无法像人眼识别散点图上的聚集点那样直观判断。当数据维度很高时,必须依赖数学上的相似性度量。
根据聚类对象的不同,聚类分析分为:
- Q型聚类:对样品(行)进行分类。例如,将不同的城市聚成几类。
- R型聚类:对变量(列)进行分类。例如,探究“人口”和“面积”这两个指标是否可归为反映“规模”的同一类变量。
无论是Q型还是R型,第一步都是选择合适的度量方法来计算两两对象之间的相似/相异程度。
二、样品相似性的度量:距离
对于包含 个样品、 个变量的数据矩阵 ,任何两个样品 与 (即矩阵的第 行和第 行)之间的相似性,可以通过它们在 维空间中的“距离”来刻画。距离 越小,表示两个样品越相似。
1. 明考夫斯基距离(明氏距离)
明氏距离是一个通用的距离族,其公式为: 通过取不同的 值,可以得到几种常用的特例:
- 绝对距离(曼哈顿距离) ():
- 欧氏距离 ():
- 切比雪夫距离 ():
明氏距离的不足与改进:
- 受量纲影响:各变量量纲(单位)不同或数量级相差悬殊时,计算结果失真。
- 改进:先对数据进行标准化(如极差正规化、Z-score标准化),再用标准化后的数据计算距离。
- 未考虑变量变异性与相关性:欧氏距离默认各坐标轴贡献同等,且变量间相互独立。若变量方差差异大或存在相关性,欧氏距离不能如实反映情况。
- 改进:对坐标加权,或采用更全面的马氏距离。
2. 马氏距离
设样品 与 来自均值为 、协方差矩阵为 的总体 ,则它们之间的马氏距离定义为: 实践中,总体协方差阵 未知,常用样本协方差阵 代替。
马氏距离的优点:
- 广义欧氏距离:当 (单位阵)时,马氏距离退化为欧氏距离的平方。
- 克服量纲影响:由于 的调节作用,计算结果不受各指标量纲影响。
- 考虑变异性与相关性: 的对角线元素(方差)调整了各变量的离散程度,非对角线元素(协方差)则考虑了变量间的相关性。
- 线性变换不变性:对原始数据作线性变换,马氏距离保持不变。
3. 兰氏距离
兰氏距离适用于所有 的情况,其公式为:
兰氏距离的特点:
- 自身标准化:通过除以 消除了量纲的影响。
- 对奇异值不敏感:适合处理高度偏倚(有极端大值)的数据。
- 未考虑指标相关性:与明氏距离一样,它没有考虑变量之间的相关性。
4. 距离选择与数据标准化原则
距离选择需综合考虑:
- 距离公式的实际意义。
- 数据预处理方法及后续拟采用的聚类方法。
- 研究对象的特点和计算量(如马氏距离计算量较大)。
数据标准化常用方法:
- 中心化:,使每列均值为0,协方差阵不变。
- 标准化(Z-score):,使每列均值为0,标准差为1。
- 极差正规化:,将数据压缩到 区间。
- 对数变换:,将指数型数据结构转换为线性结构。
三、变量相似性的度量:相似系数
对于R型聚类,我们关心变量之间的相关性或“方向”的相似性。常用的度量是相似系数 ,其绝对值越接近1,表示变量 与 (数据矩阵的第 列和第 列)越相似。
1. 夹角余弦
将变量 与 视为 维空间(由 个样品张成)中的两个向量,它们夹角的余弦值为: 若两变量正向关系密切,夹角 接近0, 接近1;若负向关系密切,夹角 接近 , 接近 。因此应以 衡量两变量的相似程度。
2. 相关系数(皮尔逊相关系数)
变量 与 的相关系数定义为: 相关系数实质上是对数据中心化后的夹角余弦。当 时完全线性相关, 时无线性相关。
3. 从相似系数到距离
相似系数 越大表示越相似,这与距离的含义相反。为了用距离进行聚类,常将相似系数转化为距离,例如: 这样, 越小,表示两变量越相似。
四、Python实战:计算距离与相似系数
下面我们使用 Python 演示如何计算样品间的多种距离以及变量间的相关系数。
"""
多元统计分析 3.1 样品与变量相似性度量
实战演示:计算欧氏距离、曼哈顿距离、余弦距离、马氏距离与皮尔逊相关系数
"""
import numpy as np
from scipy.spatial.distance import cdist
# 固定随机种子,确保结果可复现
np.random.seed(42)
# 构造一个包含5个样品、4个变量的示例数据矩阵 X (5x4)
X = np.array([
[1.0, 2.0, 3.0, 4.0], # 样品0
[1.5, 1.8, 3.2, 4.5], # 样品1
[5.0, 6.0, 7.0, 8.0], # 样品2
[5.2, 5.9, 7.1, 8.2], # 样品3
[2.0, 2.5, 1.0, 0.5] # 样品4
])
print("数据矩阵 X (5个样品 x 4个变量):")
print(X)
print()
# 1. 计算样品间的距离矩阵 (Q型聚类)
# 使用 scipy 的 cdist 函数,高效计算所有样品对之间的距离
dist_euclidean = cdist(X, X, metric='euclidean') # 欧氏距离
dist_cityblock = cdist(X, X, metric='cityblock') # 曼哈顿距离(绝对距离)
dist_cosine = cdist(X, X, metric='cosine') # 余弦距离 (1 - 余弦相似度)
print("欧氏距离矩阵 (样品间):")
print(np.round(dist_euclidean, 4))
print()
# 2. 计算马氏距离
# 马氏距离需要数据的协方差逆矩阵
cov_mat = np.cov(X, rowvar=False) # rowvar=False 表示每列是一个变量
# 为避免协方差矩阵奇异,添加一个小的正则项
cov_mat_reg = cov_mat + np.eye(cov_mat.shape[0]) * 1e-4
inv_cov = np.linalg.inv(cov_mat_reg) # 计算协方差逆矩阵
# 使用 cdist 计算马氏距离,需传入逆协方差矩阵 VI
dist_mahalanobis = cdist(X, X, metric='mahalanobis', VI=inv_cov)
print("马氏距离矩阵 (样品间):")
print(np.round(dist_mahalanobis, 4))
print()
# 3. 计算变量间的皮尔逊相关系数矩阵 (R型聚类)
var_corr = np.corrcoef(X, rowvar=False) # rowvar=False 计算列(变量)间的相关系数
print("变量间的皮尔逊相关系数矩阵:")
print(np.round(var_corr, 4))
print()
# 4. 提取并展示关键结果
print("=== 关键结果对比 ===")
print(f"样品 0 与样品 1 的欧氏距离: {dist_euclidean[0, 1]:.4f}")
print(f"样品 0 与样品 2 的欧氏距离: {dist_euclidean[0, 2]:.4f}")
print(f"样品 0 与样品 1 的曼哈顿距离: {dist_cityblock[0, 1]:.4f}")
print(f"样品 0 与样品 1 的余弦距离: {dist_cosine[0, 1]:.4f}")
print(f"样品 0 与样品 1 的马氏距离: {dist_mahalanobis[0, 1]:.4f}")
print(f"变量 0 与变量 1 的皮尔逊相关系数: {var_corr[0, 1]:.4f}")运行结果与解读: 运行上述代码,关键输出如下:
样品 0 与样品 1 的欧氏距离: 0.7616
样品 0 与样品 2 的欧氏距离: 8.0000
样品 0 与样品 1 的曼哈顿距离: 1.4000
样品 0 与样品 1 的余弦距离: 0.0047
样品 0 与样品 1 的马氏距离: 2.6873
变量 0 与变量 1 的皮尔逊相关系数: 0.9905- 样品相似性:样品0和1在所有距离度量下都显示出较小的值(欧氏0.76,曼哈顿1.4,余弦0.0047,马氏2.69),表明它们非常相似。样品0和2的欧氏距离为8.0,差异显著。
- 变量相关性:变量0和1的相关系数高达0.9905,说明这两个变量高度线性相关,在R型聚类中很可能被聚为一类。
- 度量对比:马氏距离由于考虑了变量间的协方差结构,其数值标度与欧氏距离不同,但相对大小关系(谁更近)保持一致。
📝 动手练一练
- 距离计算:对于上述数据矩阵
X,请手动验证样品0与样品1的曼哈顿距离是否为1.4。(提示:对每个变量取绝对差后求和) - 相似系数转换:假设两个变量 和 的夹角余弦 。如果采用距离 进行聚类,计算出的距离是多少?这个距离值表明这两个变量的相似程度如何?
参考答案:
- ,验证正确。
- 。距离值为0.6(在0到1之间),属于中等偏小的距离,表明这两个变量有较强的正相关性,相似度较高。
本章小结
本节奠定了聚类分析的基础——相似性度量。我们系统地学习了:
- 样品间距离:明氏距离(欧氏、曼哈顿)、马氏距离、兰氏距离的公式、几何意义、优缺点及改进方法。
- 变量间相似系数:夹角余弦与相关系数的定义与联系,以及如何将其转化为距离。
- 核心思想:选择合适的度量必须结合数据特点(量纲、变异性、相关性)和分析目的。
- 实践工具:掌握了使用 Python (
scipy,numpy) 快速计算多种距离与相关系数的方法。
行动清单:
- 审视你的数据:打开一个数据集,观察各变量的量纲和分布,判断是否需要标准化。
- 尝试不同度量:对同一份数据,分别用欧氏距离和马氏距离计算样品间距离,观察聚类结果(如通过热力图)的差异。
- 探索变量关系:计算数据集中所有变量对的相关系数矩阵,找出高度相关(如 )的变量组,思考它们是否可能反映同一潜在维度。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问