机器学习 K-Medoids聚类算法及解决示例

机器学习 K-Medoids聚类算法及解决示例

K-Medoids是一种使用聚类的分区方法的无监督聚类算法。它是K-Means聚类算法的改进版本,专门用于处理异常数据。它需要使用无标签数据进行工作。

在本文中,让我们用一个例子来了解K-Medoids算法。

K-Medoids算法

在K-Medoids算法中,每个数据点称为一个中心点。中心点作为聚类的中心。中心点是一个点,使得它到同一聚类中所有其他点的距离之和最小。可以使用任何适合的度量标准,如欧氏距离或曼哈顿距离来计算距离。

算法应用后,完整的数据分为K个聚类。

K-Medoids有三种类型-PAM、CLARA和CLARANS。PAM是最流行的方法。它有一个缺点就是它需要很长时间。

K-Medoid的应用方式是:

  • 一个点只能属于一个聚类

  • 每个聚类至少有一个点

让我们通过一个例子来看K-Medoids的工作过程。

工作过程

首先,我们有K个聚类和D个无标签的数据。

  • 首先,我们从数据集中选择K个点,并将它们分配给K个聚类。这些K个点作为初始中心点。每个对象被分配到一个聚类中。

  • 接下来,计算初始中心点(点)与其他点(非中心点)之间的距离,使用欧氏距离或曼哈顿距离等距离度量标准。

  • 非中心点被分配到与其到中心点距离最小的聚类中。

  • 现在计算总成本,即在一个聚类内从其他点到中心点的距离之和。

  • 接下来,选择一个随机的新的非中心对象s,并与初始中心对象r交换,并重新计算成本。

  • 如果成本小于costr,则交换变为永久交换。

  • 最后,重复步骤2到6,直到成本没有变化。

示例

让我们考虑以下一组数据。我们取k=2,距离公式为

\mathrm{D=\mid x_{2}-x_{1}\mid+\mid y_{2}-y_{1}\mid}

Sl. no x y
1 9 6
2 10 4
3 4 4
4 5 8
5 3 8
6 2 5
7 8 5
8 4 6
9 8 4
10 9 3

数据看起来类似于绘图中的下图。

机器学习 K-Medoids聚类算法及解决示例

对于 k = 2,我们选取了两个随机点 P1(8,4) 和 P2(4,6) 并计算与其他点的距离。

Sl. no x y Dist from P1 (8,4) Dist from P2 (4,6)
1 9 6 3 5
2 10 4 2 8
3 4 4 4 2
4 5 8 7 3
5 3 8 9 3
6 2 5 7 3
7 8 5 1 5
8 4 6 - -
9 8 4 - -
10 9 3 2 8

1,2,7,10 – 分配给P1(8,4)

3,4,5,6 – 分配给P2(4,6)

总花费 C1 = (3+2+1+2) +(2+3+3+3) = 19

现在让我们随机选择任意其他两个点作为中点 P1(8,5) 和 P2(4,6),并计算距离。

Sl. no x y Dist from P1(8,5) Dist from P2(4,6)
1 9 6 2 5
2 10 4 3 8
3 4 4 5 2
4 5 8 6 3
5 3 8 6 3
6 2 5 6 3
7 8 5 - -
8 4 6 - -
9 8 4 1 -
10 9 3 3 8

新成本参与C_{2}=[2+3+1+3]+[2+3+3+3]=20

交换所涉及的总成本C=C_{2}-C_{1}=20-19=1

由于交换所涉及的总成本大于0,我们将撤销交换。

点P1(8,4)和P2(4,6)被视为最终中心点,并且只使用这些点形成2个簇。

代码实现

import numpy as np
from sklearn_extra.cluster import KMedoids

data = {'x' : [9,10,4,5,3,2,8,4,8,9],
'y' : [6,4,4,8,8,5,5,6,4,3]}

x = [[i,j] for i,j in zip(data['x'],data['y'])]

data_x = np.asarray(x)
model_km = KMedoids(n_clusters=2)
km = model_km.fit(data_x)
print("Labels :",km.labels_)
print("Cluster centers  :",km.cluster_centers_)

输出

Labels : [1 1 0 0 0 0 1 0 1 1]
Cluster centers  : [[4. 6.]
 [8. 4.]]

结论

K-Medoids是对M-Means算法的改进方法。它是无监督的,需要无标签的数据。K-Mediods是一种基于距离的方法,依赖于聚类距离和聚类内的距离,其中medoids充当聚类中心,并作为参考点来计算距离。它非常有用,因为它可以有效处理异常值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程