手里有一份三百名大学生的问卷,每人有每周自习时长、每周运动时长和月消费几项数值。想知道这些学生能不能分成几种类型,比如埋头学习的、爱运动的和花钱多的,每种类型各有多少人,彼此差在哪几项上。事先并没有现成的分类标签,类型要从数据里找出来。
聚类分析做的就是这件事。它按样本在各项指标上的接近程度,把相似的样本归到同一类,让同一类里的样本尽量像,不同类之间尽量不一样。事先没有标签、由数据自己分组,统计上叫无监督学习。K-Means(K 均值聚类)是其中最常用的一种,社会科学里常用来做人群分层,也用来划分城市类型和企业类型。
在 TATOOLS 的【样本聚类】里【上传文档】,一行是一个样本,每个数值列是一项指标。TATOOLS 先把各列标准化,再用 K-Means 分类,在一个范围内按轮廓系数自动挑选类数,给出每个样本归入哪一类,以及各类的样本量、占比和各项指标的均值,并用单因素方差分析比较各项指标在类间的差异大小。
这篇教程先讲聚类怎样衡量相似,为什么要先标准化,再用六个样本手算 K-Means 的迭代、轮廓系数和方差分析,最后讲报告的读法和论文里的写法。
01
相似怎样衡量
K-Means 用欧氏距离衡量两个样本的相似程度。把每个样本看成空间里的一个点,每项指标是一根坐标轴,两点之间的直线距离越短,两个样本越像。
d(x, y) = √Σ (xⱼ − yⱼ)²
xⱼ、yⱼ:两个样本在第 j 项指标上的取值
两个学生每周自习 20 小时和 12 小时,每周运动 3 小时和 9 小时。
d = √((20 − 12)² + (3 − 9)²) = √(64 + 36) = 10
距离只由数值算出,所以参与聚类的列都要是数值,而且要能反映样本之间的差异。编号和年份这类列的数字大小没有实际意义,放进去会把分类带偏。TATOOLS 的【样本标签列】专门用来放编号或名称,它只在归属表里标出样本,不参与距离计算。
02
数据表怎样准备
一行是一个样本,比如一名受访者、一个城市或一家企业;每个数值列是一项指标。
工具页的【智能推荐聚类列】默认打开,TATOOLS 读表头和前几行样例,挑出评分、量表题和测量值这类指标列,跳过编号、年份和自由文本。报告的【聚类指标列】列出选中了哪些列,排除了哪些列。
关掉智能推荐,可以在【参与聚类的列】里自己从表头选;留空时,TATOOLS 取表里大多数单元格是数字的列,取值全都一样的列会跳过,并在报告的【数据提示】里写明。【样本标签列】从表头选一列编号或名称,旁边的【智能填写】按表头和样例自动挑好。
所选列里任何一项缺失,这一行就不参与聚类,报告的【有效行数】是真正参与聚类的样本数。
03
为什么先标准化
各列的单位和数值范围不同。月消费以元计,动辄几百上千;每周运动以小时计,只有几个小时。直接算距离,数值大的列会压倒其他列。
两个学生月消费差 100 元,每周运动差 5 小时。
不标准化 d = √(100² + 5²) = √10025 ≈ 100.1
距离几乎全由月消费决定,运动上的差别被淹没了。标准化把每列减去均值再除以标准差,各列都换算成离平均水平有几个标准差。假设月消费的标准差是 400 元,运动的标准差是 2 小时。
z = (x − 均值) ÷ 标准差
月消费差 100 ÷ 400 = 0.25
运动差 5 ÷ 2 = 2.5
标准化后 d = √(0.25² + 2.5²) ≈ 2.51
标准化以后,运动上相差 2.5 个标准差,成了这两个学生主要的差别。
TATOOLS 的【聚类前按列标准化】默认打开,各列单位不同时要保持打开。所有列本来就是同一量纲,比如都是 1 到 5 分的量表题,关掉也可以,距离直接按原始分数算。报告的【各类特征均值】始终用原始单位,读起来不用换算。
04
K-Means 怎样迭代
K-Means 要先定下分几类,这个数就是 K。每一类有一个中心,是这一类样本在各项指标上的均值。MacQueen 1967 年给这种方法起了 K-Means 的名字,常用的迭代算法来自 Lloyd 1957 年在贝尔实验室的工作,1982 年正式发表。
1. 选 K 个初始中心
2. 每个样本归到离它最近的中心
3. 每一类重新算均值,作为新的中心
4. 重复 2 和 3,直到归属不再变化
它要让所有样本到各自类中心的距离平方和最小,这个量叫类内平方和。
W = Σₖ Σ_(x∈Cₖ) ‖x − μₖ‖²
Cₖ:第 k 类;μₖ:第 k 类的中心
归属和重算中心这两步都不会让 W 变大,所以迭代一定会停下来。
用六个样本、两项指标手算,两项指标已在同一尺度上,K = 2。
A (1, 1) B (1, 2) C (2, 1)
D (6, 5) E (7, 5) F (6, 6)
故意选一对不好的起点,用 A 和 B 作初始中心。
第一轮 C 离 A 更近,D、E、F 离 B 更近
第 1 类 {A, C},中心 (1.5, 1)
第 2 类 {B, D, E, F},中心 (5, 4.5)
第二轮 B 到 (1.5, 1) 约 1.12,到 (5, 4.5) 约 4.72
B 改归第 1 类
第 1 类 {A, B, C},中心 (4/3, 4/3)
第 2 类 {D, E, F},中心 (19/3, 16/3)
第三轮 归属不变,停止
W = 4/3 + 4/3 ≈ 2.67
最后停在哪里,取决于起点放在哪里,起点选得差,可能停在一个 W 偏大的分法上。Arthur 和 Vassilvitskii 2007 年提出 k-means++ 选起点法,第一个中心随机选,之后离已选中心越远的样本越容易被选中,初始中心因此彼此分散。TATOOLS 用这种办法选起点,从多组不同的起点各跑一遍,留下 W 最小的那次;随机种子固定,同一份数据每次分出的结果一样。
K-Means 默认每一类大致聚成一团,每个样本都要归到某一类里。极端值会把类中心拉偏,上传前先看看有没有录错的离谱数值。
05
分几类:轮廓系数
K 要事先定,分几类最合适,需要一个衡量分得好不好的指标。Rousseeuw 1987 年提出轮廓系数,对每个样本比较它离本类有多近,离最近的另一类有多远。
a(i):样本 i 到本类其他样本的平均距离
b(i):样本 i 到最近的另一类所有样本的平均距离
s(i) = (b(i) − a(i)) ÷ max(a(i), b(i))
s(i) 在 −1 到 1 之间。接近 1,样本明显更靠近本类;接近 0,样本处在两类交界;为负,样本离另一类反而更近。所有样本的 s(i) 取平均,就是整体轮廓系数。
接着六个样本的例子,算样本 A。
A 到 B、C 的距离都是 1
a(A) = (1 + 1) ÷ 2 = 1
A 到 D、E、F 的距离是 √41、√52、√50
b(A) ≈ (6.40 + 7.21 + 7.07) ÷ 3 ≈ 6.89
s(A) = (6.89 − 1) ÷ 6.89 ≈ 0.855
Kaufman 和 Rousseeuw 1990 年给整体轮廓系数定了一个常用的分档。
| 整体轮廓系数 | 分类结构 |
|---|---|
| 0.71 到 1 | 强 |
| 0.51 到 0.70 | 合理 |
| 0.26 到 0.50 | 较弱,可能是人为分出来的 |
| 0.25 及以下 | 没有明显的分类结构 |
工具页的【聚类数】默认选【自动(轮廓系数选 K)】,TATOOLS 在【搜索 K 下限】到【搜索 K 上限】之间逐个试,默认 2 到 10,每个 K 都跑一遍 K-Means 并算出整体轮廓系数,挑最高的那个。已经从理论或文献里知道要分几类,就选【指定 K】,在【聚类数 K】里填 2 到 30 之间的数。
报告的【聚类数如何确定】写明搜索范围、选中的 K 和对应的轮廓系数;【样本与分群概览】的轮廓系数下面有一句按区间给出的解读。
06
各类画像
分好类以后,要给每一类起名字,依据是各类在每项指标上的均值。回到三百名大学生的例子,假设分成三类。
| 类 | 样本量 | 占比 | 每周自习(小时) | 每周运动(小时) | 月消费(元) |
|---|---|---|---|---|---|
| 1 | 120 | 40.0% | 25 | 2 | 1200 |
| 2 | 100 | 33.3% | 10 | 8 | 1500 |
| 3 | 80 | 26.7% | 12 | 3 | 2600 |
第 1 类自习时间最长,可以叫埋头学习型;第 2 类运动最多,是运动活跃型;第 3 类的月消费明显高出,是消费较高型。名字由研究者根据均值起,TATOOLS 给出的是类的编号,报告里把类叫作簇,簇 1 就是第 1 类。
报告的【各类特征均值】列出每一类的样本量、占比和各项指标的均值,单位和上传的表格一致。【聚类画像雷达】把各类的均值画成多边形,每项指标在各类之间做 0 到 1 的相对化,最低的一类为 0,最高的一类为 1。
每周自习 最低 10,最高 25
第 3 类 (12 − 10) ÷ (25 − 10) ≈ 0.13
月消费 最低 1200,最高 2600
第 2 类 (1500 − 1200) ÷ (2600 − 1200) ≈ 0.21
雷达图看的是哪一类在哪项指标上相对更高,具体数值以表格为准。参与聚类的指标至少三项才画雷达图。
【样本与分群概览】里的簇规模均衡比,是最小一类和最大一类的样本量之比,这个例子是 80 ÷ 120 ≈ 0.67。比值越接近 1,各类规模越接近;比值很小,最小的那一类可能只是少数几个极端样本,解读时要单独说明它的样本量。
07
哪些指标拉开了分群
各类在哪些指标上差得最多,用单因素方差分析比较。把类当作分组,对每项指标算一个 F 值,F 是组间均方和组内均方之比。
F = (SSB ÷ (K − 1)) ÷ (SSW ÷ (n − K))
SSB:组间平方和,各类均值离总均值有多远
SSW:组内平方和,样本离本类均值有多远
接着六个样本的例子,两类各三个样本。
指标一 第 1 类 1, 1, 2 均值 4/3
第 2 类 6, 7, 6 均值 19/3
总均值 23/6
SSB = 3 × 2.5² + 3 × 2.5² = 37.5
SSW = 2/3 + 2/3 = 4/3
F = 37.5 ÷ (4/3 ÷ 4) = 112.5
指标二 同样算得 F = 72
指标一的 F 更大,这两类主要是沿着指标一拉开的。
类本来就是按这些指标分出来的,各类在这些指标上的差异几乎总会显著,p 值通常很小。这张表的用处是比较 F 值的相对大小,看分群主要由哪几项指标撑起,给各类起名时先看这几项。
TATOOLS 的【类间差异线索】按 F 值从高到低列出每项指标的 F 值和 p 值,下面一句话写明有几项指标在 0.05 水平上差异显著,区分力最强的是哪几项。
08
二维投影
指标多于两项时,样本分布在高维空间里,没法直接画出来。TATOOLS 用主成分分析把参与聚类的指标投影到一个平面上,横轴和纵轴是前两个主成分,每个样本是一个点,颜色代表所属的类。
同一类的点聚成一团、不同类的团彼此分开,分类在数据里就有比较清楚的结构;几团点挤在一起,对应的轮廓系数一般也偏低。图下写明两根轴各解释了多少差异,两根轴合计解释得越多,平面上看到的分布越接近真实情况。样本很多时,图上抽取一部分点展示。只有一项指标参与聚类时,横轴就是这项指标,纵轴只是为了把点错开。
09
工具页上的设置一览
| 设置 | 选项或范围 | 默认 | 影响什么 |
|---|---|---|---|
| 智能推荐聚类列 | 开或关 | 开 | 由 TATOOLS 读表头挑指标列 |
| 参与聚类的列 | 从表头选,可留空 | 关掉智能推荐时出现 | 哪些列参与距离计算 |
| 样本标签列 | 从表头选,可留空 | 行号 | 归属表里怎样标出样本 |
| 聚类数 | 自动(轮廓系数选 K)或指定 K | 自动 | 类数由谁决定 |
| 搜索 K 下限和上限 | 2 到 30 | 2 和 10 | 自动模式下比较哪些 K |
| 聚类数 K | 2 到 30 | 4 | 指定 K 时分几类 |
| 聚类前按列标准化 | 开或关 | 开 | 各列是否换算到同一尺度 |
各类画像、方差分析和二维投影每次都会全部给出,TATOOLS 不需要另外选择。
10
报告怎么读
| 区块 | 先看什么 |
|---|---|
| 这份结果说明了什么 | 有效样本、类数、轮廓系数和均衡比 |
| 样本与分群概览 | 轮廓系数落在哪一档,各类规模是否悬殊 |
| 聚类指标列 | 智能推荐选中和排除了哪些列 |
| 聚类数如何确定 | 搜索范围和选中的 K |
| 二维投影 | 各类的点是否分成清楚的几团 |
| 聚类画像雷达 | 哪一类在哪项指标上相对更高 |
| 各类特征均值 | 每类的样本量、占比和均值,给每类起名 |
| 类间差异线索 | F 值最大的几项指标 |
| 归属表预览 | 每个样本分到了哪一类 |
读的顺序是先看轮廓系数和均衡比,判断分类结构清不清楚、各类规模差得多不多,再看二维投影,然后在各类特征均值和类间差异线索里给每一类起名,最后在归属表里找几个熟悉的样本,看它们分到的类是否合乎常识。
下载结果里的样本聚类归属表按行序号列出每个样本的聚类编号,选了样本标签列时另有一列标签。按行序号把聚类编号贴回原表,就可以把它当作一个分类变量,用 TATOOLS 的【交叉表与卡方分析】看它和性别、年级这类字段有没有关联。
11
把结果写进论文
下面是一段常见的写法示例,方括号里换成自己的数字。
本研究使用 TATOOLS 的样本聚类,对 [样本数] 名 [样本类型] 的 [指标数] 项指标进行 K-Means 聚类。各指标先做 z 分数标准化,在 K = [下限] 至 [上限] 的范围内按平均轮廓系数确定聚类数,最终分为 [K] 类,平均轮廓系数为 [值]。各类样本量分别为 [样本量]。单因素方差分析显示,[指标] 在各类之间的差异最大(F = [F 值])。依据各类在各项指标上的均值,分别将其命名为 [名称]。
论文里一般给出一张各类样本量、占比和指标均值的表,再给一张方差分析表,TATOOLS 报告里的【各类特征均值】和【类间差异线索】正好对应这两张表。
12
小结
聚类分析按样本在各项指标上的接近程度分组,事先不需要分类标签,K-Means 用欧氏距离衡量接近程度。
各列单位不同时要先标准化,否则数值大的列会主导距离。
K-Means 反复把样本归到最近的中心、再重算中心,直到归属不变,目标是让类内平方和最小。
轮廓系数比较样本离本类和离最近的另一类有多远,TATOOLS 在一个 K 的范围里挑整体轮廓系数最高的那个。
各类特征均值是给每一类起名的依据,方差分析的 F 值说明分群主要由哪几项指标拉开。
想先把多项相关的指标压成几个综合维度,可以用 TATOOLS 的【PCA 主成分降维】;想把聚类编号和其他分类字段做关联分析,用【交叉表与卡方分析】;想把各项指标整理成论文里的描述统计表,用【论文描述性统计表】。
13
资料来源
MacQueen:Some Methods for Classification and Analysis of Multivariate Observations,Proceedings of the Fifth Berkeley Symposium on Mathematical Statistics and Probability,第 1 卷,1967
Lloyd:Least Squares Quantization in PCM,IEEE Transactions on Information Theory,第 28 卷第 2 期,1982
Kaufman 与 Rousseeuw:Finding Groups in Data: An Introduction to Cluster Analysis,Wiley,1990
END
