Machine Learning Park --聚类

5 聚类(Clustering)

本文Github仓库已经同步文章与代码https://github.com/Gary-code/Machine-Learning-Park/tree/main/Part1%20Machine%20Learning%20Basics

代码说明:

文件名说明
k_means.ipynb从0开始实现k-Means
GMM.ipynbGMM从零开始实现
k_means_practice.ipynbK_Means算法解决文本词汇聚类
corpus_train.txt用于K_Means聚类的文本数据集

如果你有时刻留意我们项目在github上的地址,你或许会发现从这里开始的代码会逐渐偏重于理论探讨场景应用。主要为了更好的将我们所讲的理论知识用于实践当中。

由于当前处于基础知识讲解版块,我们尽量控制为简单的实践。真正工业级别的实践,我们将在项目第二版块(当下应用)陆续为大家揭晓更多内容,敬请期待🚀

有错误欢迎读者联系我指正。

与前面讲解的算法模型不一样,聚类是一种无监督学习(Unsupervised Learning)的方式。

5.1 无监督学习

与有监督学习最大的不同,就是学习的数据是没有标签的。

在无监督学习的过程当中,我们需要输入一些没有标签的数据,让算法帮我们找到数据内在结构。对于聚类问题而言,这种内在结构就是类别

上图的数据看起来可以分开成为两个点集(),一个能够找到这两个簇的算法,就是我们这里要说的聚类算法

这里我们将介绍两个聚类算法:

  • K-Means(K均值)
  • GMM(高斯混合模型)
5.2 K-Means

K-Means算法步骤非常简单,具体过程为下面:

  • 首先选择𝐾个随机的点,称为聚类中心(cluster centroids);
  • 对于数据集中的每一个数据,按照距离𝐾个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。
  • 计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
  • 重复步骤,直至中心点几乎不再变化。

伪代码:

Repeat {
    for i = 1 to m
    c(i) := index (form 1 to K) of cluster centroid closest to x(i)
    for k = 1 to K
    μk := average (mean) of points assigned to cluster k
}

优化目标和损失函数

K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为:
J ( c ( 1 ) , … , c ( m ) , μ 1 , … , μ K ) = 1 m ∑ i = 1 m ∥ X ( i ) − μ c ( i ) ∥ 2 J\left(c^{(1)}, \ldots, c^{(m)}, \mu_{1}, \ldots, \mu_{K}\right)=\frac{1}{m} \sum_{i=1}^{m}\left\|X^{(i)}-\mu_{c^{(i)}}\right\|^{2} J(c(1),,c(m),μ1,,μK)=m1i=1mX(i)μc(i)2
其中Font metrics not found for font: .代表与 𝑥 ( 𝑖 ) 𝑥^{(𝑖)} x(i)最近的聚类中心点。

对此我们可以分析出:

  • 第一个循环是用于减小 𝑐 ( 𝑖 ) 𝑐^{(𝑖)} c(i)引起的代价
  • 而第二个循环则是用于减小Font metrics not found for font: .引起的代价。
  • 迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误。
初始化问题

由于我们开始选取的K个点是随机的,因此算法有可能会停留在一个局部最小值处。

为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。

聚类数量选择

另外一个可调节的参数就是K,聚类的数量。我们通常采用“肘部法则”来决定。如果你接触过主成分析法(PCA),肯定对此不会感到陌生。

所有的数据都会分到一个聚类里,然后计算成本函数或者计算畸变函数 J J J K K K代表聚类数量。

下面我们来看一个例子:

通过分析,使用3个类别来进行聚类是正确的。

5.3 GMM(高斯混合模型)

与K均值算法类似,同样使用了EM算法进行迭代计算。

高斯混合模型假设每个簇的数据都是符合高斯分布(正态分布),因此当前数据呈现的分布就是各个簇的高斯分布叠加在一起的结果。

高斯混合模型的核心思想是,假设数据可以看作从多个高斯分布中生成出来的。

在该假设下,每个单独的分模型都是标准高斯模型:

  • 其均值 μ k \mu_k μk 和方差 σ k \sigma_k σk 是待估计的参数
  • 每个分模型都还有一个参数 α k \alpha_k αk
  • 参数表示为 θ k \theta_k θk可以理解为权重或生成数据的概率。高斯混合模型的公式为:

P ( x ∣ θ ) = ∑ k = 1 K α k ϕ ( x ∣ θ k ) P(x \mid \theta)=\sum_{k=1}^{K} \alpha_{k} \phi\left(x \mid \theta_{k}\right) P(xθ)=k=1Kαkϕ(xθk)

