【Python机器学习】2.2. 聚类分析算法理论:K均值聚类(KMeans Analysis)、KNN(K近邻分类)、均值漂移聚类(MeanShift)

喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

2.2.1. K均值聚类(KMeans Analysis)

K均值算法是以空间中K个点为中心进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础 但也最为重要的算法。

数学原理

计算数据点与各簇中心点的距离:
d i s t ( x i , u j t ) {dist}(x_i, u_j^t) dist(xi,ujt)

然后根据距离归类:
x i ∈ u nearest t x_i \in u^t_{\text{nearest}} xi∈unearestt

最后更新中心:
u j t + 1 = 1 k ∑ x i ∈ S j x i u_j^{t+1} = \frac{1}{k} \sum_{x_i \in S_j} x_i ujt+1=k1xi∈Sj∑xi

  • S j S_j Sj: t t t 时刻第 j j j 个区域簇
  • k k k: 包含在 S j S_j Sj 范围内点的个数
  • x i x_i xi: 包含在 S j S_j Sj 范围内的个数
  • u j t u_j^t ujt: t t t 状态下第 j j j 区域中心

展开分析

我们来一步一步展开分析一下:

1. 计算数据点与各簇中心点的距离

dist ( x i , u j t ) \text{dist}(x_i, u_j^t) dist(xi,ujt)

这表示计算 数据点 x i x_i xi与 j j j 个簇中心 u j t u_j^t ujt (注: u j t u_j^t ujt指的是 j j j个簇在第 t t t轮迭代时的中心点 )之间的距离。计算时一般都使用欧几里得距离:
dist ( x i , u j t ) = ∑ d ( x i d − u j d t ) 2 \text{dist}(x_i, u_j^t) = \sqrt{\sum_{d} (x_{id} - u_{jd}^t)^2} dist(xi,ujt)=d∑(xid−ujdt)2

2. 根据距离归类

x i ∈ u nearest t x_i \in u^t_{\text{nearest}} xi∈unearestt

这表示 将数据点 x i x_i xi归类到最近的簇中心 (即属于距离最近的 u j t u_j^t ujt代表的簇)。

具体步骤是:

  • 计算所有簇中心 u j t u_j^t ujt与数据点 x i x_i xi的距离。
  • 找到最近的中心:
    j ∗ = arg ⁡ min ⁡ j dist ( x i , u j t ) j^* = \arg\min_j \text{dist}(x_i, u_j^t) j∗=argjmindist(xi,ujt)
  • 将 x i x_i xi归类到最近的簇,即属于 j ∗ j^* j∗号簇。

3. 更新中心

u j t + 1 = 1 k ∑ x i ∈ S j x i u_j^{t+1} = \frac{1}{k} \sum_{x_i \in S_j} x_i ujt+1=k1xi∈Sj∑xi

这一公式用于更新每个簇的中心点 ,通过计算该簇内所有点的均值来更新中心。

  • S j S_j Sj是第 j j j个簇内的所有数据点集合。
  • k k k是该簇内数据点的个数。

计算步骤

  • 找到第 j 个簇的所有数据点 ,即所有归入该簇的 x i x_i xi。
  • 计算这些点的均值 ,更新该簇的中心:
    u j t + 1 = 1 k ∑ x i ∈ S j x i u_j^{t+1} = \frac{1}{k} \sum_{x_i \in S_j} x_i ujt+1=k1xi∈Sj∑xi
  • 重复以上步骤,直到收敛(即簇中心不再变化)。

算法流程

  • 选择聚类的个数 k k k
  • 确定聚类中心
  • 根据点到聚类中心聚类来确定各个点所属类别
  • 根据各个类别数据更新聚类中心
  • 重复以上步骤知道收敛(中心点不再变化时)

优缺点

优点:

  • 原理简单,实现容易,收敛速度快
  • 参数少,方便使用

缺点:

  • 必须确定簇的数量
  • 随机选择初始聚类中心会导致结果缺乏一致性

2.2.2. KMeans vs. KNN

KMeans的中文是K均值聚类,KNN的中文名是K近邻分类。这两者虽然名字很像,但是确是完全不同的两种算法。

有很多人容易搞混这两种算法,所里这里专门比较一下。

这幅图已经非常直观地展现了两者本质上的区别------KMeans是无监督学习,K近邻分类是监督学习。

