机器学习之KMeans算法

目录

一、KMeans的核心思想

二、KMeans算法流程

三、KMeans的关键点

1.优点:

2.缺点:

四、如何确定最佳k值

1.肘部法则

2.轮廓系数

五、Kmeans的典型应用场景

六、代码示例


KMeans 是一种广泛使用的无监督学习算法 ,主要用于聚类分析 ​(Clustering)。它的目标是将数据集划分为 K 个互不重叠的子集(簇,Cluster),使得同一簇内的数据点尽可能相似,不同簇之间的数据点尽可能差异显著。

一、KMeans的核心思想

1.迭代:通过不断迭代更新簇中心和样本分配,最小化簇内数据的平方差距离(SSE)

2.质心定义:每个簇的质心是该簇内所有数据点的均值坐标

3.距离度量:通常使用欧氏距离或者曼哈顿距离

二、KMeans算法流程

1.初始化:随机选择k个数据点作为初始质心,或者使用K-Means++等启发方式(减少对初始值的敏感性)

2.分配数据点:将数据点分配到距离最近的质心所在的簇内

3.更新质心:计算各个簇内各个数据点到其他数据点的距离,取平均值点作为新质心

4.收敛阶段:当质心不在变化,或平方误差(SSE)达到最小时停止迭代

三、KMeans的关键点

1.优点:

1.计算效率高,适合大规模数据集

2.实现简答,可扩展性强

3.广泛应用于商业分析、图像分割等阶段

2.缺点:

1.需要预先指定k值:需要通过业务理解或算法(如肘部法则、轮廓系数)等确定

2.对初始质心敏感,可能造成局部最优解

3.不适合非球形数据簇,若数据分布不规则,效果可能较差

四、如何确定最佳k值

1.肘部法则

计算不同k值对应的SSE,选择下降速度显著变缓的拐点

2.轮廓系数

衡量数据点与自身簇的紧密度a及与其他簇的分离度b,轮廓系数越接近1,聚类效果越好

五、Kmeans的典型应用场景

​1.客户细分​

根据消费行为、 demographics 对客户分组(如电商用户分群)。

2.​文档聚类​

对新闻文章、社交媒体内容进行主题分类(如新闻推荐系统)。

3.​图像分割​

将医学影像(如 X 光片)中的像素点分组以识别异常区域。

4.​异常检测​

发现与簇内其他数据差异显著的数据点(如信用卡欺诈检测)。

六、代码示例

python 复制代码
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 示例数据:二维平面上的点
X = [[1, 2], [1, 4], [1, 0],
     [4, 2], [4, 4], [4, 0]]

# 创建 KMeans 模型,设定 K=2
kmeans = KMeans(n_clusters=2, random_state=0)
kmeans.fit(X)

# 预测簇标签
labels = kmeans.predict(X)

# 绘制结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='X')
plt.title("KMeans Clustering")
plt.show()
相关推荐
石榴花专场2 分钟前
分类算法中one-vs-rest策略和one-vs-one 策略的区别是什么?
人工智能·python·机器学习·数据挖掘
慕容青峰44 分钟前
【蓝桥杯 2025 省 A 扫地机器人】题解
c++·算法·蓝桥杯·sublime text
_yingty_1 小时前
GO语言入门:常用数学函数2
java·学习·算法·golang
猎猎长风1 小时前
【数据结构和算法】3. 排序算法
数据结构·算法·排序算法
人猿泰飞1 小时前
【AI训练环境搭建】在IDE(Pycharm或VSCode)上使用WSL2+Ubuntu22.04+Conda+Tensorflow+GPU进行机器学习训练
vscode·机器学习·pycharm·wsl·gpu训练
人工智能那些事儿1 小时前
PyTorch入门:从零开始搭建你的第一个神经网络
人工智能·pytorch·深度学习·神经网络·机器学习·计算机视觉·自然语言处理
bookish_2010_prj1 小时前
链式栈和线性栈
数据结构·c++·算法
egoist20232 小时前
【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
数据结构·c++·算法·容器·哈希算法·散列表·c++11
Wang201220132 小时前
随机深林算法是分类还是回归?
算法·分类·回归
@蓝莓果粒茶2 小时前
LeetCode第158题_用Read4读取N个字符 II
前端·c++·python·算法·leetcode·职场和发展·c#