K-means聚类算法是一种常用的无监督学习算法,它通过将数据集划分为k个簇,使得每个簇内的数据点尽可能接近,而不同簇之间的数据点尽可能远离。这种算法在数据挖掘、机器学习等领域有着广泛的应用。本文将带领大家从零开始,轻松掌握K-means聚类算法的编程实现和数据可视化。
K-means聚类算法原理
1. 初始化
首先,我们需要从数据集中随机选择k个数据点作为初始的聚类中心。
2. 分配数据点
然后,计算每个数据点到各个聚类中心的距离,将每个数据点分配到距离最近的聚类中心所在的簇。
3. 更新聚类中心
接着,计算每个簇中所有数据点的均值,得到新的聚类中心。
4. 迭代
重复步骤2和步骤3,直到聚类中心不再发生变化,或者满足一定的迭代次数。
K-means聚类算法编程实现
下面,我们将使用Python编程语言实现K-means聚类算法。
import numpy as np
def k_means(data, k):
# 初始化聚类中心
centroids = data[np.random.choice(data.shape[0], k, replace=False)]
# 迭代
for _ in range(100):
# 分配数据点
clusters = [[] for _ in range(k)]
for point in data:
distances = np.linalg.norm(point - centroids, axis=1)
closest_centroid_index = np.argmin(distances)
clusters[closest_centroid_index].append(point)
# 更新聚类中心
centroids = np.array([np.mean(cluster, axis=0) for cluster in clusters])
return centroids, clusters
数据可视化
为了更好地理解K-means聚类算法的结果,我们可以使用数据可视化技术。
1. 降维
首先,我们需要将高维数据降维到二维或三维空间,以便于可视化。
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
data_reduced = pca.fit_transform(data)
2. 绘制聚类结果
接下来,我们可以使用matplotlib库绘制聚类结果。
import matplotlib.pyplot as plt
centroids, clusters = k_means(data_reduced, k=3)
for i, cluster in enumerate(clusters):
plt.scatter(cluster[:, 0], cluster[:, 1], label=f'Cluster {i}')
plt.scatter(centroids[:, 0], centroids[:, 1], s=300, c='red', label='Centroids')
plt.title('K-means Clustering')
plt.legend()
plt.show()
通过以上步骤,我们可以轻松掌握K-means聚类算法的编程实现和数据可视化。希望本文对您有所帮助!
