当前位置: 首页 > news >正文

【机器学习12】无监督学习:K-均值聚类与异常检测

文章目录

  • 一 监督学习之外的机器学习
  • 二 无监督学习:发现数据的内在结构
    • 2.1 监督学习与无监督学习的对比
    • 2.2 聚类的应用
  • 三 K-均值聚类算法 (K-means)
    • 3.1 K-均值算法的核心步骤
    • 3.2 K-均值算法的迭代过程演示
    • 3.3 K-均值算法伪代码
    • 3.4 K-均值的应用场景
  • 四 K-均值算法的优化目标
    • 4.1 代价函数:失真(Distortion)
    • 4.2 K-均值算法如何最小化代价函数
  • 五 K-均值算法的实践要点
    • 5.1 随机初始化与局部最优
    • 5.2 如何选择聚类数量 K
  • 六 异常检测 (Anomaly Detection)
    • 6.1 异常检测的基本思想
    • 6.2 异常检测的应用
    • 6.3 基于高斯分布的异常检测算法
    • 6.4 异常检测算法的评估


视频链接
吴恩达机器学习p102-p111


一 监督学习之外的机器学习

到目前为止,我们课程的大部分内容都聚焦于监督学习(Supervised Learning)。然而,机器学习的领域远不止于此。

[在此处插入图片1]

除了监督学习,还有其他几种主要的机器学习范式:

  • 无监督学习 (Unsupervised Learning):我们接下来将要深入探讨的领域,主要包括聚类(Clustering)异常检测(Anomaly Detection)
  • 推荐系统 (Recommender Systems):广泛应用于电商、视频和音乐平台。
  • 强化学习 (Reinforcement Learning):用于训练智能体(agent)在环境中通过试错来学习最优策略,常用于游戏和机器人控制。

二 无监督学习:发现数据的内在结构

2.1 监督学习与无监督学习的对比

[在此处插入图片2]

首先,我们回顾一下监督学习。在监督学习中,我们的训练集由成对的输入x和对应的目标输出y组成,即 {(x^(1), y^(1)), (x^(2), y^(2)), ...}。我们的目标是学习一个从xy的映射关系。

[在此处插入图片3]

