Machine Learning 简明教程
Machine Learning - K-Medoids Clustering
K-Medoids Clustering - Algorithm
K 型 medoids 聚类算法可以总结如下:-
-
Initialize k medoids -从数据集中选择 k 个随机数据点作为初始 medoids。
-
Assign data points to medoids - 将每个数据点分配到最近的 medoid。
-
Update medoids -对于每个群集,选择一个使群集中所有其他数据点的距离之和最小化的数据点,并将它设置为新的 medoid。
-
重复步骤 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()
在此,我们以散点图形式绘制数据点,并根据其群集标签进行着色。我们还将质心绘制为红十字。
K-Medoids Clustering - Advantages
以下是使用 K-medoids 群集的优势 −
-
Robust to outliers and noise − 与 K-means 群集相比,K-medoids 群集对异常值和噪声的鲁棒性更高,因为它使用称为质心的数据代表点来表示群集中心。
-
Can handle non-Euclidean distance metrics − K-medoids 群集可用于任何距离度量,包括曼哈顿距离和余弦相似度等非欧几里得距离度量。
-
Computationally efficient − K-medoids 群集的计算复杂度为 O(k*n^2),低于 K-means 群集的计算复杂度。