机器学习 - K-Medoids 聚类



K-Medoids 聚类 - 算法

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

  • 初始化 k 个 medoids - 从数据集中选择 k 个随机数据点作为初始 medoids。

  • 将数据点分配给 medoids - 将每个数据点分配给最近的 medoid。

  • 更新 medoids - 对于每个集群,选择最小化到集群中所有其他数据点的距离总和的数据点,并将其设置为新的 medoid。

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

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()

示例

以下是 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 绘制为红色十字。

medoids

K-Medoids 聚类 - 优点

以下是使用 K-medoids 聚类的优点:

  • 对异常值和噪声具有鲁棒性 - K-medoids 聚类比 K-means 聚类对异常值和噪声更具鲁棒性,因为它使用代表性数据点(称为 medoid)来表示集群的中心。

  • 可以处理非欧几里得距离度量 - K-medoids 聚类可以与任何距离度量一起使用,包括非欧几里得距离度量,例如曼哈顿距离和余弦相似度。

  • 计算效率高 - K-medoids 聚类的计算复杂度为 O(k*n^2),低于 K-means 聚类的计算复杂度。

K-Medoids 聚类 - 缺点

使用 K-medoids 聚类的缺点如下:

  • 对 k 的选择敏感 - K-medoids 聚类的性能可能对 k(集群数量)的选择敏感。

  • 不适用于高维数据 - K-medoids 聚类可能在高维数据上表现不佳,因为 medoid 选择过程变得计算成本很高。

广告