喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
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直到收敛
- 重复以上所有步骤直到所有的点都被归类
- 分类:根据每个类对每个点的访问频率,取访问频率最大的那个类作为当前集的所属类