在这里我们也介绍一下KNN:

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类 ,就把该输入实例分类到这个类中。

2.2.3. 均值漂移聚类(MeanShift)

均值漂移算法是一种基于密度梯度上升的聚类算法(沿着密度上升方向寻找聚类中心点)

均值漂移算法相比K均值算法最大的优势就在于它不需要知道最终要分成几个簇

数学原理

先均值偏移:
M ( x ) = 1 k ∑ x i ∈ S h ( u − x i ) M(x) = \frac{1}{k} \sum_{x_i \in S_h} (u - x_i) M(x)=k1xi∈Sh∑(u−xi)

再更新中心:
u t + 1 = M t + u t u^{t+1} = M^t + u^t ut+1=Mt+ut

其中:

  • S h S_h Sh: 以 u u u 为中心点,半径为 h h h 的高维球区域
  • k k k: 包含在 S h S_h Sh 范围内点的个数
  • x i x_i xi: 包含在 S h S_h Sh 范围内的点
  • M t M^t Mt: t t t 状态下求得的偏移均值
  • u t u^t ut: t t t 状态下的中心

展开分析

接下来我们来展开分析一下:

1. 均值偏移计算

M ( x ) = 1 k ∑ x i ∈ S h ( u − x i ) M(x) = \frac{1}{k} \sum_{x_i \in S_h} (u - x_i) M(x)=k1xi∈Sh∑(u−xi)

其中:

  • S h S_h Sh:以 u u u为中心,半径为 h h h的高维球区域(即邻域)
  • k k k:邻域 S h S_h Sh内的点个数
  • x i x_i xi:邻域 S h S_h Sh内的点
  • M ( x ) M(x) M(x):偏移均值,表示数据点分布的偏移方向

这个公式会:

  • 计算邻域内所有点 x i x_i xi到当前中心点 u u u的偏差 ( u − x i u - x_i u−xi)
  • 对所有偏差求均值,得到中心点的漂移方向 M ( x ) M(x) M(x)
  • 如果 M ( x ) M(x) M(x)远离当前中心点 u u u ,说明该区域的密度中心在别处,需要调整 u u u位置。

核心思想是:

  • 计算 当前中心点 u u u位置的偏移量 M ( x ) M(x) M(x)
  • 这个偏移量基于 u u u周围的邻域点进行计算

2. 更新中心点

u t + 1 = M t + u t u^{t+1} = M^t + u^t ut+1=Mt+ut

这一公式用于更新均值漂移的中心点

  • 当前中心点 u t u^t ut沿着均值偏移量 M t M^t Mt方向移动 ,得到新的中心 u t + 1 u^{t+1} ut+1
  • 该迭代过程 不断调整中心点位置 ,直到收敛(即 M ( x ) M(x) M(x)接近0)

算法流程

  • 随机选择未分类的点作为中心点
  • 找出里中心点距离在带宽之内的点,记作集合 S S S
  • 计算从中心点到集合 S S S中每个元素的偏移向量 M M M
  • 中心点以向量 M M M移到
  • 重复步骤2-4直到收敛
  • 重复以上所有步骤直到所有的点都被归类
  • 分类:根据每个类对每个点的访问频率,取访问频率最大的那个类作为当前集的所属类
相关推荐
python_chai2 分钟前
Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解
网络·python·tcp/ip·udp·socket
一只名叫Me的猫3 分钟前
conda 创建、激活、退出、删除环境命令
python·conda
Steve lu38 分钟前
PyTorch逻辑回归总结
人工智能·pytorch·python·深度学习·逻辑回归·原力计划
Steve lu1 小时前
pytorch实现逻辑回归
人工智能·pytorch·python·深度学习·机器学习·自然语言处理·逻辑回归
小媛早点睡1 小时前
贪心算法day10(无重叠区间)
算法·贪心算法
xcSpark1 小时前
Python基础入门(二)
开发语言·人工智能·python
DataFunTalk1 小时前
乐信集团副总经理周道钰亲述 :乐信“黎曼”异动归因系统的演进之路
前端·后端·算法
予早1 小时前
Python 冷门魔术方法
开发语言·python
行走的bug...1 小时前
sklearn估计器和变换器共有的一些方法 待更新
人工智能·算法·sklearn
DataFunTalk1 小时前
开源一个MCP+数据库新玩法,网友直呼Text 2 SQL“有救了!”
前端·后端·算法