聚类是一种无标签数据输入的算法。
每个聚类算法都有两个变量:
- 类别:调用
fit
方法在训练集上去学习聚合成多个类别; - 给定的训练数据
一、K-Means
KMeans算法通过试着在n组方差相等的样本中分类样本来聚类数据,最小化评价标准。这个算法需要指明聚类的个数。它可以很好的拓展到大量的样本。
K-means算法将 N N N个样本分到 K K K个不相交的聚类 C C C中,每个聚类都是通过这个聚类中的样本的均值 μ j \mu_j μj来描述的。这些均值通常叫做这些对应聚类的中心。
K-means算法的目标是最小化惯性的质心或者簇内平方和标准。
∑ i = 0 n m i n ( ∣ ∣ x i − μ j ∣ ∣ 2 ) \sum_{i = 0}^nmin(||x_i - \mu_j||^2) i=0∑nmin(∣∣xi−μj∣∣2)
惯性可以被认为是一种衡量聚类内部一致性的方法,但是缺点也很多:
- 惯性使得假设簇是凸的和各向同性的,但情况并不总是这样。它对细长的簇或不规则形状的流形反应不良。
- 质心不是一个标准化的度量,我们只知道值越低越好,零是最优的,但是在高维空间,欧式距离会膨胀。在k-means聚类之前可以使用主成分分析(PCA)等降维算法可以缓解这个一问题,提高计算速度。
k-means有三个基本步骤:
- (1)在选择初始化质心,最基本的方法就是从数据集 X X X中选择 k k k个样本。在初始化后,k-means就由剩下两步循环完成。
- (2)通过计算将本格样本分到其最近的质心。
- (3)通过取分配给每个质心的所有样本的均值来创建新的质心。计算新旧质心之间的差值,重复上面两步(2)(3),直到差值小于阈值。
给定足够的时间, K-means总是会收敛的,但是这可能导致局部最小化。这也很高度依赖于质心的初始化。因此,计算通常要进行多次,并对质心进行不同的初始化。在scikit-learn
中使用init=‘k-means++
这个参数来设置,这比之前的随机初始化结果要好。
(1)Low-Level parallelism
KMeans 通过Cython从基于OpenMP的并行中获益。小块的数据(256个样本)可以被并行处理。
(2)Mini Batch K-Means
MiniBatchKMeans 是 KMeans的一个变体,前用是用小批数据来减少计算时间,同时人要试图优化相同的目标函数。Mini-Batches 是输入数据的一个子集,在每次训练迭代中随机采用。这些小批量能极大减少收敛到局部所需要的计算量。与其他减少k-means收敛时间的算法相比,mini-batch k-means算法产生的结果也只是比标准算法略差一点。
这个算法的迭代有两个主要步骤:
- (1)从数据集中随机挑选 b b b个样本来构成一个小的批次,随后这些就被分到离其最近的质心去
- (2)质心的更新,与 k-means 相比,这是在每个样本的基础上完成的。
对于小批中的每个样本,通过取该样本和之前分配给该质心的所有样本的流平均值来更新所分配的质心。这样做的效果是随着时间的推移减少质心的变化率。这些步骤一直执行到收敛或达到预定的迭代次数。
MiniBatchKMeans 收敛速度比 KMneas 快,但是结果要比 KMeans差些,但是差距也是非常小的。
二、AP聚类算法(Affinity Propagation)
AffinityPropagation通过在成对的样本之间传递信息来创建聚类,直到收敛。然后用少量的样本来描述数据集,这些样本被识别为最能代表代表其它样本的样本。在对之间发送的消息表示一个样本是否适合成为另一个样本的范例,并根据其它对的值进行更新。这种迭代的更新直到收敛,在收敛时最终的样本点被选中,从而给出最终的聚类。
AP是根据所提供的数据来选择聚类的数目。为此,有两个重要的参数:
- preference:控制使用有多少个范例
- damping:它可以抑制信息,避免在更新这些消息时出现数值振荡
AP算法的缺点主要是其复杂性。这个算法的时间复杂度是 O ( N 2 T ) O(N^2T) O(N2T),这里 N N N是样本的个数, T T T是到收敛的时候迭代的次数。如果是用密集相似矩阵,则空间复杂度是 O ( N 2 ) O(N^2) O(N2),但是可以减少如果用的是稀疏矩阵的话。这使得AP聚类更适合中小型的数据集。
算法描述:点之间发送的消息属于两类。首先是责任型 r ( i , k ) r(i, k) r(i,k),这类是积累证据来表明样本 k k k应该为样本 i i i的范例。第二种是可用型 α ( i , k ) \alpha(i, k) α(i,k),这类是聚类证据表明样本 i i i可用选择成为样本 k k k的一个范例,并考虑所有其他样本的值k应该是一个样本。这样,如果样本(1)与多个样本足够相似,(2)多个样本选择的样本能够代表自己,样本就会选择范例。
公式化:
-
对于责任型 r ( i , k ) r(i, k) r(i,k):
r ( i , k ) ⟵ s ( i , k ) − m a x [ α ( i , k ‘ ) + s ( i , k ‘ ) ∀ k ‘ ≠ k ] r(i, k) \longleftarrow s(i, k) - max[\alpha(i, k^‘) + s(i, k^‘) \forall k^‘ \neq k] r(i,k)⟵s(i,k)−max[α(i,k‘)+s(i,k‘)∀k‘=k]
这咯, S ( i , k ) S(i, k) S(i,k)是样本 i i i 和 k k k的相似性
-
对于可用性 α ( i , k ) \alpha(i, k) α(i,k):
α ( i , k ) ⟵ m i n [ 0 , r ( k , k ) + ∑ i ‘ s . t . i ‘ ∉ { i , k } r ( i ‘ , k ) ] \alpha(i, k) \longleftarrow min[0, r(k, k) + \sum_{i^‘ s.t. i^‘ \notin \{i, k\}} r(i^‘, k)] α(i,k)⟵min[0,r(k,k)+i‘s.t.i‘∈/{i,k}∑r(i‘,k)]
开始时,所有的 r r r和 α \alpha α都设为0,每次迭代为:
r t + 1 ( i , k ) = λ ⋅ r t ( i , k ) + ( 1 − λ ) ⋅ r t + 1 ( i , k ) r_{t + 1}(i, k) = \lambda · r_t(i, k)+(1-\lambda) · r_{t + 1}(i, k) rt+1(i,k)=λ⋅rt(i,k)+(1−λ)⋅rt+1(i,k)
α t + 1 ( i , k ) = λ ⋅ α t ( i , k ) + ( 1 − λ ) ⋅ α t + 1 ( i , k ) \alpha_{t + 1}(i, k) = \lambda ·\alpha_t(i, k) + (1-\lambda) ·\alpha_{t + 1}(i, k) αt+1(i,k)=λ⋅αt(i,k)+(1−λ)⋅αt+1(i,k)
参考文献:
【1】Clustering¶