☰
SPSS K均值聚类完整操作指南:从原理到实战应用
2026/10/17 8:37:59 网站建设 项目流程

1. 聚类分析的基本思路与K均值原理

1.1 什么时候该用K均值聚类

如果你手头有一批客户交易数据、问卷量表得分或者实验观测记录,想把这些样本分成几组,但事先并不知道每组应该长什么样,这时候K均值聚类就是SPSS里最常用、也最容易上手的无监督学习方法之一。

K均值聚类的核心目标很简单:让同一组内的样本尽可能相似,不同组之间的样本尽可能不同。这句话听起来通俗,但在实际操作里隐含了两个关键问题:相似程度怎么量化?分成几组算合理?很多新手一上来就急着点菜单,结果跑出一个乱七八糟的结果,根本原因就是没把这两个问题想清楚。

我通常建议,K均值聚类最适用的场景是“样本量较大、变量为连续数值型、大类划分比较均匀”的情况。比如我有过上千条用户数据,想按消费金额、浏览频次、访问时长等连续变量归纳出三四类用户行为模式,这个时候K均值的效果非常好。但如果你只有二三十个样本,或者变量主要是分类变量,那K均值就不太合适,你可能会需要层次聚类或者两步聚类,道理我们后面展开。

1.2 K均值聚类的核心逻辑

K均值的“K”就是你想把样本分成几类的数量。整个过程有点像“先画靶子再射箭”:一开始随便指定K个中心点,然后把每个样本分到离它最近的那个中心点旗下,接着重新计算每个“类”的中心位置,再按新中心重新分配样本,反复循环,直到中心点不再变化。

这里的“距离”默认是欧氏距离。假设我们有两个变量X和Y,某个样本点和中心点在二维平面上的距离就是横纵坐标差的平方和再开方。数据维度越高,计算方式也一样,只是变量多了。

迭代过程有一个很形象的生活类比:你把一堆人随机分成几个小组,然后让每个小组人员站在一起,找到小组的“平均位置”当作新的组中心,再重新按距离分人,来回几次后,大家基本就稳定组成几个相对聚集的圈子了。

SPSS在执行K均值聚类时,会要求你指定聚类数K,然后设定迭代次数。软件默认迭代100次,通常足够,但对于一些难收敛的数据,你可能需要加大到200次甚至更多,或者调整收敛判据。

1.3 K均值与其他聚类方法的区别

初学者经常把K均值、层次聚类、两步聚类混在一起,这里我简单做一个对比。

层次聚类也叫系统聚类,适合小样本,可以输出一张树状图,让你自己“切”出合适的类别数。好处是不用事先定K,坏处是数据量大以后计算非常慢。

两步聚类是SPSS里专门处理混合类型数据的,既可以处理连续变量也可以处理分类变量,还会自动建议类别数,适合探索性分析,但结果解释有时不如K均值直观。

K均值的优势在于速度快、内存占用小、对大样本非常友好,而且结果容易转成“各类别特征对比表”,方便业务人员理解。但它的缺点也很明显:需要你事先给定K值;对离群点敏感;对变量量纲敏感;只能处理连续变量。所以它不是万能药,却是最常用的“主力算法”。

2. SPSS做K均值聚类的完整操作流程

2.1 数据准备:格式、缺失值处理、标准化

任何统计软件做聚类分析之前,都要先把数据整理成“一行一个样本,一列一个变量”的常规结构。SPSS里的变量视图里,参与聚类的变量必须都是数值型,单位要统一。如果你有一个变量是字符串型的“男/女”或者“高/中/低”,那K均值是没法直接计算的,需要先做编码转换,比如0/1、1/2/3这样的数字标签。

缺失值也是个大问题。K均值算法本身不能自动处理缺失值,SPSS默认会剔除非整行都有缺失值的样本。如果你某个关键变量缺失比例很高,把这些样本整条删掉会造成信息损失。所以建议在聚类前,先对缺失值做处理:如果缺失样本很少,直接剔除;如果较多,可以用均值替换、回归插补等方法,但要注意插补后的分布会有一定变形,可能会影响聚类效果。

