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

目录:

  1. K均值聚类原理
  2. K均值聚类算法步骤
  3. 如何选择K值
  4. Python实现K均值聚类
  5. K均值聚类应用实例
  6. 总结

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-learnmatplotlibpandas

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均值聚类有所帮助!

点击进入:AI基础

点击进入:机器学习基础算法 (一)-线性回归
点击进入:机器学习基础算法 (二)-逻辑回归
点击进入:机器学习基础算法 (三)-支持向量机(SVM)
点击进入:机器学习基础算法 (四)-决策树(Decision Tree)
点击进入:机器学习基础算法 (五)-随机森林:集成学习的强大力量
点击进入:机器学习基础算法 (六)-k 最近邻算法(k-Nearest Neighbors, k-NN)
点击进入:机器学习基础算法 (七)-朴素贝叶斯(Naive Bayes)
点击进入:机器学习基础算法 (八)-K均值聚类(K-Means Clustering)
点击进入:机器学习基础算法 (九) - AdaBoost
点击进入:机器学习基础算法 (九-二) - 梯度提升机(Gradient Boosting Machines, GBM)
点击进入:机器学习基础算法 (十) - XGBoost
点击进入:机器学习基础算法 (十一) - LightGBM-微软
点击进入:机器学习基础算法 (十二) - 层次聚类(Hierarchical Clustering)
点击进入:机器学习基础算法 (十三) - 主成分分析(PCA, Principal Component Analysis)
点击进入:机器学习基础算法 (十四) - 独立成分分析(ICA, Independent Component Analysis)
点击进入:机器学习基础算法 (十五) - t-SNE(t-Distributed Stochastic Neighbor Embedding)

本文为原创内容,未经许可不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海棠AI实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值