Python实现K-means聚类算法

作者:php是最好的2024.02.16 08:19浏览量:3

简介:K-means聚类是一种常见的无监督学习方法,用于将数据划分为K个不同的组。在本教程中,我们将通过Python实现K-means算法,并使用真实数据集进行演示。

K-means聚类是一种常见的无监督学习方法,用于将数据划分为K个不同的组。以下是使用Python实现K-means算法的步骤:

  1. 导入所需的库
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  1. 定义K-means函数
  1. def kmeans(X, K, max_iters=100):
  2. # 1. 随机选择K个中心点
  3. indices = np.random.choice(len(X), K)
  4. centroids = X[indices]
  5. for _ in range(max_iters):
  6. # 2. 计算每个点到中心点的距离,并将数据点分配给最近的中心点
  7. labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centroids, axis=2), axis=1)
  8. # 3. 重新计算中心点位置
  9. new_centroids = np.array([X[labels==k].mean(axis=0) for k in range(K)])
  10. # 4. 检查中心点是否发生变化,如果没有则停止迭代
  11. if np.all(centroids == new_centroids):
  12. break
  13. centroids = new_centroids
  14. return labels, centroids
  1. 加载数据集
  1. # 加载鸢尾花数据集(Iris dataset)作为示例数据集
  2. from sklearn import datasets
  3. iris = datasets.load_iris()
  4. X = iris.data
  1. 运行K-means算法并绘制结果
  1. labels, centroids = kmeans(X, K=3) # 使用3个中心点对数据进行聚类
  2. plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis') # 使用不同颜色表示不同聚类
  3. plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x') # 用红色叉号表示中心点位置
  4. plt.title('K-means Clustering')
  5. plt.xlabel('Sepal length')
  6. plt.ylabel('Sepal width')
  7. plt.show()

在这个例子中,我们使用了鸢尾花数据集作为示例数据集,并使用3个中心点对数据进行聚类。通过运行K-means函数,我们可以得到每个数据点的聚类标签和每个聚类的中心点位置。最后,我们使用matplotlib库绘制了聚类结果。不同的颜色表示不同的聚类,红色叉号表示每个聚类的中心点位置。通过观察图形,我们可以看到数据被成功地分为了三个不同的组。