数据标准化这一步,我非常建议做。K均值用距离衡量相似性,量纲大的变量会主导距离。比如“年收入”单位是元,数值可能是几万到几十万;“年龄”只有二十到六十,两个变量放在一起计算欧氏距离时,年收入的影响会被放大很多倍。不标准化的话,聚类结果基本就是被量纲大的变量绑架。标准化的操作很简单:在SPSS菜单栏选择“分析—描述统计—描述”,勾选“将标准化值另存为变量”,软件会为每个参与聚类的变量生成一个对应的Z分数新变量,再拿这些Z分数去聚类就行。Z分数的含义就是“该样本偏离均值多少个标准差”,比较符合距离计算的需求。

2.2 菜单操作:分析-分类-K均值聚类

SPSS里跑K均值聚类的路径很固定:菜单栏点“分析”,选择“分类”,再点“K均值聚类”。弹出的对话框里,左侧变量列表里选入你要参与聚类的标准化变量,然后右下角会有一个“聚类数”输入框,这里填你想分的类别数。

另外有一个“方法”选项,默认是“迭代与分类”,意思是先迭代出初始中心,再继续分类。还有“仅分类”模式,表示使用指定的初始中心只做一次分类,不迭代更新。这个选项在你想复现结果时很实用,后面讲结果不稳定时会再提到。

还有一个不太起眼但很关键的选项是“保存”。如果你勾选“保存—聚类成员”,SPSS会在数据视图里新建一列,标记每个样本被分到了哪个类(1、2、3……);如果勾选“与聚类中心的距离”,会再生成一列记录每个样本到其所属中心点的距离,这对后续检查异常样本非常有用。

2.3 关键参数设置:聚类数K、迭代次数与收敛

对话框里点击“迭代”按钮,可以设置最大迭代次数和收敛条件。SPSS默认最大迭代次数是100次,收敛性标准是0.02。这是什么意思呢?就是当两次迭代之间聚类中心变化的量非常小,小于0.02时,算法就认为已经稳定,提前停止。一般数据用默认值没问题,但如果你发现输出结果里提示“已达到最大迭代次数”,说明数据还没收敛,这时候就应该把迭代次数调大,比如改成300,或者把收敛标准调大到0.05,让算法更容易停止。

“聚类数K”怎么填?如果你完全没有头绪,我的建议是先不要直接给K设一个拍脑袋的数(比如“我想分3类”),而是结合业务需求或探索性分析来定。可以用两步法:先用层次聚类跑一遍,在树状图上大致看出合理的分类数,然后再把K值填进K均值聚类对话框。没有树状图经验的人,也可以从市场下沉的角度去分析:消费者分群一般3到5类比较常见,但这只能当作参考,不能代替统计判断。

2.4 结果输出:重点看哪几个表格

SPSS运行完K均值聚类后,结果查看器里会出现几个表格。最常见的包括“初始聚类中心”“迭代历史记录”“最终聚类中心”“每个案例的聚类信息”“最后两个个案的聚类信息”以及“ANOVA表”。很多人一看到这么多表就蒙了,不知道从哪看起。

我一般先看“最终聚类中心”,这是核心。这张表里,行是参与聚类的每个变量,列是1到K个类别,单元格里是每个类在该变量上的均值。比如第1类用户的消费金额Z分数是1.2,说明这一类用户明显高于总体平均;第2类是-0.5,说明偏低。把每个类在所有变量上的Z分数高低串起来,就能给这个类贴标签。

“迭代历史记录”也会看一眼,主要看中心变化是否快速下降到很小值。如果迭代了几十次还在上下波动,说明聚类结构不够稳定,要检查离群点或K值是否合适。

