K均值聚类算法是一种常用的无监督学习算法,它可以将数据集分成K个簇,每个簇包含相似的数据点。在本文中,我们将介绍如何使用Python实现K均值聚类算法。
K均值聚类算法的原理
K均值聚类算法的原理非常简单,它的基本思想是将数据集分成K个簇,每个簇包含相似的数据点。具体步骤如下:
- 随机选择K个数据点作为初始质心。
- 将每个数据点分配到最近的质心所在的簇中。
- 重新计算每个簇的质心。
- 重复步骤2和步骤3,直到质心不再发生变化或达到最大迭代次数。
使用Python实现K均值聚类算法
下面是一个使用Python实现K均值聚类算法的示例代码:
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=100):
# 随机初始化K个质心
centroids = X[np.random.choice(len(X), K, replace=False)]
for i in range(max_iters):
# 计算每个数据点到质心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个数据点分配到最近的质心所在的簇中
labels = distances.argmin(axis=0)
# 重新计算每个簇的质心
new_centroids = np.array([X[labels == k].mean(axis=0) for k in range(K)])
# 如果质心不再发生变化,则退出循环
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return centroids, labels
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 调用K均值聚类算法
centroids, labels = kmeans(X, K=3)
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
在这个示例中,我们首先定义了一个kmeans函数,它接受一个数据集X、簇的数量K和最大迭代次数max_iters,并返回质心和每个数据点所属的簇。然后,我们生成了一个随机数据集X,并调用kmeans函数进行聚类。最后,我们使用matplotlib库绘制了聚类结果。
使用sklearn库实现K均值聚类算法
除了手动实现K均值聚类算法之外,我们还可以使用sklearn库中的KMeans类来实现K均值聚类算法。下面是一个使用sklearn库实现K均值聚类算法的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 调用KMeans类进行聚类
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
在这个示例中,我们首先生成了一个随机数据集X,然后使用sklearn库中的KMeans类进行聚类。最后,我们使用matplotlib库绘制了聚类结果。
总结
K均值聚类算法是一种常用的无监督学习算法,它可以将数据集分成K个簇,每个簇包含相似的数据点。在本文中,我们介绍了如何使用Python手动实现K均值聚类算法,并使用sklearn库中的KMeans类实现K均值聚类算法。