大家好!欢迎来到我的技术分享博客~ 👋 在前两篇博客中,我们深入探讨了经典的 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、一文搞懂聚类算法:与分类算法的本质区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909715.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909715.shtml
英文地址,请注明出处:http://en.pswp.cn/news/909715.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Langchain学习笔记(1)——如何调用Huggingface的模型并实现实时返回生成结果

Langchain支持很方便的OpenAI模型的调用,可以做到快速开发大模型应用。但是要使用Huggingface上的开源模型就没有那么方便了,本文就详细阐述如何用Langchain开发基于Huggingface上的模型,并实时返回生成结果。 实时返回生成结果是LLM很关键的…

Java安全-常规漏洞问题(SQL注入,XXE,SSRF,RCE)

靶场搭建 靶场下载 : https://github.com/whgojp/JavaSecLab这个靶场是使用Springboot搭建的所以不要下载 jar 文件运行,要使用IDEA运行他的文件夹 先打开pom 然后进行maven一下 改一下端口 配置完成之后修改一下 运行的模式 使用phpstudy搞一个sql数…

基于视频的 AI 内存库,极速语义检索

简介 在大模型应用里,将文本数据分块嵌入存储在向量数据库已经是标准做法。然而,传统向量数据库虽然功能强大,但其高昂的RAM和存储需求,以及复杂的部署运维,常常让开发者望而却步。今天,介绍一个名为 Memv…

接口适配器模式实现令牌桶算法和漏桶算法

以下是令牌桶算法、漏桶算法和雪花算法的清晰对比解析。它们属于完全不同的技术领域,前两者用于流量控制,后者用于分布式ID生成: 1. 令牌桶算法(Token Bucket) 领域:流量整形 / 速率限制核心目标&#xff…

618背后的电商逻辑重构:从价格血战到价值共生

“今年终于没做数学题。” 618进行到一半,行云已经买了很多,大件的有iPad、iWatch,小件的有运动鞋、面膜、纸巾。往年她要凑凑减减,经常要找个店铺凑单,下完单再马上退掉,今年她没废太多脑细胞&#xff0c…

解决 PyTorch 与 Python 3.12 的兼容性问题:`operator torchvision::nms does not exist` 深度解析

解决 PyTorch 与 Python 3.12 的兼容性问题 问题现象错误根源分析终极解决方案🚀 推荐方案:创建 Python 3.11 虚拟环境⚡ 备选方案:使用 PyTorch 夜间构建版(Python 3.12)验证修复技术深度解析最佳实践建议问题现象 当在 Python 3.12 环境中运行以下代码时: from tran…

Git 实战场景

四、标签管理 4.1、标签的理解 在使用 Git 进行版本管理时,**标签(Tag)**扮演着非常重要的角色。它其实就是对某次提交(commit)的一个简洁标识,相当于给这次提交起了一个可读、易记的“别名”。比如&…

在同态加密系统中,参与角色以及各角色的功能作用流程图,私钥和公钥分发流程,可能遇到的攻击

一、角色划分与职责 角色身份核心任务密钥权限客户端数据所有者 (如医院、用户)1. 加密原始数据 2. 上传密文至服务器 3. 接收并解密结果(可选)持有公钥服务器计算服务提供方 (如云平台)1. 接收客户端密文…

langchain从入门到精通(六)——LCEL 表达式与 Runnable 可运行协议

1. 多组件 invoke 嵌套的缺点 prompt ChatPromptTemplate.from_template("{query}") llm ChatOpenAI(model"gpt-3.5-turbo-16k") parser StrOutputParser() # 获取输出内容 content parser.invoke( llm.invoke( prompt.invoke( {"query": r…

ArcGIS中批量获取输入面图层A中各要素的四至点的实现方法

一、背景及意义 在日常工作中,我们经常会需要获取面图层的四至点,我们能否在ArcGIS中直接获取面图层的四至点呢?答案是肯定的,请继续往下看。 二、大体思路 使用字段计算器计算输入面图层A中各面要素的XY的最大值和最小值&…

大IPD之——华为的战略本质与实践(二)

华为战略执行的能力如此强,有两个核心原因:一是管理体系起了非常重大的作用;二是企业文化导致华为的执行力特别强。华为在战略方面,为什么每次都能转型成功?背后是有很多实质性的内容支撑的。而华为如何做战略&#xf…

『大模型笔记』第3篇:多长的 Prompt 会阻塞其他请求?优化策略解析

『大模型笔记』多长的 Prompt 会阻塞其他请求?优化策略解析 文章目录 一、更简单的问题:长 Prompt 阻塞请求队列1. 请求并行预填方案(Request-Parallel Prefills)二、根本的问题(Fundamental Flaw):Token 生成被并行预填拖慢1. 解耦预填(Disaggregated Prefill):以延迟优…

21 - GAM模块

论文《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》 1、作用 这篇论文提出了全局注意力机制(Global Attention Mechanism, GAM),旨在通过保留通道和空间方面的信息来增强跨维度交互&#xf…

Java01--使用IDEA编写运行第一个Java程序HelloWorld

一.先新建一个文件夹存放项目(后续可以推送到Gitee) 二.创建项目 1.打开IDEA,点击首页的新建项目 2.新建空项目并命名,存放路径为步骤一创建的文件夹: 3.在新项目中新建一个src文件夹(用于集中管理文件) 4.在src文件夹…

目标检测相关【清晰易懂】

目标检测相关 (b)是语义分割,(c)是实例分割 目标检测 每个目标一个框标签 实例分割 语义分割 识别每一个目标个体 目标检测基础上进一步提升模型能力有两个方向:实例分割、旋转目标检测。 实例分割 …

强化学习 A2C算法

3.actor-critic方法 3.1 Reinforce 算法,也称为蒙特卡洛策略梯度。蒙特卡洛方差 第一节介绍了DQN 在上一节基于策略的方法中,我们的目标是直接优化策略,而无需使用价值函数。更准确地说,Reinforce 是 基于策略的方法 的一个子类…

关于MCU、MPU、SoC、DSP四大类型芯片

目录 MCU、MPU、SoC、DSP四大类型芯片分析 一、MCU 1、概念 2、特点 3、常见芯片 4、应用场景 二、MPU 1、概念 2、特点 3、常见芯片 4、应用场景 三、SoC 1、概念 2、特点 3、常见芯片 4、应用场景 四、DSP 1、概念 2、特点 3、常见芯片 4、应用场景 MCU、…

【数据结构】图论最短路圣器:Floyd算法如何用双矩阵征服负权图?

最短路径 穿越负权迷雾:Floyd算法如何解锁全图最短路径?​​一、Floyd算法1.1 算法思想1.2 算法逻辑1.3 算法评价1.4 算法限制 二、三种算法对比🌟结语 穿越负权迷雾:Floyd算法如何解锁全图最短路径?​​ 大家好&…

宝塔面板集成阿里云 OSS 备份失败的解决方案

宝塔面板集成阿里云OSS备份失败的解决方案 一、问题背景 在使用宝塔面板配置阿里云OSS云存储备份功能时,用户遇到如下错误: Traceback (most recent call last):File "class/CloudStoraUpload.py", line 144, in __init__from alioss_main import OSSClient as ocFile "…

如何安全高效地维护CMS智能插件?

作为网站开发者或运维人员,你是否经历过这样的场景:满怀期待地点击了插件“更新”按钮,刷新页面后却看到一片刺眼的500错误?或发现网站加载速度从2秒骤降到10秒?智能插件为CMS系统(如WordPress、Drupal、亿…