Python 数据分析入门:什么是聚类?它和分类到底有什么区别?
在机器学习入门阶段,很多人最先接触的是分类。
比如:
- 根据邮件内容判断是不是垃圾邮件
- 根据学生成绩判断是否及格
- 根据用户行为判断是否会流失
这类任务有一个共同特点:数据是有标签的 。
也就是说,我们事先知道每条数据属于哪一类,模型要做的是学习这些标签背后的规律,然后对新数据进行预测。
但现实中还有很多场景,并没有现成标签。
例如:
- 一批用户消费数据,想看看能不能自动分成几类用户
- 一批商品属性数据,想看看哪些商品天然更相似
- 一批学生学习行为数据,想看看是否存在不同类型的学习群体
这时候我们并不知道"标准答案"是什么,自然也没法直接做分类。
于是,一个很自然的问题就来了:
如果没有标签,数据还能不能自动分组?
这就是本文要讲的主题:聚类。
一、什么是聚类?
先不用急着记定义,可以先从直觉上理解。
假设你把一批用户画在二维平面上:
- 横轴表示月消费金额
- 纵轴表示月访问次数
你可能会发现,有些用户会自然聚在一起:
- 一群消费高、访问频繁
- 一群消费一般、访问稳定
- 一群消费低、访问较少
虽然这些用户没有被提前标记成"高价值用户""普通用户"或者"低活跃用户",
但从分布上看,它们似乎天然可以分成几堆。
这就是聚类最核心的想法:
把相似的数据放在一起,把不相似的数据尽量分开。
更正式一点地说,聚类就是把数据对象划分为多个组或簇,使得:
- 同一簇中的对象更相似
- 不同簇之间的对象差异更明显
这里的"簇",你可以简单理解成:
一群彼此更像的样本。
二、聚类属于什么类型的学习?
聚类属于无监督学习。
和监督学习不同,无监督学习不依赖标签,它关注的是数据本身的分布特征。
它更像是在回答下面这些问题:
- 数据内部有没有自然形成的群体?
- 有没有一些明显和别人不一样的样本?
- 数据中是否存在某种潜在结构?
所以如果用一句话概括:
- 监督学习:有答案,学的是"怎么预测答案"
- 无监督学习:没答案,学的是"数据本身是什么结构"
而聚类,就是无监督学习中最典型的一类任务。
三、聚类和分类,到底有什么区别?
这是初学者最容易混淆的地方。
表面上看,聚类和分类都像是在"分组",但它们背后的逻辑完全不同。
1. 分类:类别是已知的
分类问题里,数据是有标签的。
比如:
- 这封邮件是垃圾邮件还是正常邮件
- 这个客户会流失还是不会流失
- 这张图片是数字 3 还是数字 8
模型的目标是:
根据已有样本和标签之间的关系,学会对新样本进行判断。
也就是说,分类是在"已知类别"的前提下做预测。
2. 聚类:类别是未知的
聚类问题里,没有标签。
我们事先并不知道应该分成几类,也不知道每条数据到底属于哪一类。
模型的目标是:
根据数据之间的相似性,把它们自动组织成若干组。
也就是说,聚类是在"未知类别"的前提下尝试发现结构。
3. 一个最直观的类比
可以把它们这样理解:
- 分类:已经有标准答案,模型要学会按答案判别
- 聚类:没有标准答案,只能先观察数据,看它们是否能自然形成几组
所以:
- 分类更像"按规则判断"
- 聚类更像"从数据中找规律"
四、为什么很多人会把聚类和分类混为一谈?
因为它们最后的结果看起来都像是在"分成几类"。
比如:
- 分类最后输出:A类、B类、C类
- 聚类最后输出:簇1、簇2、簇3
形式确实有点像,但关注点并不一样。
分类更关注
- 已知标签
- 预测是否准确
- 新样本分到哪一类
聚类更关注
- 样本之间是否相似
- 分组是否自然
- 数据内部是否存在结构
简单来说:
分类是在已有答案的前提下学规则,聚类是在没有答案的情况下找结构。
五、聚类到底能解决什么问题?
如果只把聚类理解成"自动分组",会显得有些抽象。
其实它在很多实际场景里都很有用。
1. 用户分群
这是最常见的应用之一。
比如电商平台希望把用户分成:
- 高频高消费用户
- 高频低消费用户
- 低频低消费用户
这样就能针对不同用户设计不同的运营策略。
2. 商品分组
如果有一批商品特征数据,可以通过聚类看看:
- 哪些商品更像同一类
- 哪些商品适合放进同一个推荐集合
3. 学生行为分析
如果你有学生的这些数据:
- 登录学习平台次数
- 作业完成率
- 课堂互动频率
- 测验成绩
就可以尝试看看是否存在不同类型的学习群体,比如:
- 主动学习型
- 临时突击型
- 低参与型
这种分析往往比简单按成绩分层更有启发性。
4. 异常样本发现
聚类除了能发现"群体",也能帮助识别那些明显"不合群"的样本。
比如:
- 异常订单
- 可疑账号
- 特殊病例
- 数据录入错误
当某些样本和大多数数据差异很大时,它们就可能值得单独关注。
六、聚类中的"相似"到底是什么意思?
这是理解聚类时必须想明白的一个问题。
我们总说"把相似的放在一起",
但问题是:什么叫相似?
在数据分析里,"相似"通常不是靠主观感觉判断,而是通过特征 和距离来度量。
举个简单例子。
如果两个学生在下面这些指标上都很接近:
- 出勤率
- 成绩
- 互动频率
- 作业完成率
那么我们就可以认为,这两个学生比较相似。
很多聚类算法都会把每条数据看成空间中的一个点,再根据这些点之间的距离来判断谁更接近。
不同算法对"相似"的理解方式不完全一样,这也是为什么会有不同的聚类方法。
所以聚类并不只是"分组"这么简单,它真正回答的是:
哪些数据更接近,接近到什么程度可以归为一类?
七、聚类算法有哪些类型?
聚类并不是只有一种方法,而是一整个算法家族。
常见的聚类方法大致可以分成下面几类:
- 划分方法
- 层次方法
- 基于密度的方法
- 概率模型方法
理解这个分类,有助于你后面系统学习不同聚类算法。
1. 划分方法
划分方法会直接把数据分成若干组。
通常需要先指定要分成多少类,然后通过不断调整样本归属来改进聚类结果。
最典型的代表就是:
- K-Means
这也是很多人学习聚类时接触的第一个算法。
2. 层次方法
层次聚类会构造一个分层结构。
它有两种常见思路:
- 凝聚式:从小到大,不断合并
- 分裂式:从大到小,不断拆分
你可以把它理解成:
- 凝聚式:一开始每个点各自成类,后来逐步并成更大的簇
- 分裂式:一开始所有点在一起,然后逐步拆开
3. 基于密度的方法
这类方法更关注数据在局部区域里的"密集程度"。
如果某个区域点很多、分布很密,就可能被看作一个簇;
而那些周围点很少、比较孤立的样本,则可能被识别为噪声或异常点。
典型代表是:
- DBSCAN
这类方法的一个明显优点是:
它更适合处理形状复杂的数据簇,也更适合带有噪声的数据。
4. 概率模型方法
这类方法会从"数据由哪些概率分布生成"的角度来理解聚类。
对于初学者来说,这一类方法可以先有个概念。
在入门阶段,更重要的是先把 K-Means、层次聚类和 DBSCAN 这些经典方法的思路建立起来。
八、聚类和分类的差异,可以用一张表看清楚
| 对比维度 | 分类 | 聚类 |
|---|---|---|
| 是否有标签 | 有 | 无 |
| 学习方式 | 监督学习 | 无监督学习 |
| 目标 | 预测类别 | 发现数据结构 |
| 类别是否已知 | 已知 | 未知 |
| 关注重点 | 预测准确性 | 分组合理性 |
| 常见任务 | 垃圾邮件识别、图像分类 | 用户分群、异常发现、数据探索 |
如果你刚入门,只要记住一句话就够了:
分类是在已有标签下学习判断规则,聚类是在没有标签时发现数据分组。
九、为什么说聚类不是"低配版分类"?
有些人刚学到聚类时会觉得:
"不就是没标签的分类吗?"
这种理解并不准确。
因为聚类不是分类的简化版,它有自己独立的问题和难点。
分类的难点
主要在于:
- 如何学到一个能泛化的判别规则
- 如何在新样本上预测得更准
聚类的难点
主要在于:
- 数据到底能不能被自然分组
- 应该分成几类才合理
- 用什么标准衡量分组质量
也就是说,聚类最麻烦的地方往往不是"怎么分",而是:
你怎么判断这样分是不是合理。
十、聚类结果怎么判断好不好?
这一篇先不展开讲具体算法,但可以先建立一个基本认识:
分类通常有明确标签,所以比较容易判断预测是否正确。
而聚类很多时候没有标准答案,因此评估反而更难。
通常有两种思路:
1. 有参考答案时
如果你手上恰好有真实类别信息,就可以把聚类结果和真实类别进行比较,看看它们的一致程度。
2. 没有参考答案时
如果没有真实标签,就只能从聚类结果本身去判断,比如看:
- 同一簇内部是否足够紧凑
- 不同簇之间是否足够分离
这也是为什么聚类不仅仅是"跑一个算法",还需要进一步做评估和分析。
十一、本文总结
这篇文章主要回答了一个问题:
什么是聚类?它和分类到底有什么区别?
可以把核心内容概括成下面几点:
- 聚类的目标是把相似的数据归为一组,把差异较大的数据尽量分开
- 聚类属于无监督学习,不依赖事先给定的标签
- 分类是"根据已有标签学习判断规则",聚类是"在没有标签时发现潜在结构"
- 聚类常见应用包括用户分群、商品分组、行为分析和异常发现
- 聚类并不是一种单一算法,而是一类方法的统称
- 聚类的难点不只是"怎么分组",还包括"如何判断分组是否合理"
如果你是第一次接触聚类,先记住下面这句话就够了:
分类是在知道答案的情况下做判断,聚类是在不知道答案的情况下找规律。