问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习基础算法 (八)-K均值聚类(K-Means Clustering)

创作时间:
作者:
@小白创作中心

机器学习基础算法 (八)-K均值聚类(K-Means Clustering)

引用
CSDN
1.
https://blog.csdn.net/liu1983robin/article/details/144919607

K均值聚类(K-Means Clustering)是一种非常流行的无监督学习算法,用于将数据集分为多个簇或群组。它被广泛应用于市场细分、图像压缩、异常检测等领域。本文将深入探讨K均值聚类的原理、算法流程、Python实现以及如何在实际数据集上应用该算法。

一、K均值聚类原理

K均值聚类的目标是将给定数据集分成K个簇,使得每个簇内部的数据点尽可能相似,而簇与簇之间的数据点差异尽可能大。K均值聚类是基于欧氏距离来进行聚类的,它通过以下几个步骤来实现:

1. 选择K值

  • K值:K值代表最终簇的数量,这需要预先指定。K值的选择直接影响聚类效果,通常可以通过算法中的“肘部法则”(Elbow Method)来确定最佳的K值。

2. 初始化簇中心

  • 随机选择K个点作为簇中心(即质心)。

3. 分配每个数据点

  • 对于数据集中的每个数据点,根据与K个簇中心的距离,选择最近的簇中心作为该点的所属簇。

4. 更新簇中心

  • 计算每个簇中所有数据点的均值,更新簇中心。

5. 重复步骤3和4

  • 重复分配数据点和更新簇中心的过程,直到簇中心不再变化或达到预设的迭代次数。

K均值聚类的核心思想是通过不断迭代优化簇内样本的相似性,最终收敛于最优解。

二、K均值聚类算法步骤

1. 初始化K个簇中心(质心)

随机选择K个数据点作为簇的初始质心。

2. 分配数据点

计算每个数据点到K个簇中心的距离,并将其分配给距离最小的簇。

3. 更新簇中心

重新计算每个簇的质心,即簇内所有数据点的均值。

4. 重复过程

重复步骤2和3,直到簇中心不再变化或达到预设的最大迭代次数。

三、如何选择K值

K值的选择对K均值聚类的结果至关重要。以下是常用的两种选择K值的方法:

1. 肘部法则(Elbow Method)

通过绘制不同K值对应的聚类误差平方和(SSE, Sum of Squared Errors)图像,选择“SSE急剧下降”后的K值作为最佳K。

2. 轮廓系数(Silhouette Score)

轮廓系数度量了每个点与同簇中其他点的相似度以及与最近簇的相似度,值越大表示聚类效果越好。可以通过轮廓系数来评估不同K值的聚类质量。

四、Python实现K均值聚类

1. 导入库

首先,导入所需的库,如
scikit-learn

matplotlib

pandas

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

2. 创建示例数据

使用
make_blobs
函数生成一个二维的模拟数据集,方便展示聚类结果。

# 生成样本数据集
X, y = make_blobs(n_samples=500, centers=4, cluster_std=0.60, random_state=0)

3. K均值聚类模型训练

使用
KMeans
类进行K均值聚类,并训练模型。

# 使用KMeans进行聚类
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)

4. 聚类结果可视化

在二维空间中展示数据点和聚类的质心。

# 获取聚类的标签
y_kmeans = kmeans.predict(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
# 绘制聚类中心
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='X')
plt.title('K-Means Clustering Results')
plt.show()

5. 选择最佳K值(肘部法则)

通过绘制K值与SSE之间的关系图来确定最佳的K值。

# 计算不同K值的SSE
sse = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(X)
    sse.append(kmeans.inertia_)
# 绘制SSE曲线
plt.plot(range(1, 11), sse, marker='o')
plt.title('Elbow Method For Optimal k')
plt.xlabel('Number of Clusters')
plt.ylabel('SSE')
plt.show()

6. 评估聚类效果

通过轮廓系数来评估聚类效果。

from sklearn.metrics import silhouette_score
score = silhouette_score(X, y_kmeans)
print(f'Silhouette Score: {score}')

五、K均值聚类应用实例

1. 市场细分

假设你正在进行市场细分,目标是将客户分为不同的群体。通过K均值聚类,你可以根据客户的购买行为、消费能力等特征,将客户分为几个有意义的群体,以便定制个性化营销策略。

2. 图像压缩

在图像处理领域,K均值聚类可以应用于图像压缩。通过将图像的颜色信息量化为K种颜色,可以大大减少图像的数据大小,同时保持较好的视觉效果。

3. 异常检测

K均值聚类还可以用于异常检测。在一些情况下,异常数据点可能无法很好地匹配任何簇,从而可以被认为是异常点。

六、总结

K均值聚类是一种简单而高效的无监督学习算法,广泛应用于数据分析、模式识别等领域。尽管该算法具有较高的效率,但它也有一定的局限性,比如对初始簇中心的敏感性和对噪声点的敏感性。通过选择合适的K值、使用肘部法则或轮廓系数等方法,可以提高聚类的质量。

通过本文的讲解,你应该能够理解K均值聚类的原理、实现过程,并能够在Python中应用该算法解决实际问题。希望本文对你学习K均值聚类有所帮助!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号