当前位置: 首页 > news >正文

K-means++:让K-means“聪明”地选择初始中心点

大家好!欢迎来到我的技术分享博客~ 👋 在前两篇博客中,我们深入探讨了经典的 K-means 算法 以及它的优化方案 Canopy + K-means。如果你还没有看过,强烈建议先回顾一下,因为今天的主题 K-means++ 和它们有着千丝万缕的联系哦!🔗

  • 📚 K-means算法详解
  • 📚 Canopy + K-means优化方案

今天,我们将一起学习 K-means++,看看它是如何通过更“聪明”地选择初始中心点,来优化K-means算法的!💡 

📌 什么是K-means++?

K-means++ 是对传统K-means算法的改进,主要解决了K-means在初始化中心点时可能陷入局部最优解的问题。传统的K-means随机选择初始中心点,这可能导致算法收敛到次优解。而K-means++通过一种更智能的方式选择初始中心点,使得算法更有可能找到全局最优解。🌍

🔍 K-means++算法原理

K-means++的核心思想是:初始中心点之间的距离应该尽可能远。这样,算法在迭代过程中更有可能覆盖到数据集中的不同区域,从而找到更好的聚类结果。🎯

📝 K-means++算法步骤

  1. 随机选择第一个中心点:从数据集中随机选择一个点作为第一个中心点。🎲

  2. 计算每个点到最近中心点的距离:对于数据集中的每个点,计算它到已选中心点的最小距离。这个距离反映了该点被选为下一个中心点的“潜力”。📏

  3. 根据距离选择下一个中心点:以距离的平方为概率分布,随机选择下一个中心点。距离越远的点被选中的概率越大。🎲(这里用到了轮盘赌选择的思想)

  4. 重复步骤2和3:直到选出K个中心点。🔄

  5. 执行K-means算法:使用选出的K个中心点作为初始中心点,执行标准的K-means算法。🚀

🌟 K-means++的优缺点

优点

  • 提高了聚类质量:通过更智能地选择初始中心点,K-means++更有可能找到全局最优解,提高了聚类的准确性。📈
  • 简单易实现:K-means++的改进并不复杂,只需要在初始化阶段稍作修改即可。🛠️

缺点

  • 增加了初始化时间:由于需要计算每个点到最近中心点的距离,K-means++的初始化时间比传统K-means稍长。⏳
  • 仍然受K值影响:和传统K-means一样,K-means++也需要预先指定K值,而K值的选择对聚类结果有很大影响。🔢

🌈 适用场景

K-means++适用于大多数需要聚类的场景,特别是当数据集较大、维度较高时,K-means++的优势更加明显。例如:

  • 图像分割:将图像中的像素点聚类成不同的区域。🖼️
  • 客户细分:根据客户的购买行为将客户聚类成不同的群体。🛍️
  • 文档聚类:将文档聚类成不同的主题。📚

💻 场景示例代码

下面是一个使用Python和scikit-learn实现K-means++的简单示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs# 生成模拟数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 使用K-means++进行聚类
kmeans = KMeans(init='k-means++', n_clusters=4, random_state=0)
kmeans.fit(X)
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)
plt.title("K-means++ Clustering")
plt.show()

运行这段代码,你将看到一幅聚类结果图,其中不同颜色的点代表不同的聚类,红色的点代表聚类中心。🖼️

📌 总结

​K-means++​​ 以​​数学概率模型​​优化初始质心选择,是K-means最经典的改进方案之一。其与 ​​Canopy+K-means​​ 形成互补:

  • ​Canopy+K-means​​ → 通过​​外部预处理​​降低随机性
  • ​K-means++​​ → 通过​​内部概率机制​​提升初始质量

💡 ​​横向对比​​:

方法初始质心质量收敛速度抗噪能力
K-means随机
Canopy+K-means中高
​K-means++​​高​​快​​弱​

🔮 预告:下一篇笔记介绍二分K-means优化算法

在下一篇博客中,我们将继续探索K-means的优化方案,介绍二分K-means算法。二分K-means通过递归地将数据集一分为二,来找到更好的聚类结果。敬请期待哦!🎉

感谢大家的阅读!如果你对K-means++或任何其他技术话题有疑问或建议,欢迎在评论区留言!💬


希望这篇博客能帮助你更好地理解K-means++算法!如果你觉得有用,别忘了点赞、分享和关注哦!👍🔄👀

拓展阅读

1、一文搞懂K-means聚类:原理、选K技巧、实战代码全解析

2、Canopy + K-means:聚类算法的“黄金搭档”优化方案(附代码)

3、一文搞懂聚类算法:与分类算法的本质区别

相关文章:

  • RustDesk自建远程服务器
  • MO+内核32位普冉单片机PY32F003开发板
  • AndroidR平台ToastPresenter引出BinderProxy泄漏
  • BigDetection:改进目标检测器预训练的大规模基准之论文阅读
  • 边缘计算的认识和应用
  • 键盘 AK35I Pro V2 分析
  • ABP vNext + Azure Application Insights:APM 监控与性能诊断最佳实践
  • React Native WebView键盘难题:如何让输入框不被键盘遮挡?
  • Antv AVA入门教程
  • CNS无线电信号覆盖分析系统v0.1
  • 【OpenGL ES】不用GLSurfaceView,如何渲染图像
  • 高性能群集部署技术-LVS+Keepalived高可用群集
  • vue3+elementPlus实现无缝滚动表格封装
  • springboot 接口参数接收,body和param什么区别,分别怎么使用
  • SpringCloud+Vue汽车、单车充电桩源码实现:从架构设计到核心模块解析
  • Prufer序列 学习笔记
  • SNMPv3 的安全命名空间详解
  • 需要做一款小程序,用来发券,后端如何进行设计能够保证足够安全?
  • MySQL 多表查询、事务
  • 交叉熵损失函数的优势
  • 网站开发保密协议模板/长沙官网优化公司
  • 怎么选择顺德网站建设/小程序自助搭建平台
  • 深圳做外贸网站/站长之家站长工具
  • 郑州做网站公司/百度搜索网址
  • 做淘宝客网站用什么程序最好/免费男女打扑克的软件
  • 手机网站缩放/水平优化