“ANOVA表”特别容易误导人。它给出每个变量在不同类别间的方差分析F值和显著性,但这个表本质上是用来“辅助判断哪些变量对区分类别贡献大”的,而不是正式检验类间差异是否显著,因为聚类的目的本来就训练出类间差异最大,再用同一个数据检验它,检验结果天然显著,循环论证了,所以只能作为参考,别把它当成严格统计证据。

“每个案例的聚类信息”其实就是之前保存到数据视图里的那一列聚类成员编号,另外在“最后两个个案的聚类信息”里,会显示每个样本到聚类中心的距离,这个距离值可以用于发现离群点:如果某个样本距离它所属的中心点特别远,说明它可能既不属于这个类,也不属于别的类,建模前没处理干净的异常值就藏在这里。

3. 值得重视的细节:K值、变量选择与标准化

3.1 确定K值的常用方法:肘部法则与层次聚类辅助

K值怎么定,是K均值聚类里最纠结的问题。这里分享一个我实践下来最顺手的组合方法。

先用“层次聚类”探路。SPSS里选择“分析—分类—系统聚类”,把同一组标准化变量选进去,聚类方法选Ward法(即离差平方和),度量标准选欧氏距离,然后勾选“树状图”。跑完以后看树状图,想象自己拿一把剪刀从右往左切:如果树状图上明显分出3个大分支,那么K值很可能在3附近;如果分出5个小分支,K值可能在5左右。这样你就有据可依了,而不是凭空想象。

再用“肘部法则”做验证。肘部法则不是SPSS直接输出的功能,你需要手动记录不同K值对应的组内平方和(SSE)。SPSS不会直接显示总组内平方和,但你可以通过看“ANOVA表”中的每个变量的组间方差和组内方差,或者用数据视图里的“距离”列间接估算。更直接的方法是,把K从2取到6分别跑一遍,观察“聚类成员”里每个类的样本量是否均衡,以及各类中心是否越来越乱。如果某次结果里某个类只剩一个样本,那K就明显设高了。这个方法虽然粗糙,但在场景化业务分析中很实用。

还有一种统计上更严格的方法是“轮廓系数”,但SPSS没有内置该功能,需要借助外部计算或者在Python里验证。如果你暂时只想用SPSS完成整个流程,那就以“业务解释性优先”:聚类结果要能让业务人员一眼看明白各类的特征差异,如果分出来的类之间特征重叠严重,那无论K取多少,都不适合落地。

3.2 标准化、变量降维与多重共线性

前面提过标准化,但这里还要多讲一句:标准化的前提是变量分布不是极端偏态。如果某个变量本身严重偏态,比如“用户消费金额”有大量零值或极端高值,单纯Z分数还不够,可以考虑取对数后再标准化,否则聚类中心容易被极端值拉走。

变量也不是越多越好。如果你选入十几个变量,其中好几个高度相关,实际上它们携带的是重复信息,还会在距离计算中给同一方向上叠加权重,导致聚类结果偏向某一维度。比如你同时选了“消费金额”“消费次数”“客单价”,这三个变量往往高度相关,等于变相放大了消费维度的作用。我建议先用“分析—相关—双变量”看一下变量间的Pearson相关系数,把相关系数超过0.7的变量考虑去重或合并,比如生成一个综合得分,再做聚类。这个过程可能比聚类本身更花时间,但对结果质量极其重要。

3.3 离群点与样本量对聚类的影响

K均值对离群点非常敏感。因为距离是平方以后再累加的,一个离群点会让聚类中心被拽向它,破坏整个类结构。所以在正式聚类前,先用“探索性分析”或箱线图看看各变量是否存在极端值。比如“访问时长”出现上千小时,“消费金额”出现负数等明显不符合逻辑的值,都应该剔除或修正。

样本量也需要考虑。K均值聚类如果只有几十个样本,跑出的类中心容易跟着个例走,复现性差。如果样本量达到几百以上,K均值才能比较稳定。当然,SPSS本身不会限制样本量,但你要对结果的可信度有判断。

4. 从结果到结论:如何解读聚类结果