对于上面三个参数的求解,我们开始的想法或许是采用概率统计学当中的最大似然估计的方法。遗憾的是,此问题中直接使用最大似然估计,得到的是一 个复杂的非凸函数,目标函数是和的对数,难以展开和对其求偏导,其表达式如下:
log ⁡ L ( θ ) = ∑ j = 1 N log ⁡ P ( x j ∣ θ ) = ∑ j = 1 N log ⁡ ( ∑ k = 1 K α k ϕ ( x ∣ θ k ) ) \log L(\theta)=\sum_{j=1}^{N} \log P\left(x_{j} \mid \theta\right)=\sum_{j=1}^{N} \log \left(\sum_{k=1}^{K} \alpha_{k} \phi\left(x \mid \theta_{k}\right)\right) logL(θ)=j=1NlogP(xjθ)=j=1Nlog(k=1Kαkϕ(xθk))

这种情况下可以采用EM算法来求解。

EM算法
  1. E-step:求期望 E ( γ j k ∣ X , θ ) E\left(\gamma_{j k} \mid X, \theta\right) E(γjkX,θ) for all j = 1 , 2 , . . . N ; k = 1 , 2 , . . . , K j=1,2,...N;k=1,2,...,K j=1,2,...N;k=1,2,...,K
  2. M-step:求极大,计算新一轮迭代的模型参数。

EM算法是在最大化目标函数时:

  1. 固定一个变量使整体函数变为凸优化函数
  2. 求导得到最值
  3. 利用最优参数更新被固定的变量,进入下一个循环。

对于GMM:

首先,随机初始化参数的值。然后,重复下述两步,直到收敛。

  • E步骤。依据当前参数,计算每个数据 j j j来自子模型 k k k的可能性。

γ j k = α k ϕ ( x j ∣ θ k ) ∑ k = 1 K α k ϕ ( x j ∣ θ k ) , j = 1 , 2 , … , N ; k = 1 , 2 , … , K \gamma_{j k}=\frac{\alpha_{k} \phi\left(x_{j} \mid \theta_{k}\right)}{\sum_{k=1}^{K} \alpha_{k} \phi\left(x_{j} \mid \theta_{k}\right)}, j=1,2, \ldots, N ; k=1,2, \ldots, K γjk=k=1Kαkϕ(xjθk)αkϕ(xjθk),j=1,2,,N;k=1,2,,K

  • M步骤。使用E步骤估计出的概率,来改进每个分模型的均值,方差和权重。如下所示,注意:每计算完一个值就马上更新

μ k = ∑ j N ( γ j k x j ) ∑ j N γ j k , k = 1 , 2 , … , K \mu_{k}=\frac{\sum_{j}^{N}\left(\gamma_{j k} x_{j}\right)}{\sum_{j}^{N} \gamma_{j k}}, k=1,2, \ldots, K μk=jNγjkjN(γjkxj),k=1,2,,K

用这一轮更新后的 μ k \mu_k μk
σ k = ∑ j N γ j k ( x j − μ k ) ( x j − μ k ) T ∑ j N γ j k , k = 1 , 2 , … , K \sigma_{k}=\frac{\sum_{j}^{N} \gamma_{j k}\left(x_{j}-\mu_{k}\right)\left(x_{j}-\mu_{k}\right)^{T}}{\sum_{j}^{N} \gamma_{j k}}, k=1,2, \ldots, K σk=jNγjkjNγjk(xjμk)(xjμk)T,k=1,2,,K

α k = ∑ j = 1 N γ j k N , k = 1 , 2 , … , K \alpha_{k}=\frac{\sum_{j=1}^{N} \gamma_{j k}}{N}, k=1,2, \ldots, K αk=Nj=1Nγjk,k=1,2,,K
重复E-M过程,直到收敛

举一个例子:

高斯混合模型是一个生成式模型。可以这样理解数据的生成过程,假设一个最简单的情况,即只有两个一维标准高斯分布的分模型N(0,1)和N(5,1),其权重分别为0.7和0.3。

那么,在生成第一个数据点时,先按照权重的比例,随机选择一个分布,比如选择第一个高斯分布,接着从N(0,1)中生成一个点,如−0.5,便是第一个数据点。

在生成第二个数据点时,随机选择到第二个高斯分布N(5,1),生成了第二个点4.7。如此循环执行,便生成出了所有的数据点。

也就是说,我们并不知道最佳的K个高斯分布的各自3个参数,也不知道每个数据点究竟是哪个高斯分布生成的。所以每次循环时:

  • 先固定当前的高斯分布不变,获得每个数据点由各个高斯分布生成的概率。
  • 然后固定该生成概率不变,根据数据点和生成概率,获得一个组更佳的高斯分布。
  • 循环往复,直到参数的不再变化,或者变化非常小时,便得到了比较合理的一组高斯分布。

与K-Means相比,GMM同样需要指定K类别,且都往往只能收敛于局部最优。

但其有点就是,引入了概率的知识:

  • 可以给出一个样本属于某类的概率是多少。
  • 不仅仅可以用于聚类,还可以用于概率密度的估计。
  • 并且可以用于生成新的样本点。
5.4 参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值