Machine Learning 简明教程

Machine Learning - K-Medoids Clustering

K-Medoids Clustering - Algorithm

K 型 medoids 聚类算法可以总结如下:-

  1. Initialize k medoids -从数据集中选择 k 个随机数据点作为初始 medoids。

  2. Assign data points to medoids - 将每个数据点分配到最近的 medoid。

  3. Update medoids -对于每个群集,选择一个使群集中所有其他数据点的距离之和最小化的数据点,并将它设置为新的 medoid。

  4. 重复步骤 2 和 3 直到收敛或达到最大迭代次数。

Implementation in Python

要在 Python 中实施 K 型 medoids 聚类,我们可以使用 scikit-learn 库。 scikit-learn 库提供了 KMedoids 类,该类可用于在数据集上执行 K 型 medoids 聚类。

首先,我们需要导入所需的库:-

from sklearn_extra.cluster import KMedoids
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

接下来,我们使用 scikit-learn 中的 make_blobs() 函数生成示例数据集:-

X, y = make_blobs(n_samples=500, centers=3, random_state=42)

在此,我们生成一个包含 500 个数据点和 3 个群集的数据集。

接下来,我们初始化 KMedoids 类并拟合数据 −

kmedoids = KMedoids(n_clusters=3, random_state=42)
kmedoids.fit(X)

在此,我们设置群集数为 3 并使用 random_state 参数以确保可重现性。

最后,我们可使用散点图可视化群集结果 −

plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=kmedoids.labels_, cmap='viridis')
plt.scatter(kmedoids.cluster_centers_[:, 0],
kmedoids.cluster_centers_[:, 1], marker='x', color='red')
plt.show()

Example

以下是完整的 Python 实现代码 −

from sklearn_extra.cluster import KMedoids
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# Generate sample data
X, y = make_blobs(n_samples=500, centers=3, random_state=42)

# Cluster the data using KMedoids
kmedoids = KMedoids(n_clusters=3, random_state=42)
kmedoids.fit(X)

# Plot the results
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=kmedoids.labels_, cmap='viridis')
plt.scatter(kmedoids.cluster_centers_[:, 0],
kmedoids.cluster_centers_[:, 1], marker='x', color='red')
plt.show()

在此,我们以散点图形式绘制数据点,并根据其群集标签进行着色。我们还将质心绘制为红十字。

medoids

K-Medoids Clustering - Advantages

以下是使用 K-medoids 群集的优势 −

  1. Robust to outliers and noise − 与 K-means 群集相比,K-medoids 群集对异常值和噪声的鲁棒性更高,因为它使用称为质心的数据代表点来表示群集中心。

  2. Can handle non-Euclidean distance metrics − K-medoids 群集可用于任何距离度量,包括曼哈顿距离和余弦相似度等非欧几里得距离度量。

  3. Computationally efficient − K-medoids 群集的计算复杂度为 O(k*n^2),低于 K-means 群集的计算复杂度。

K-Medoids Clustering - Disadvantages

使用 K-medoids 群集的劣势如下 −

  1. Sensitive to the choice of k − K-medoids 群集的性能对 k(群集数)的选择很敏感。

  2. Not suitable for high-dimensional data − K-medoids 群集对高维数据可能效果不佳,因为质心选择过程在计算上会变得昂贵。