4.1 最终聚类中心的数值含义

拿到“最终聚类中心”表后,不要着急看显著性,而是先把每个类在关键变量上的均值或Z分数列出来,做横向对比。比如有3个类:

  • 第1类在“消费金额Z”上是1.3,“访问频率Z”上是0.9,“访问时长Z”是0.4;
  • 第2类在三个变量上分别是-0.2、-0.5、0.1;
  • 第3类在三个变量上分别是-1.1、-0.8、-1.0。

那很明显,第1类是高频高消费人群,第2类是普通用户,第3类是低频低消费人群。这里注意,Z分数为0代表等于总样本平均水平,正值高于平均,负值低于平均。这样解读出来的特征描述才清晰,也方便后续加标签。

如果变量太多,可以抽3到5个最重要的变量来画特征对比图,形成“用户画像卡”。SPSS里可以用“图形—图表构建器”自己做一个均值对比条形图,把每个类的Z分数画出来,视觉上很快就能抓住差异。

4.2 ANOVA表的正确打开方式

前面提到ANOVA表不能当作严格检验,但它还是有一点参考价值的。仔细看每个变量的F值大小,F越大说明这个变量在不同类之间的均值差异越大,也就是说它对这个聚类方案的“区分贡献”越大。反过来,如果某个变量的F值很小,说明它在不同类别之间的均值接近,意味着它对聚类的实际作用不大,可以考虑后续分析中剔除。

有一种做法是,先跑一个聚类结果,看ANOVA表里F值很小的变量有哪些,去掉它们再重新聚类,看看结果是否更稳健。这不是标准的两阶段特征选择,但在业务上很实用,可以避免一些噪音变量干扰结果。

4.3 案例数与类别占比的合理性判断

“每个聚类中的案例数”表格会给出每个类分别包含多少个样本,以及占总数百分比。这是判断K值是否合理的其中一个重要指标。

我踩过的一个典型坑是:K取5时,第4类只有一个样本,这明显是“过度拟合”。一个只有一个个案的类,就没有统计意义了,中心点全是那个个案的实际值,不是“共性”。合理的聚类结果,应该尽量保证每个类的样本量都在总体的5%以上,最好在10%以上。当然,如果是真实数据中存在罕见群体,某些小类也有业务价值,但要确保它确实是稳定存在的稀有类别,而不是算法被离群点拉出来的玩样。

4.4 聚类结果的可视化与外部验证

聚类完成后,别急着写报告。把“聚类成员”列选出来,结合原始变量画一个散点图矩阵。比如用“图形—图表构建器”,X轴放“消费金额Z”,Y轴放“访问频率Z”,点颜色或分组选“聚类成员”,就能看到三个类是否在空间上相对分开了。如果类别间几乎没有分离、点全部叠在一起,说明这类结果很可能是硬分出来的,实际意义不大,要回头调K或检查变量。

外部验证的方法更贴近业务:如果手头有另外一批已知标签的样本(比如高价值用户、流失用户),你可以把聚类结果和这些标签做交叉表,看是否吻合。比如分出来的第1类里有80%都是高价值用户,那说明聚类结果有实际含义。这种验证方式虽然不写进教科书,但给你的分析报告加分不少。

5. 实操中踩过的坑与排查方法

5.1 结果不稳定:初始中心点的影响

K均值聚类的初始中心点是随机选的,所以同一份数据不同排列顺序或者不同版本运行,结果可能略有不同。这个问题在小样本或K值不明确时更明显。

我的做法是,在SPSS的“K均值聚类”对话框里,点“保存”,把聚类成员保存出来,然后再跑一次,对比两次的结果。如果两次聚类成员一致性很高,那结果比较可靠;如果不一致,说明聚类结构本身不够稳定,需要进一步处理。

但SPSS里如果你想完全复现结果,可以执行“分析—分类—K均值聚类”,然后把“方法”改成“仅分类”,把上一次运行得到的“最终聚类中心”作为初始中心输入。这样每次的结果都一样,便于出报表。注意,这相当于放弃了迭代到最优的过程,可能不是全局最优聚类,但在业务应用上稳定可解释比理论最优更重要。

