[Python数据分析]最通俗入门Kmeans聚类分析,可视化展示代码。

 什么是k-means分析?【头条@William数据分析,看原版】

       想象一下,你有一堆五颜六色的糖果,你想把它们按照颜色分成几堆。k-means分析就是这么一个自动分类的过程。它会根据糖果的颜色特征,把它们分成若干个组,每个组里的糖果颜色都比较相似。dfd906e26d8d46209a81116798959bbe.jpeg

更专业一点说,k-means分析是一种常用的聚类算法,它会将数据集中的数据点分成k个不同的簇。每个簇都有一个中心点,这个中心点就是簇中所有数据点的平均值。算法的目标是使得每个数据点都属于离它最近的中心点对应的簇,从而使得簇内的点尽可能相似,簇间的点尽可能不同。

k-means分析的应用场景

k-means分析在很多领域都有广泛的应用,比如:

  • 市场细分: 将客户按照消费习惯、兴趣爱好等特征分成不同的群体,以便针对性地进行营销。
  • 图像分割: 将图像分成不同的区域,以便进行目标识别或图像压缩。
  • 文本聚类: 将文本文档分成不同的主题,以便进行信息检索或文本分类。
  • 异常检测: 通过发现与其他数据点距离较远的点来识别异常数据。b20b52bb7661462d8f7c0d75e1d8cbb4.jpeg

2e8dda1285c3487183f99c5d183b230d.jpegk-means分析的步骤

k-means算法的步骤如下:

  1. 选择k值: 首先确定要将数据分成多少个簇。这个值的选择会影响最终的聚类结果。
  2. 随机初始化中心点: 在数据集中随机选择k个点作为初始的簇中心。
  3. 分配数据点: 计算每个数据点到各个簇中心的距离,将每个数据点分配到距离它最近的簇中。
  4. 更新中心点: 计算每个簇中所有数据点的平均值,将平均值作为新的簇中心。
  5. 重复步骤3和4: 重复步骤3和4,直到簇中心不再发生明显变化或达到最大迭代次数。

87aa3161d4084b4ebb4b46828f4e9332.jpeg代码实现:

# k-means聚类分析可视化展示
# author :头条@William数据分析
# date : 2024/9/29
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 生成示例数据
np.random.seed(0)
X = np.random.rand(200, 2)*10

# 进行K-means聚类
k = 5
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
centers = kmeans.cluster_centers_

# 绘制聚类结果
plt.figure(figsize=(12, 6))

# 使用viridis颜色映射
colors = plt.cm.viridis(np.linspace(0, 1, k))

# 绘制原始数据点
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], c='gray', s=50)
plt.title('Original Data Points')

# 绘制聚类结果和连线
plt.subplot(1, 2, 2)
for i in range(k):
    # 绘制簇的数据点
    plt.scatter(X[y_kmeans == i, 0], X[y_kmeans == i, 1], c=colors[i], s=50, label=f'Cluster {i}')
    # 绘制簇中心
    plt.scatter(centers[i, 0], centers[i, 1], c=colors[i], s=200, alpha=0.75, marker='X', label=f'Center {i}')
    # 绘制数据点与簇中心的连线
    for point in X[y_kmeans == i]:
        plt.plot([point[0], centers[i, 0]], [point[1], centers[i, 1]], color=colors[i], linestyle='-', linewidth=0.5)

plt.title(f'K-means Clustering(k={k})')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.savefig(f'聚类对比(k={k}).jpg')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值