与此不同,在无监督学习中,我们的训练集只有输入数据x,没有对应的标签y,即 {x^(1), x^(2), ...}。算法的目标不是预测一个标签,而是在数据中发现某种有趣的结构或模式。聚类(Clustering是无监督学习中最常见的任务之一,其目标是找到数据中自然形成的分组或“簇”。

2.2 聚类的应用

[在此处插入图片4]

聚类算法在许多领域都有广泛的应用,例如:

  • 新闻分组:自动将成千上万条关于同一事件的新闻报导聚合在一起。
  • 市场细分:根据客户的行为和属性,将他们划分为不同的客户群体,以便进行精准营销。
  • DNA分析:根据基因表达模式对个体进行分组。
  • 天文数据分析:对星体进行分组,以确定哪些天体共同构成一个星系。

三 K-均值聚类算法 (K-means)

K-均值(K-means)是最流行和最广泛使用的聚类算法之一。

3.1 K-均值算法的核心步骤

K-均值算法是一个迭代的过程,它重复执行以下两个核心步骤:

[在此处插入图片5]

步骤 1:分配样本点 (Assign points)

  • 对于数据集中的每一个样本点,计算它到每一个聚类中心(cluster centroids的距离。
  • 将该样本点分配给距离它最近的那个聚类中心。

[在此处插入图片6]

[在此处插入图片7]

步骤 2:移动聚类中心 (Recompute the centroids)

  • 对于每一个聚类中心,找出所有被分配给它的样本点。
  • 将该聚类中心的位置移动到这些样本点的平均值(mean所在的位置。

算法会不断地重复这两个步骤,直到聚类中心的位置不再发生变化,或者变化非常小为止。

3.2 K-均值算法的迭代过程演示

让我们通过一个完整的迭代过程来理解算法的运作:

  1. 初始状态:随机初始化两个聚类中心(红色叉和蓝色叉)。

  2. 第一次迭代 - 步骤1
    [在此处插入图片8]

    [在此处插入图片9]

    [在此- 处插入图片10]

    遍历所有样本点,并将它们分配给离自己最近的聚类中心。结果是,上半部分的点被染成红色,下半部分的点被染成蓝色。

  3. 第一次迭代 - 步骤2
    [在此处插入图片11]

    重新计算所有红点的平均位置,并将红色聚类中心移动到该位置。同样,计算所有蓝点的平均位置,并将蓝色聚类中心移动到那里。

  4. 第二次迭代 - 步骤1
    聚类中心移动后,样本点与它们的距离发生了变化。我们再次执行分配步骤,根据新的聚类中心位置,重新为每个样本点分配归属。

  5. 第二次迭代 - 步骤2
    [在此处插入图片12]

    根据第二次分配的结果,再次计算每个簇的平均位置,并移动聚类中心。
    经过几轮迭代后,聚类中心会稳定下来,最终将数据清晰地划分为两个簇。

3.3 K-均值算法伪代码

[在此处插入图片13]

K-均值算法的流程可以总结为以下伪代码:

  1. 随机初始化 K 个聚类中心 μ₁, μ₂, ..., μₖ
  2. 进入循环,重复以下操作:
    • 分配步骤:对于每一个样本 x^(i) (从 i=1m):
      • 计算 x^(i) 到所有 K 个聚类中心的距离。
      • c^(i) 设为距离 x^(i) 最近的那个聚类中心的索引。
    • 移动步骤:对于每一个聚类 k (从 k=1K):
      • μₖ 更新为所有被分配到聚类 k 的样本点的平均值。

3.4 K-均值的应用场景

[在此处插入图片14]

K-均值算法不仅能处理像左图那样分离清晰的簇,也能处理像右图那样相互重叠、边界不清晰的簇。例如,在T恤尺码设计中,我们可以收集大量用户的身高体重数据,然后使用K-均值(例如 K=3)将他们聚类,找到分别代表S、M、L三种尺码的“原型”身材,从而指导T恤的设计和生产。

四 K-均值算法的优化目标

K-均值算法的迭代过程实际上是在优化一个特定的数学目标,即最小化一个代价函数(Cost Function)

4.1 代价函数:失真(Distortion)

[在此处插入图片15]

[在此处插入图片16]

K-均值算法的代价函数 J(也称为失真函数)被定义为:

  • 数据集中每个样本点 x^(i) 到其所属聚类中心 μ_c^(i) 之间距离的平方和的平均值
  • 公式: J = (1/m) * Σ ||x^(i) - μ_c^(i)||^2
  • 这个代价函数衡量了所有样本点到它们各自聚类中心的紧凑程度。J 的值越小,说明聚类的效果越好,簇内的点越密集。

4.2 K-均值算法如何最小化代价函数

[在此处插入图片17]

K-均值算法的两个步骤分别对应了对代价函数 J 的两个不同部分的最小化:

  • 分配步骤(Assign points):在保持聚类中心 μ 不变的情况下,通过调整每个样本点的归属 c^(i) 来最小化 J。显然,将每个 x^(i) 分配给离它最近的 μ 会使 ||x^(i) - μ_c^(i)||^2 这一项最小。
  • 移动步骤(Move centroids):在保持样本归属 c 不变的情况下,通过调整聚类中心 μₖ 的位置来最小化 J。可以从数学上证明,将 μₖ 设为该簇内所有点的平均值,可以使与该簇相关的平方和项最小。

[在此处插入图片18]

上图用一个一维的例子直观地说明了为什么均值是最佳选择。对于一组点,将中心点设为它们的均值,可以使到各点距离的平方和最小。

五 K-均值算法的实践要点

5.1 随机初始化与局部最优

[在此处插入图片19]

[在此处插入图片20]

K-均值算法的最终结果依赖于聚类中心的初始位置

  • 初始化方法:一个常用的方法是从 m 个训练样本中随机选择 K 个,并将这 K 个样本的位置作为初始的聚类中心位置。
  • 问题:不同的随机初始化可能会导致K-均值算法收敛到不同的最终聚类结果,其中一些可能是局部最优解,而不是全局最优解。

[在此处插入图片21]

如上图所示,对于同一份数据,一次好的初始化(J₁)可能得到理想的聚类结果和很低的代价 J,而一次不好的初始化(J₂, J₃)可能会得到很差的聚类结果和较高的代价 J

[在此处插入图片22]

解决方案

  • 多次运行K-均值算法(通常是50到1000次)。
  • 在每次运行中,都使用一组新的随机初始化的聚类中心。
  • 对每一次运行得到的最终聚类结果,计算其代价函数 J 的值。
  • 最后,选择所有运行中代价 J 最小的那一组聚类结果作为最终答案。

5.2 如何选择聚类数量 K

[在此处插入图片23]

K-均值算法需要我们预先指定聚类的数量 K。但如何确定最佳的 K 值呢?

[在此处插入图片24]

1. 肘部法则 (Elbow Method)

  • 方法:分别用不同的 K 值(例如从1到10)运行K-均值算法,并计算出每个 K 值对应的最低代价 J。然后,将 JK 的关系绘制成图。
  • 解读:随着 K 的增加,代价 J 总是会下降。我们寻找的是图中的“肘部”(Elbow),即 J 值急剧下降后变得平缓的那个点。这个点通常被认为是 K 的一个合理选择。
  • 局限性:很多时候,代价曲线并没有一个清晰的“肘部”,这使得该方法具有一定的主观性和模糊性。

[在此处插入图片25]

2. 评估下游指标

  • 核心思想:选择 K 的更有效的方法,是看哪个 K 值能更好地服务于我们进行聚类的最终目的(下游任务)
  • 例子:在T恤尺码的例子中,我们可以分别尝试 K=3K=5。然后评估哪种聚类结果能带来更好的商业表现,例如,K=5(增加了XS和XL码)是否能更好地满足客户需求并提升销量。最终,我们应该选择那个对下游任务最有帮助的 K 值。

六 异常检测 (Anomaly Detection)

异常检测是无监督学习的另一个重要分支,其目标是识别出与“正常”数据显著不同的“异常”数据点。

6.1 异常检测的基本思想

[在此处插入图片26]

以飞机引擎监控为例,我们拥有大量描述正常引擎运行状态的数据(如产生的热量 x₁、振动强度 x₂ 等)。当一个新的引擎 x_test 出现时,我们的任务是判断它的状态是否异常。

[在此处插入图片27]

异常检测的核心方法是密度估计(Density Estimation)

  1. 我们首先使用大量的正常样本数据来学习一个概率模型 p(x)。这个模型描述了正常数据点的概率分布。
  2. 对于一个新的测试样本 x_test,我们计算它在这个模型下的概率 p(x_test)
  3. 判断
    • 如果 p(x_test) 很高,说明 x_test 与正常数据的分布很吻合,它是一个正常(ok样本。
    • 如果 p(x_test) 非常低(低于我们设定的一个阈值 ε),说明 x_test 是一个在正常数据集中不太可能出现的点,它被判定为异常(anomaly)

6.2 异常检测的应用

[在此处插入图片28]

异常检测有许多实际应用:

  • 欺诈检测:通过分析用户的行为特征(登录频率、交易模式、打字速度等),建立正常用户行为模型 p(x),并识别出行为概率极低的异常用户。
  • 制造业:监控产品(如飞机引擎、电路板)的各项指标,识别出可能存在缺陷的次品。
  • 数据中心监控:监控服务器的特征(内存使用、CPU负载等),及时发现可能出现故障的机器。

6.3 基于高斯分布的异常检测算法

一个常用且有效的密度估计方法是假设数据特征服从高斯分布(Gaussian Distribution),也称正态分布。

[在此处插入图片29]

[在此处插入图片30]

高斯分布由两个参数决定:均值 μ(决定了分布的中心位置)和方差 σ²(决定了分布的宽度)。σ 是标准差。

[在此处插入图片31]

参数估计:对于一个给定的只包含正常样本的数据集,我们可以通过以下公式来估计每个特征的高斯分布参数(这对应于最大似然估计):

  • 均值 μ: (1/m) * Σ x^(i)
  • 方差 σ²: (1/m) * Σ (x^(i) - μ)² (在机器学习中,分母通常用m而非m-1)

[在此处插入图片32]

多维特征处理:当数据有 n 个特征时,一个简化的假设(尽管在实际中不一定成立,但常常效果不错)是各个特征之间相互独立。基于此假设,一个样本 x 的联合概率 p(x) 可以通过将它在每个特征上的边缘概率相乘得到:

  • p(x) = p(x₁) * p(x₂) * ... * p(xₙ) = Π p(xⱼ; μⱼ, σⱼ²)

[在此处插入图片33]

算法总结

  1. 选择 n 个你认为可能指示异常的特征 xⱼ
  2. 使用正常样本的训练集,为每个特征 j 估计参数 μⱼσⱼ²
  3. 对于一个新样本 x,使用高斯分布公式和独立性假设,计算其总概率 p(x)
  4. 如果 p(x) < ε,则将其标记为异常。

[在此处插入图片34]

上图展示了一个二维的例子。通过为 x₁x₂ 分别建立高斯模型,我们可以计算出二维空间中任意一点的概率 p(x)。图中 x_test^(1) 位于概率高的中心区域,被判为正常;而 x_test^(2) 位于概率低的边缘区域,被判为异常。

6.4 异常检测算法的评估

尽管异常检测算法的训练过程是无监督的(只使用正常样本),但为了评估其性能和选择超参数(如阈值ε),我们通常需要一些带标签的数据。

[在此处插入图片35]

数据划分策略

  • 训练集:包含大量的正常样本y=0)。用于学习概率模型 p(x)
  • 交叉验证集 (CV) 和 测试集:包含大量的正常样本(y=0),并混入一小部分已知的异常样本y=1)。

[在此处插入图片36]

评估流程

  • 由于CV集和测试集是高度偏斜的数据集(异常样本非常少)。
  • 因此,我们不应该使用准确率作为评估指标。

[在此处插入图片37]

  • 正确的评估指标:应该使用我们之前学过的精确率/召回率F1分数
  • 超参数调优:在训练集上拟合好 p(x) 模型后,我们在交叉验证集上尝试不同的阈值 ε,并选择那个能够使F1分数最高的 ε 作为最终的参数。然后在测试集上报告最终的性能。
http://www.dtcms.com/a/561516.html

相关文章:

  • zero的大型网站seo教程岳阳网站建设哪家好
  • 手机网站制作电话计算机网络中小型企业网络设计方案
  • 做的最好的门户网站做视频用的网站有哪些
  • TypeScript 课程总结笔记
  • 建设电影网站如何赚钱做企业内部网站要多久
  • OpenCV音视频编解码器详解
  • RV1126 NO.36:OPENCV的at函数遍历图像像素
  • .NET Reflector反编绎,如何移除DLL中的一个公开属性
  • Zookeeper监听机制
  • 四川淘宝网站建设方案视觉设计专业
  • ArrayList 与 LinkedList 的区别
  • 商丘做网站多少钱企业邮箱后缀
  • 数据结构期中复习个人笔记
  • 做断桥铝最知名的网站怎么用ps做网站超链接
  • linux系统网站建设资格证网站怎么做
  • 325建筑人才网招聘seo关键词推广怎么做
  • git命令的规范
  • 人形机器辅助设备
  • 深圳找网站建设公司沈阳男科医院哪家好哪个医院正规
  • 目标检测算法与原理(二):Tensorflow实现迁移学习
  • 用 Flink CDC 将 MySQL 实时同步到 Doris
  • win7家用电脑做网站服务器网站开发实习报告
  • 鲸鱼算法详细原理,公式,应用案例-鲸鱼算法优化扩展卡尔曼滤波EKF
  • 「PPG信号处理——(4)基于PPG-ECG 多模态生理信号预处理与特征提取方法研究」2025年11月2日
  • 【Kotlin内联函数】
  • (论文速读)YOLA:学习照明不变特征的低光目标检测
  • 太原网站建设方案开发开源之家
  • 系统思考修炼之旅
  • 网站 默认首页网站域名ip地址查询
  • 矩阵系统哪个好?2025年全方位选型指南与品牌深度解析