5.2 变量未标准化带来的主导效应

很多初学者直接拿原始数据跑K均值,结果发现聚类出的类别主要沿着“收入”变量区分,“年龄”几乎没有差异。原因就是收入数值大、方差大,距离计算时收入差距几乎决定了样本间的距离。这就等于你本来想做“人群画像”,最后只做出了“贫富分开”。

解决办法还是回到标准化。用Z分数替代原始数据进行聚类是最常见的路数。如果你希望保留原始数据便于解释,可以把标准化后的变量命名为“Z收入”“Z年龄”,聚类后再用原始变量描述类特征,两不误。

5.3 迭代不收敛怎么办

当结果里出现“已达到最大迭代次数”时,先不要慌。常见原因有三个:一是数据量太大、K值较大,默认100次不够;二是数据存在离群点,导致中心点来回跳动;三是K值选择不当,比如实际数据没有明显分群结构,算法硬要找K个中心。

排查顺序是:先检查是否有缺失值和极端值;如果数据干净,就把最大迭代次数改成300,并把“收敛标准”从0.02放宽到0.05。如果还不收敛,那大概率是数据没有自然的聚团结构,这时候你应该回头做层次聚类或者改用两步聚类,而不是硬调参数。

5.4 聚类边界模糊和样本量悬殊

有一种情况是,聚类结果中一个类占据了80%的样本,其他几个类只是零星的边缘点。这种结果通常不能直接用,因为大类别内部其实可能还分好几个子群,是K值定小了,也可能是迭代没有把大类的子结构分离出来。建议逐步增加K值,比如从3加到5,看看各类比例是否更加均衡。

5.5 验证聚类效果的其他途径

SPSS本身不提供轮廓系数,但你可以借助“分析—分类—判别分析”做一个辅助验证:把聚类成员当作分组变量,把参与聚类的变量当作自变量,跑线性判别分析,看看判别函数的回代准确率。如果回代准确率很高,说明这些类在变量空间里区分性不错,聚类结果有效率。这个思路虽然有点绕,但不用另外装软件,直接在SPSS里就能完成。

我个人在项目中还常用一个朴素但有效的办法:把聚类结果与业务KPI交叉分析。比如分了3类用户,再看每类的实际复购率、投诉率、流失率,如果类与类在这些业务指标上有明显差异,那无论统计指标怎样,这个聚类结果实际可落地,这就是好结果。

写在最后

做K均值聚类最大的心得其实不是“学会点菜单”,而是养成“先想清楚K,再动手跑”的习惯。我一度也试过直接填K=4,把结果丢出去,结果被业务方追问“为什么是4类?这类的标签是否可靠?”问得我哑口无言。后来我老老实实用层次聚类探路、用肘部法则辅助决策,再结合业务意义给类命名,分析过程才真正经得起推敲。

如果你刚开始接触SPSS聚类,我觉得可以按这个顺序练一次:准备好标准化后的数据,先用层次聚类看树状图,确定K的经验范围;再跑K均值聚类,保存成员,画出散点图和最终中心对比;最后用ANOVA表和业务指标交叉验证。整个流程下来,你对K均值聚类的理解会比单纯点按钮深很多。

还有一个小技巧可以分享:跑K均值之前,先给数据排序并形成一个“唯一编号”变量,在保存聚类成员后,可以通过“数据—标识重复个案”检查是否有完全相同的样本。完全重复的样本会对聚类中心产生权重影响,如果存在,建议去重后再跑。很多人容易忽略这一步,结果聚类中心被大量重复样本带偏了。

K均值聚类在SPSS里虽然只是一个菜单项,但前面那些数据准备、K值确定、结果解释的功夫,才真正决定了分析质量。希望这篇文章能帮你少踩几个坑,把聚类分析平稳落地。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询