三类聚类算法

k均值聚类算法(经典的)

算法步骤如下:

step1: 从数据集中随机选取K个样本作为初始聚类中心$C = {c_1,c_2,…,c_k}$;
step2: 针对数据集中的每个样本$x_1$,计算它到$K$个聚类中心的距离,并且将其分到距离最小的聚类中心所对应的类中;
step3:针对每个类别$c_i$,从新计算它的聚类中心$c_i = \frac{1} {|c_i|} \sum_{x \in c_i} x$ 属于这一类的所有样本的质心
step4:重复第二步和第三步直到聚类中心的位置不再变化

K均值++算法

该算法是由$D.Arthur$等人提出来的K-means++针对经典的K均值算法的第一步做了改进,在2016年Olivier Bachem和Mario Lucic等人将K-means++做了改进,该论文在NIPS2016

step1: 从数据集中随机选取一个样本作为初始的聚类中心$c_1$;
step2:首先计算每个样本与当前的已有的聚类中心之间的最短距离(即与最近的一个聚类中心的距离),用$D(x)$表示;接着计算每个样本被选为下一个聚类中心的概率$\frac{D(x)^2}{\sum_{x \in X} D(x)^2}$,最后,按照轮盘法选择下一个聚类中心;
step3:重复第二步的直到选出共$K$个聚类中心;
之后的过程与经典的$K-means$算法中的第2步和第4步相同

ISODATA算法

该算法较为复杂, K-means和K-means++的聚类中心数K是固定不变的,而ISODATA算法在运行过程中能够根据各个类别的实际情况进行两种操作来调整聚类中心数$K$,
ISODATA算法基本上有两个操作:

(1)分裂操作,对应的增加中心数;
(2) 合并操作,对应发减少聚类中心数。

关于ISODATA算法的输入参数的含义:

(1)预期的聚类中心数目$K_0$: 用户指定一个运行的中心数目,最终的数目使用其决定的,输出的数目范围是$[K_0/2,2K_0]$.
(2)每个类所有的要求的最少的样本数目$N_{min}$:用于判断某个类别所包含的样本分散程度较大时是否可以进行分裂操作的临界值。
(3)最大方差$\sigma$:用于衡量某个类别中样本的分散程度,是分裂操作的临界值(与第二个条件需要同时满足)
(4)两个类别对应的聚类中心之间所允许的最小距离$d_{min}$:如果两个类别考的特别近,则需要对这两个类别进行合并操作,该值是决定是否分裂的临界值

ISODATA算法的流程:

step1: 从数据集中随机选取出$K_0$个样本作为初始聚类中心$C = {c_1,c_2,…,c_{k_o}}$;
step2: 针对数据集中每个样本$x_i$,计算它到$K_0$个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中;
step3: 判断上述每个类中的元素数目是否小于$N_{min}$。如果小于N_{min}则需要丢弃该类,令$K = K-1$,并将该类中的样本重新分配给剩下类中距离最小的类;
step4:针对每个类别$c_i$,重新计算它的聚类中心$c_i = \frac{1}{|c_i|}\sum_{x \in c_i}x$(即属于该类的所有的质心);
step5: 如果当前${K \leq \frac{k_0}{2} }$,说明当前类别数太少,
step6: 如果当前$K \geq 2K_0$,说明当前的类别数太多,前往合并操作;
step7:如果达到最大的迭代次数则算法终止,否则回到第二步区继续执行

step5的合并操作:

step1:计算当前所有的类别聚类中心凉凉之间的距离,用矩阵$D$表示,其中$D(i,i) = 0$;
step2:对于$D(i,j) \le d_{min}(i \ne j)$的两个类别需要进行合并操作,变成一个新的类,该类中心位置为:
$$m_{new} = \frac{1}{n_i + n_j}(n_im_i + n_jm_j)$$
上式中的$n_i$和$n_j$表示这两个类别中的样本个数,新的聚类中心可以看作是对两个类别进行加权求和。如果其中一个类所把汗的样本个数较多,缩合成的新类就会更加偏向它。

step6的分裂操作:

step1:计算每个类别下的所有样本在每个维度下的方差;
step2:针对每个类别所有方差挑选出最大的方差$\sigma_{max}$;
step3:如果某个类别的$\sigma_{max} \ge Sigma$并且该类别包含的样本数量$n_i \geq 2n_{min}$,则可以进行分裂操作,前往步骤4,如果不满足上述条件则退分裂操作。
step4: 将满足步骤3中的条件的类分为两个子类别并令$K = K +1$,
$$m_i^{(+)} = m_i+\sigma_{max} ,m_i^{(-)} = m_i-\sigma_{max}$$
该算法能够在聚类过程中根据各个类所包含样本的实际情况动态调整聚类中心的数目。如果某个类中样本分散程度较大(通过方差进行衡量)并且样本数量较大,则对其进行分裂操作;如果某两个类别靠得比较近(通过聚类中心的距离衡量),则对它们进行合并操作。

-------------本文结束感谢您的阅读-------------