欢迎光临
我们一直在努力

29 Python 聚类:什么是聚类?它和分类到底有什么区别?

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. 没有参考答案时

    如果没有真实标签,就只能从聚类结果本身去判断,比如看:

    • 同一簇内部是否足够紧凑
    • 不同簇之间是否足够分离

    这也是为什么聚类不仅仅是“跑一个算法”,还需要进一步做评估和分析。


    十一、本文总结

    这篇文章主要回答了一个问题:

    什么是聚类?它和分类到底有什么区别?

    可以把核心内容概括成下面几点:

    • 聚类的目标是把相似的数据归为一组,把差异较大的数据尽量分开
    • 聚类属于无监督学习,不依赖事先给定的标签
    • 分类是“根据已有标签学习判断规则”,聚类是“在没有标签时发现潜在结构”
    • 聚类常见应用包括用户分群、商品分组、行为分析和异常发现
    • 聚类并不是一种单一算法,而是一类方法的统称
    • 聚类的难点不只是“怎么分组”,还包括“如何判断分组是否合理”

    如果你是第一次接触聚类,先记住下面这句话就够了:

    分类是在知道答案的情况下做判断,聚类是在不知道答案的情况下找规律。


    赞(0)
    未经允许不得转载:171主机测评 » 29 Python 聚类:什么是聚类?它和分类到底有什么区别?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址