简介:K-means聚类是一种常见的无监督学习方法,用于将数据划分为K个不同的组。在本教程中,我们将通过Python实现K-means算法,并使用真实数据集进行演示。
K-means聚类是一种常见的无监督学习方法,用于将数据划分为K个不同的组。以下是使用Python实现K-means算法的步骤:
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=100):
# 1. 随机选择K个中心点
indices = np.random.choice(len(X), K)
centroids = X[indices]
for _ in range(max_iters):
# 2. 计算每个点到中心点的距离,并将数据点分配给最近的中心点
labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centroids, axis=2), axis=1)
# 3. 重新计算中心点位置
new_centroids = np.array([X[labels==k].mean(axis=0) for k in range(K)])
# 4. 检查中心点是否发生变化,如果没有则停止迭代
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return labels, centroids
# 加载鸢尾花数据集(Iris dataset)作为示例数据集
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
labels, centroids = kmeans(X, K=3) # 使用3个中心点对数据进行聚类
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis') # 使用不同颜色表示不同聚类
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x') # 用红色叉号表示中心点位置
plt.title('K-means Clustering')
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
在这个例子中,我们使用了鸢尾花数据集作为示例数据集,并使用3个中心点对数据进行聚类。通过运行K-means函数,我们可以得到每个数据点的聚类标签和每个聚类的中心点位置。最后,我们使用matplotlib库绘制了聚类结果。不同的颜色表示不同的聚类,红色叉号表示每个聚类的中心点位置。通过观察图形,我们可以看到数据被成功地分为了三个不同的组。