Z-score标准化与聚类应用
Z-score标准化与聚类应用
Z-score 标准化(又称标准分)把每个特征上的取值变换为「相对该特征均值偏离了多少个标准差」,使不同量纲、不同尺度的特征在数值上可比。它本身不是聚类「算法」,而是特征预处理中常用的线性尺度变换;在 K-means、高斯混合模型等依赖欧氏距离或二次型距离的聚类前,常与 Min-Max、稳健缩放等方法并列选型。
一、名称由来与在统计中的位置
标准分(standard score) 指观测值相对参考分布中心位置的无量纲相对位置。英文常记为 z-score,其中字母 z 与标准正态分布的传统记号一致:若参考分布为均值 (\mu)、标准差 (\sigma) 的正态总体,则
[ z = \frac{x - \mu}{\sigma} ]
在经典统计教材与正态分布分位表中,z 长期用于表示「标准正态 (N(0,1))」下的横坐标,因此把「去量纲后的偏离倍数」称为 z-score 是一种习惯记法,并非某个人名的缩写。中文语境下也常直接称 Z 分数、标准化得分。
需注意:Z-score 标准化特指用样本均值、样本标准差(或总体已知时的 (\mu,\sigma))做上述线性变换;与「Z 检验」「Fisher z 变换」等名称相近但对象不同,讨论聚类预处理时一般指前者。
二、数学定义与直观含义
对特征 (j),设样本为 (x_{1j},\ldots,x_{nj}),样本均值与样本标准差为:
[ \bar{x}j = \frac{1}{n}\sum{i=1}^{n} x_{ij}, \quad s_j = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_{ij}-\bar{x}_j)^2} ]
(不同库对「样本方差」采用 (n) 或 (n-1) 作为分母可能不同,数值略有差异。)
Z-score 变换为:
[ z_{ij} = \frac{x_{ij} - \bar{x}_j}{s_j} ]
直观理解:
- 变换后该特征在训练集上的均值约为 0,标准差约为 1(具体与实现中采用的方差分母一致)。
- 每个 (z_{ij}) 表示:第 (i) 个样本在第 (j) 维上高于或低于该维平均水平几个「典型波动单位」。
对多维数据,通常逐列独立标准化(每列用自己的 (\bar{x}_j,s_j)),除非采用刻意耦合各维的变换(如白化)。
三、主要作用与典型使用场景
| 作用 | 说明 |
|---|---|
| 消除量纲 | 把「米、千克、元」等不可比单位转为无量纲相对偏离,便于跨特征加权。 |
| 缓和尺度支配 | 未标准化时,数值范围大的特征往往在距离度量中支配结果;标准化后各维在统计意义上「同量级波动」。 |
| 衔接假设 | 部分模型(如基于高斯假设的生成模型、线性回归误差项假设)在标准化后更易满足或更易优化。 |
典型场景:
- 聚类、最近邻、RBF 核 SVM 等依赖 欧氏距离 或 内积 + 尺度敏感 的算法前的预处理。
- 梯度下降类训练神经网络时,输入标准化常有助于收敛稳定性(与 BatchNorm 等层内归一化可叠加讨论)。
- 多指标打分、主成分分析(PCA) 前常先标准化,避免方差大的变量主导主成分方向。
四、与其他归一化 / 尺度变换的对比
| 方法 | 变换形式(单特征示意) | 与 Z-score 的主要区别 |
|---|---|---|
| Z-score(标准化) | ((x-\mu)/\sigma),均值 0、方差 1 | 对异常值敏感:极端值会拉高 (s_j),可能压缩主体区间。 |
| Min-Max 缩放到 [0,1] | ((x-\min)/(\max-\min)) | 把数据压进固定区间;强依赖 (\min,\max),异常值会显著拉伸区间。 |
| MaxAbs | (x/\max|x|) | 适合稀疏、已中心在 0 附近的数据;不保证方差为 1。 |
| RobustScaler(中位数与 IQR) | ((x-\text{median})/\text{IQR}) | 抗离群优于 Z-score;不保证方差为 1,分布形状可能仍偏斜。 |
| L2 归一化(按行) | 向量除以 (\ell_2) 范数 | 作用于样本向量整体长度,与「按列」的 Z-score 目的不同;常用于文本向量、余弦相似度场景。 |
选型提示:
- 特征近似正态、无明显离群:Z-score 简单有效。
- 离群点多:优先尝试 RobustScaler 或对原特征做截断/ winsorize 后再 Z-score。
- 要求有界输入(如某些神经网络输入层):可考虑 Min-Max,但聚类前仍要警惕异常值对 (\min,\max) 的影响。
五、本方法的优点、缺点与使用限制
5.1 优点
- 形式简单,与「均值、标准差」的统计解释一致,便于沟通与复现。
- 线性可逆(保留 (\bar{x}_j,s_j) 即可还原),不引入非线性扭曲。
- 在特征近似同分布形状、仅尺度不同时,能有效平衡各维在距离中的贡献。
5.2 缺点与局限
- 对离群值敏感:少数极端点会增大 (s_j),使大量正常点被压到窄区间,削弱区分度。
- 每个特征独立缩放:若特征间存在强相关或非线性流形,仅靠 Z-score 不能解决「该用何种距离/何种聚类假设」的问题。
- 训练/预测一致性:聚类若在训练集上估计 (\bar{x}_j,s_j),对新样本应用时应使用同一组统计量(与 sklearn
StandardScaler的fit/transform逻辑一致),否则分布漂移会导致簇标签含义变化。
5.3 使用前提(落地前宜明确)
- 特征为数值型;类别变量需独热编码等后再与其他连续特征一并考虑是否缩放。
- 缺失值需先处理,否则均值、方差无定义或偏差大。
- 常量特征((s_j=0))在实现中常跳过或填常数,需在管道中显式处理。
六、在聚类中的应用
6.1 为何聚类常要做 Z-score
许多聚类目标(如 K-means 最小化簇内平方和、高斯混合的协方差假设)在欧氏距离或马氏距离框架下,特征尺度不一致会导致:
- 数值范围大的维度在 (\sum (x_i - c)^2) 中占主导,簇划分被少数特征绑架;
- 与业务上「各指标同等重要」的假设不符。
对各维做 Z-score 后,至少在各维方差层面拉平,使距离更反映「多维综合相似性」,而非单一高方差维。
6.2 数值示例:源数据与 Z-score 手算
下面用 3 条样本、2 个特征 演示「原始矩阵 → 按列均值与样本标准差 → Z-score」。特征 A 表示年龄(岁),B 表示月收入(千元),量纲不同;手算采用样本标准差(分母 (n-1),与常见统计定义一致)。注意:sklearn.preprocessing.StandardScaler 默认方差分母可能与下表略有差异,以官方文档为准,此处重在展示公式与数量级直觉。
(1)源数据
| 样本 | 特征 A(年龄) | 特征 B(月收入·千元) |
|---|---|---|
| 1 | 18 | 30 |
| 2 | 30 | 60 |
| 3 | 42 | 90 |
(2)按列计算均值与样本标准差
对第 (j) 列:(\bar{x}j=\frac{1}{n}\sum_i x{ij}),(\displaystyle s_j=\sqrt{\frac{1}{n-1}\sum_i (x_{ij}-\bar{x}_j)^2})。此处 (n=3)。
| 特征 | (\bar{x}_j) | 离差平方和 (\sum_i (x_{ij}-\bar{x}_j)^2) | (s_j=\sqrt{\cdot/(n-1)}) |
|---|---|---|---|
| A | ((18+30+42)/3=30) | ((-12)^2+0^2+12^2=288) | (s_A=\sqrt{288/2}=12) |
| B | ((30+60+90)/3=60) | ((-30)^2+0^2+30^2=1800) | (s_B=\sqrt{1800/2}=30) |
(3)逐元素 Z-score:(z_{ij}=(x_{ij}-\bar{x}_j)/s_j)
| 样本 | (z_{iA}=(x_{iA}-30)/12) | (z_{iB}=(x_{iB}-60)/30) |
|---|---|---|
| 1 | ((18-30)/12=-1.00) | ((30-60)/30=-1.00) |
| 2 | ((30-30)/12=0.00) | ((60-60)/30=0.00) |
| 3 | ((42-30)/12=1.00) | ((90-60)/30=1.00) |
直观对照:未标准化时,B 的数值跨度(30~90)远大于 A(18~42),若直接用欧氏距离,收入差会主导距离;上表标准化后,两列在样本 1/2/3 上均为 (-1,0,1) 同步变化,单维不再因原始量纲大而支配距离,更贴近「两维同等重要」时的聚类输入。(真实数据很少如此对称,本例仅用于说明尺度拉平效果。)
(4)比对:Min-Max 与 MaxAbs(同一源数据)
在 (1) 的源数据上,再按第四节中的两类常见变换各算一遍,便于与 (3) 的 Z-score 对照。
- Min-Max(缩放到 ([0,1])):对第 (j) 列,(x’{ij}=(x{ij}-\min_j)/(\max_j-\min_j))。
- 特征 A:(\min=18,\max=42),极差 (24)。
- 特征 B:(\min=30,\max=90),极差 (60)。
| 样本 | (x’{iA}=(x{iA}-18)/24) | (x’{iB}=(x{iB}-30)/60) |
|---|---|---|
| 1 | ((18-18)/24=0.00) | ((30-30)/60=0.00) |
| 2 | ((30-18)/24=0.50) | ((60-30)/60=0.50) |
| 3 | ((42-18)/24=1.00) | ((90-30)/60=1.00) |
MaxAbs:对第 (j) 列,(x’{ij}=x{ij}/\max_k x_{kj} )(与 sklearn.preprocessing.MaxAbsScaler一致,常用于已大致中心化或稀疏特征;本例数值均为正,故等价于除以列最大值)。特征 A:(\max · =42)。 特征 B:(\max · =90)。
| 样本 | (x’{iA}=x{iA}/42) | (x’{iB}=x{iB}/90) |
|---|---|---|
| 1 | (18/42\approx 0.43) | (30/90\approx 0.33) |
| 2 | (30/42\approx 0.71) | (60/90\approx 0.67) |
| 3 | (42/42=1.00) | (90/90=1.00) |
三种方式对照(同一批样本)
| 样本 | Z-score(A, B) | Min-Max [0,1](A, B) | MaxAbs(A, B) |
|---|---|---|---|
| 1 | (-1.00,\,-1.00) | (0.00,\,0.00) | (\approx 0.43,\,\approx 0.33) |
| 2 | (0.00,\,0.00) | (0.50,\,0.50) | (\approx 0.71,\,\approx 0.67) |
| 3 | (1.00,\,1.00) | (1.00,\,1.00) | (1.00,\,1.00) |
小结:本例中 Z-score 与 Min-Max 在三个样本点上两维成比例同步(中点均为 0 与 0.5),但 Z-score 可取负值、且由均值与标准差决定尺度;Min-Max 把端点钉在 0 与 1,强依赖列内 (\min/\max)。MaxAbs 在本例(全正)下两维最大值均为 1,但样本 1、2 上 A、B 的比例不再相同(如样本 1 为 (0.43) vs (0.33)),与 Z-score / Min-Max 的「两列完全平行」不同——因 MaxAbs 不做减均值,仅按列最大绝对值缩放,适合与「稀疏、符号特征」搭配的场景与 Z-score 的统计含义并不等价。聚类前具体选用哪一种,仍需结合第四节的尺度选择思路,以及数据中的离群、分布形状等因素决定。
6.3 与常见聚类算法的关系
| 算法族 | 与标准化的关系 |
|---|---|
| K-means、Mini-Batch K-means | 强依赖欧氏距离;强烈建议标准化或同等尺度的特征。 |
| GMM、谱聚类(部分实现) | 常假设各向同性或需估计协方差;标准化常作为第一步。 |
| 层次聚类(全连接、Ward 等) | 基于距离的链接方式同样受尺度影响,宜标准化。 |
| DBSCAN、HDBSCAN | 距离与 (\varepsilon) 含义与量纲绑定;需标准化后再调 (\varepsilon),否则难以跨特征解释。 |
| 基于余弦相似度 / 稀疏高维文本 | 更常见 L2 归一化或专用度量;Z-score 未必是最优,需按数据类型选择。 |
6.4 实践注意
- 先标准化再选 (K) 或距离阈值:否则不同预处理下最优超参不可比。
- 类别与连续混合:独热维度仅 0/1 时,与已标准化连续维混用可能仍需加权或分块距离,不能认为「一次 Z-score 解决所有问题」。
- 可解释性:标准化后簇中心在原特征空间的解释需逆变换回原始单位,便于业务沟通。
七、代码示例(scikit-learn)
1
2
3
4
5
6
7
8
9
10
11
12
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
# X: shape (n_samples, n_features)
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
kmeans = KMeans(n_clusters=3, random_state=42, n_init="auto")
labels = kmeans.fit_predict(X_std)
# 簇中心在原特征空间的解释(可选)
centers_original = scaler.inverse_transform(kmeans.cluster_centers_)
说明:StandardScaler 的方差、标准差分母以 scikit-learn 当前版本文档为准。生产环境建议将 scaler 与聚类器 放在同一 Pipeline 中,避免训练/测试不一致。
八、小结
| 维度 | 要点 |
|---|---|
| 本质 | 按列 ((x-\mu)/\sigma) 的线性标准化,使各特征大致零均值、单位方差。 |
| 名称 | z-score 与标准正态记号习惯相关,非独立「聚类算法」。 |
| 场景 | 量纲混杂、依赖欧氏/二次型距离的聚类与分类前预处理。 |
| 对比 | 与 Min-Max、RobustScaler、行归一化等目标不同;离群敏感是主要弱点。 |
| 聚类 | K-means、GMM、密度法调参等常先标准化,再调 (K) 或 (\varepsilon);余弦相似度/稀疏文本需另案讨论。 |
九、参考
- scikit-learn — StandardScaler — 实现细节与
fit/transform语义 - Wikipedia — Standard score — 标准分定义与历史语境
- Hastie, Tibshirani, Friedman — The Elements of Statistical Learning — 聚类与预处理在教科书中的常规表述(以具体章节为准)
