K-Means聚类分析是一种常用的无监督学习算法,广泛应用于大数据分析中。它旨在通过将数据集划分为K个不同的簇(Cluster),使得同一簇内的数据点相似度较高,而不同簇之间的数据点相似度较低。下面,我们将通过一个简单的示例来演示如何使用Python进行K-Means聚类分析。

一、K-Means算法原理

K-Means算法的基本步骤如下:

  1. 选择K个初始聚类中心,并随机初始化。
  2. 将每个数据点分配到最近的聚类中心。
  3. 重新计算每个簇的聚类中心。
  4. 重复步骤2和步骤3,直到聚类中心不再变化或达到一定的迭代次数。

二、代码实现

下面是使用Python中的scikit-learn库来实现K-Means聚类的示例代码。在这个例子中,我们将随机生成一些数据点并进行聚类分析。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 2)  # 生成100个二维数据点

# 可视化随机数据
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.title("随机生成的二维数据点")
plt.xlabel("特征1")
plt.ylabel("特征2")
plt.show()

# 执行K-Means聚类
k = 3  # 设定聚类簇的数量
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)

# 获取聚类中心和标签
centroids = kmeans.cluster_centers_
labels = kmeans.labels_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', s=200, alpha=0.75, marker='X')  # 聚类中心
plt.title("K-Means聚类结果")
plt.xlabel("特征1")
plt.ylabel("特征2")
plt.show()

三、代码解析

  1. 数据生成:我们使用np.random.rand生成100个随机的二维数据点。这里的数据维度可以根据实际需求调整。

  2. 模型训练:通过KMeans类初始化模型,设定簇的数量为3,并使用fit方法对数据进行拟合。

  3. 结果可视化:最后,我们将聚类结果进行可视化,使用不同的颜色表示不同的簇,并用红色的“X”标记聚类中心。

四、聚类结果的评估

K-Means聚类后,如何评估聚类效果是一个重要的问题。常用的评估指标包括轮廓系数(Silhouette Coefficient)和肘部法则(Elbow Method)。

  • 轮廓系数:通过计算样本点与同簇样本的平均距离与样本点与最近簇的平均距离的比值来评估聚类效果。
from sklearn.metrics import silhouette_score

silhouette_avg = silhouette_score(X, labels)
print(f"轮廓系数: {silhouette_avg}")
  • 肘部法则:通过改变K值,计算每个K值对应的误差平方和(SSE),并绘制K与SSE的关系图,以找到“肘部”位置,决定最佳K值。
sse = []
K_range = range(1, 11)
for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=0)
    kmeans.fit(X)
    sse.append(kmeans.inertia_)

plt.plot(K_range, sse, marker='o')
plt.title("肘部法则")
plt.xlabel("簇的数量K")
plt.ylabel("平方和误差 (SSE)")
plt.show()

五、总结

K-Means是一种简单且易于实现的聚类算法,适合用于大数据分析中的初步探索。通过上述示例,我们可以看到如何在Python中应用K-Means进行数据聚类。在实际应用中,我们需要考虑数据的实际特点,选择合适的K值及处理方式,以达到更好的聚类效果。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部