「机器学习笔记13」无监督学习全面解析:从聚类算法到Python实战

没有标签的数据中,如何让机器自己发现规律?

一、什么是无监督学习?

想象你面前有一大堆没有标签的水果,你的任务是根据它们的特征(颜色、形状、大小)自动分成几组。这个过程就是无监督学习的核心思想——让机器在没有明确指导(标签)的情况下,自主发现数据中的内在结构和规律。

1.1 监督学习 vs 无监督学习 vs 半监督学习

监督学习就像有参考答案的学习:

  • 输入:数据 + 标签(如:图片 + “猫”/"狗"标签)
  • 目标:学习条件分布 P(Y|X),建立预测模型
  • 典型任务:分类、回归

无监督学习则是自主探索的学习:

  • 输入:只有数据,没有标签
  • 目标:发现数据本身的联合分布 P(X),找到内在结构
  • 典型任务:聚类、降维、异常检测

半监督学习介于两者之间,使用少量标注数据和大量未标注数据。

1.2 为什么数据结构如此重要?

数据的内在结构蕴含着关键信息。考虑下面这个例子:

一篇有意义的文章 vs 随机打乱单词顺序后的“文章”

虽然两篇“文章”的单词数量完全相同,但只有有结构的原始文章才包含有用信息。无监督学习就是要发现这种隐藏的结构模式。

二、无监督学习的三大核心任务

2.1 聚类分析

将相似的数据点分组,形成自然的类别。这是无监督学习最经典的应用。

2.2 降维处理

在保留关键信息的前提下,减少数据特征维度,解决"维度灾难"问题。

2.3 异常检测

识别与主流数据模式显著不同的异常点,如欺诈检测、故障诊断。

三、聚类算法详解

聚类的基本准则是:类内相似度最大化,类间相似度最小化

3.1 层次聚类:构建数据家族树

层次聚类生成树状的聚类结构,让你可以从不同粒度观察数据关系。

凝聚式层次聚类(自下而上)
# 伪代码演示凝聚式聚类过程
def agglomerative_clustering(data, k):
    # 1. 开始时每个点自成一类
    clusters = [{point} for point in data]
    
    while len(clusters) > k:
        # 2. 找到最相似的两个类
        i, j = find_most_similar_clusters(clusters)
        # 3. 合并这两个类
        new_cluster = clusters[i] | clusters[j]
        clusters = [c for idx, c in enumerate(clusters) 
                  if idx not in [i, j]] + [new_cluster]
    
    return clusters

类间相似度度量方法:

  • 单链接:用两类间最近点的距离代表类间距离 sim(ci,cj)=max⁡x∈ci,y∈cjsim(x,y)\text{sim}(c_i, c_j) = \max_{x\in c_i, y\in c_j} \text{sim}(x, y)sim(ci,cj)=maxxci,ycjsim(x,y)

  • 全链接:用两类间最远点的距离代表类间距离
    sim(ci,cj)=min⁡x∈ci,y∈cjsim(x,y)\text{sim}(c_i, c_j) = \min_{x\in c_i, y\in c_j} \text{sim}(x, y)sim(ci,cj)=minxci,ycjsim(x,y)

  • 平均链接:用两类所有点对的平均距离 sim(ci,cj)=1∣ci∣∣cj∣∑x∈ci,y∈cjsim(x,y)\text{sim}(c_i, c_j) = \frac{1}{|c_i||c_j|}\sum_{x\in c_i, y\in c_j} \text{sim}(x, y)sim(ci,cj)=ci∣∣cj1xci,ycjsim(x,y)

分裂式层次聚类(自上而下)

与凝聚式相反,从一个大类开始不断分裂。

层次聚类对比:

特性 凝聚式 分裂式
计算方式 自下而上合并 自上而下分裂
信息利用 局部信息 全局信息
计算效率 相对较高 相对较低

3.2 K-means聚类:经典高效的划分方法

K-means是最常用的聚类算法,通过迭代优化找到K个聚类中心。

算法数学原理

目标函数(最小化类内平方误差): J=1N∑n=1N∑v=1Krnv∥un−gv∥2J = \frac{1}{N}\sum_{n=1}^N\sum_{v=1}^K r_{nv} \|u_n - g_v\|^2J=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大雄学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值