聚类算法-kmeans

聚类概念:

  • 无监督问题:我们手里没有标签了
  • 聚类:相似的东西分到一组
  • 难点:如何评估,如何调参

k-means算法

K-means算法的目标是找到簇中心(质心)和簇的分配,以最小化所有点到其最近的簇中心的距离的平方和。
基本概念:

  • 要得到簇的个数,需要指定K值
  • 质心:均值,即向量各维取平均即可
  • 距离的度量:常用欧几里得距离和余弦相似度(先标准化)

优化目标:
主要有两种方式:

  1. 分解最大SSE (误差平方和)的簇。
    直接在簇内执行一次 k=2 的 K-Means 聚类即可。
  2. 合并距离最小的簇 或者 合并SSE增幅最小的两个簇。
    基于这两种最基本优化策略,可以采用二分K-Means算法

伪代码:

创建 k 个点作为起始质心 (随机选择):
   当任意一个点的簇分配结果发生改变的时候:
       对数据集中的每个数据点:
           对每个质心:
               计算质心与数据点之间的距离
           将数据点分配到距其最近的簇
       对每一个簇:
           求出均值并将其更新为质心
  • 优势: 简单,快速,适合常规数据集
  • 劣势:值难确定 、复杂度与样本呈线性关系、很难发现任意形状的簇

DBSCAN算法

基本概念: ( Density-Based Spatial Clustering of Applications with Noise)

  • 核心对象:若某个点的密度达到算法设定的阈值则其为核心点(即r邻域内点的数量 ≥ minPts)
  • e-邻域的距离阈值:设定的半径r
  • 直接密度可达:若某点p在点g的 r 邻域内,且q是核心点则p-q直接密度可达)
  • 密度可达:若有一个点的序列q0、q1、…qk,对任意qi-gi-1是直接密度可达的则称从q0到qk密度可达,这实际上是直接密度可达的“传播”

基本概念

  • 密度相连: 若从某核心点p出发,点和点k都是密度可达的则称点q和点k是密度相连的。
  • 边界点:属于某一个类的非核心点,不能发展下线了
  • 直接密度可达: 若某点在点g的r 邻域内,且q是核心点则p-g直接密度可达
  • 噪声点:不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达的

在这里插入图片描述

工作流程:

伪代码

DBSCAN(数据集 D, 半径 eps, 最小点数 MinPts)
    初始化簇标号 C = 0
    for 数据集 D 中的每个点 P
        if P 已被访问
            继续检查下一个点
        标记 P 为已访问
        邻域点集 NeighborPts = 区域查询(P, eps)
        if 邻域点集 NeighborPts 的数量 < MinPts
            标记 P 为噪声
        else
            C = 新的簇
            扩展簇(P, NeighborPts, C, eps, MinPts)

扩展簇(P, 邻域点集 NeighborPts, 簇 C, 半径 eps, 最小点数 MinPts)
    将 P 加入簇 C
    for 邻域点集 NeighborPts 中的每个点 P'
        if P' 未被访问
            标记 P' 为已访问
            邻域点集 NeighborPts' = 区域查询(P', eps)
            if 邻域点集 NeighborPts' 的数量 >= MinPts
                邻域点集 NeighborPts = 邻域点集 NeighborPts 并集 邻域点集 NeighborPts'
        if P' 还不是任何簇的成员
            将 P' 加入簇 C

区域查询(P, 半径 eps)
    返回点 P 的 eps-邻域内的所有点(包括 P 自身)

优势:

  • 不需要指定族个数
  • 可以发现任意形状的簇
  • 擅长找到离群点(检测任务 )
  • 两个参数就够了

劣势:

  • 高维数据有些困难(可以做降维)
  • 参数难以选择(参数对结果的影响非常大)
  • Sklearn中效率很慢(数据削减策略)

高斯混合模型(GMM)

高斯混合模型是一种概率模型,它假设所有数据点都是由有限数量的高斯分布的混合生成的。

数学表述

在GMM中,我们假设有 K K K个高斯分布,每个分布 k k k都有自己的均值 μ k \mu_k μk、协方差 Σ k \Sigma_k Σk和混合权重 π k \pi_k πk。数据点 x x x的概率密度函数可以表示为:

p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x | \mu_k, \Sigma_k) p(x)=k=1KπkN(xμk,Σk)

其中 N ( x ∣ μ , Σ ) \mathcal{N}(x | \mu, \Sigma) N(xμ,Σ)是高斯分布的概率密度函数。

参数学习

GMM的参数通常通过最大期望(EM)算法来估计。EM算法包括以下两个步骤:

  1. E步骤(Expectation Step) - 估计给定当前参数下,每个数据点来自每个高斯分布的概率(即“责任”)。
  2. M步骤(Maximization Step) - 更新每个高斯分布的参数,以最大化所有数据点的对数似然。

伪代码

初始化

选择高斯分布的数量 K K K,随机初始化每个分布的均值 μ k \mu_k μk、协方差 Σ k \Sigma_k Σk和混合系数 π k \pi_k πk。这些参数可以通过如k-means聚类的结果来初始化。

E-Step

对于每个数据点 x i x_i xi和每个分布 k k k,计算责任 γ ( z i k ) \gamma(z_{ik}) γ(zik),它是数据点 x i x_i xi由分布 k k k生成的概率:
γ ( z i k ) = π k N ( x i ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x i ∣ μ j , Σ j ) \gamma(z_{ik}) = \frac{\pi_k \mathcal{N}(x_i | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_i | \mu_j, \Sigma_j)} γ(zik)=j=1KπjN(xiμj,Σj)πkN(xiμk,Σk)

M-Step

使用E-Step得到的责任来更新参数:

更新每个分布的均值 μ k \mu_k μk
μ k = ∑ i = 1 N γ ( z i k ) x i ∑ i = 1 N γ ( z i k ) \mu_k = \frac{\sum_{i=1}^{N} \gamma(z_{ik}) x_i}{\sum_{i=1}^{N} \gamma(z_{ik})} μk=i=1Nγ(zik)i=1Nγ(zik)xi
其中, N k = ∑ i = 1 N γ ( z i k ) N_k = \sum_{i=1}^{N} \gamma(z_{ik}) Nk=i=1Nγ(zik)是分布 k k k的有效样本大小。

更新每个分布的协方差 Σ k \Sigma_k Σk
Σ k = ∑ i = 1 N γ ( z i k ) ( x i − μ k ) ( x i − μ k ) T ∑ i = 1 N γ ( z i k ) \Sigma_k = \frac{\sum_{i=1}^{N} \gamma(z_{ik}) (x_i - \mu_k)(x_i - \mu_k)^T}{\sum_{i=1}^{N} \gamma(z_{ik})} Σk=i=1Nγ(zik)i=1Nγ(zik)(xiμk)(xiμk)T
更新混合系数 π k \pi_k πk
π k = ∑ i = 1 N γ ( z i k ) N \pi_k = \frac{\sum_{i=1}^{N} \gamma(z_{ik})}{N} πk=Ni=1Nγ(zik)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值