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

【手撕算法系列】k-means

k-means

  • k-means算法介绍

k-means算法介绍

K-means算法是一种用于聚类的迭代算法,它将数据集划分为K个簇,其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差(簇内数据点与簇中心的距离的平方和)。

以下是K-means算法的基本步骤:

  • 初始化中心点: 随机选择K个数据点作为初始的簇中心点。

  • 分配数据点: 对于每个数据点,计算它与各个簇中心的距离,并将其分配给距离最近的簇。

  • 更新簇中心: 对每个簇,计算其所有数据点的平均值,将该平均值作为新的簇中心。

重复步骤2和步骤3: 重复执行步骤2和步骤3,直到簇中心不再发生显著变化或达到预定的迭代次数。

收敛: 算法收敛于一组簇中心,每个数据点属于与其最近的中心。

import numpy as np
import matplotlib.pyplot as pltdef kmeans(X, k, max_iters=100, tol=1e-4):# 初始化簇中心centroids = X[np.random.choice(len(X), k, replace=False)]for _ in range(max_iters):# 计算每个点到簇中心的距离distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)# 分配每个点到最近的簇labels = np.argmin(distances, axis=1)# 计算新的簇中心new_centroids = np.array([X[labels == z].mean(axis=0) for z in range(k)])# 判断是否收敛if np.linalg.norm(new_centroids - centroids) < tol:breakcentroids = new_centroidsreturn centroids, labels# 生成一些随机样本数据
np.random.seed(42)
X, _ = make_blobs(n_samples=300, centers=4, random_state=42, cluster_std=1.0)# 使用自己实现的K-means算法进行聚类
centroids, labels = kmeans(X, k=4)# 绘制原始数据和簇中心
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', edgecolors='k', s=50, alpha=0.7)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, linewidths=3, color='r', label='Centroids')
plt.title('K-means Clustering (Implemented)')
plt.legend()
plt.show()

相关文章:

【手撕算法系列】k-means

k-means k-means算法介绍 k-means算法介绍 K-means算法是一种用于聚类的迭代算法&#xff0c;它将数据集划分为K个簇&#xff0c;其中每个数据点属于与其最近的簇的中心。这个算法的目标是最小化簇内的平方和误差&#xff08;簇内数据点与簇中心的距离的平方和&#xff09;。 …...

D33|动态规划!启程!

1.动态规划五部曲&#xff1a; 1&#xff09;确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2&#xff09;确定递推公式 3&#xff09;dp数组如何初始化 4&#xff09;确定遍历顺序 5&#xff09;举例推导dp数组 2.动态规划应该如何debug 找问题的最好方式就是把…...

C语言----文件操作(二)

在上一篇文章中我们简单介绍了在C语言中文件是什么以及文件的打开和关闭操作&#xff0c;在实际工作中&#xff0c;我们不仅仅是要打开和关闭文件&#xff0c;二是需要对文件进行增删改写。本文将详细介绍如果对文件进行安全读写。 一&#xff0c;以字符形式读写文件&#xff…...

oracle 10046事件跟踪

10046事件是一个很好的排查sql语句执行缓慢的内部事件&#xff0c;具体设置方式如下&#xff1a; 根据10046事件跟踪SQL语句 1、 alter session set events 10046 trace name context forever,level 12; 2、执行SQL语句 3、关闭10046事件 alter session set events 10046 trace…...

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案

微软自带浏览器Edge&#xff0c;无法关闭“保存历史记录网站的屏幕截图”解决方案 吐槽1&#xff1a;Windows自带的Chrome内核版本的浏览器Microsofg Edge刚发布时可谓一股清流&#xff0c;启动速度快&#xff0c;占用内存较小&#xff0c;相信很多人也开始抛弃正代Chrome&…...

讲座 | 颠覆传统摄像方式乃至计算机视觉的“脉冲视觉”

传统相机拍摄视频时其实是以一定帧率进行采样&#xff0c;视频其实还是一串图片的集合&#xff0c;因此低帧率时会觉得视频卡&#xff0c;拍摄高速运动物体时会有运动模糊等等问题。然而你能想象这一切都可以被“脉冲视觉”这一前沿技术改变吗&#xff1f; 今天下午听了北京大学…...

uniGUI学习之UniHTMLMemo1富文本编辑器

1]系统自带的富文本编辑器 2]jQueryBootstarp富文本编辑器插件summernote.js 1]系统自带的富文本编辑器 1、末尾增加<p> 2、增加字体 3、解决滚屏问题 4、输入长度限制问题 5、显示 并 编辑 HTML源代码(主要是图片处理) 1、末尾增加<p> UniHTMLMemo1.Lines…...

详细教程 - 从零开发 鸿蒙harmonyOS应用 第四节 (鸿蒙Stage模型 登录页面 ArkTS版 推荐使用)

在鸿蒙OS中&#xff0c;Ability是应用程序提供的抽象功能&#xff0c;可以理解为一种功能。在应用程序中&#xff0c;一个页面即一种能力&#xff0c;如登录页面&#xff0c;即具有登录功能的能力。以下是对鸿蒙新建项目的登录代码功能的详细解读和工作流程的描述&#xff1a; …...

uniapp怎么实现授权登录

在Uniapp中实现授权登录通常涉及以下几个步骤&#xff1a; 创建登录按钮&#xff1a;在页面中创建一个按钮&#xff0c;用于触发登录操作。 获取用户授权&#xff1a;当用户点击登录按钮时&#xff0c;调用uni.login或uni.getUserInfo等API获取用户授权。 处理授权回调&#…...

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师&#xff1a;基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中&#xff0c;前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…...

椋鸟C语言笔记#26:数据在内存中的存储(大小端字节序)、浮点数的存储(IEEE754)

萌新的学习笔记&#xff0c;写错了恳请斧正。 目录 大小端字节序 什么是大小端 写一个判断大小端的程序 浮点数在内存中的存储&#xff08;IEEE 754规则&#xff09; 引入 存储规则解释 读取规则解释 1.阶码不全为0或全为1&#xff08;规格化数&#xff09; 2.阶码全为…...

设计模式——组合模式(结构型)

引言 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能像使用独立对象一样使用它们。 问题 如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 例如&#xff0c; 你有两类对象&#xff1a; ​…...

鸿蒙小车之多任务调度实验

说到鸿蒙我们都会想到华为mate60&#xff1a;遥遥领先&#xff01;我们一直领先&#xff01; 我们这个小车也是采用的是鸿蒙操作系统&#xff0c;学习鸿蒙小车&#xff0c;让你遥遥领先于你的同学。 文章目录 前言一、什么是任务&#xff1f;为什么要有任务二、任务的状态三、任…...

【报错栏】(vue)Module not found: Error: Can‘t resolve ‘element-ui‘ in xxx

Module not found: Error: Cant resolve element-ui in xxx 报错原因是&#xff1a; 未安装 element-ui 依赖 解决&#xff1a; npm install element-ui 运行...

seaborn库图形进行数据分析(基于tips数据集)

Seaborn 是一个基于 matplotlib 的数据可视化库&#xff0c;可以用来绘制各种统计图表&#xff0c;包括散点图、条形图、折线图、箱线图等。Seaborn 提供了一些用于美化图表的默认样式和颜色主题&#xff0c;使得生成的图表更具有吸引力。下面是一些 Seaborn 库的常用功能和用法…...

AC843. n皇后问题--60

我们只需要把蓝色的往上移动就行了 if(!col[i][j]&&!dg[ui]&&!udg[])//1y&#xff08;i&#xff09;向下&#xff0c;x&#xff08;u&#xff09;向右为正。yxb的by-x一定>0,y-xb的bxy可能>0,这个不考虑&#xff0c;只看-bxy....

Js WebSocket类,收发Json,带心跳,断线重连

如题 心跳&#xff1a;4秒发一次 断线&#xff1a;2秒后自动重连 收发&#xff1a;发送和返回json&#xff0c;处理粘包断包等情况&#xff0c;json字符串最大长度9999 缓存&#xff1a;未连接时&#xff0c;自动缓存100个包&#xff0c;当连接时会自动发出 JS代码 var MyWeb…...

VBA技术资料MF96:单字段多条件高级筛选

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…...

电子取证中Chrome各版本解密Cookies、LoginData账号密码、历史记录

文章目录 1.前置知识点2.对于80.X以前版本的解密拿masterkey的几种方法方法一 直接在目标机器运行Mimikatz提取方法二 转储lsass.exe 进程从内存提取masterkey方法三 导出SAM注册表 提取user hash 解密masterkey文件&#xff08;有点麻烦不太推荐&#xff09;方法四 已知用户密…...

Axure元件基本介绍进阶

Axure元件基本介绍进阶 1.Axure元件基本介绍1.在 Axure 中&#xff0c;元件是构建原型的基本构成单元&#xff0c;能够帮助设计师快速创建、重复使用和管理设计元素。以下是 Axure 中元件的基本介绍&#xff1a;1.基本元件&#xff1a; 2.基本元件的使用一.【举例说明】积木&am…...

如何在Windows上使用iperf3进行专业级网络性能测试:完整指南

如何在Windows上使用iperf3进行专业级网络性能测试&#xff1a;完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3作为专业的网络性能基…...

从草图到精确模型:CAD_Sketcher如何重新定义Blender参数化设计工作流

从草图到精确模型&#xff1a;CAD_Sketcher如何重新定义Blender参数化设计工作流 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 想象一下这样的场景&#xff1a;你正在Blen…...

全民可玩的超元力迷你沙盘赛车,解锁轻量化竞速游乐新风口

如今的休闲娱乐市场&#xff0c;大众早已不满足于单调的电玩游戏、普通亲子游乐&#xff0c;更偏爱有参与感、有操控感、有竞技氛围的实体互动项目。超元力迷你沙盘赛车凭借真实驾驶体验、轻量化落地条件、多人互动竞技属性&#xff0c;迅速出圈成为文旅游乐、商业综合体、亲子…...

[测试技术] AI自动化测试落地实战(二):从测试用例到Playwright脚本

原创内容&#xff0c;未获授权禁止转载、转发、抄袭。上一篇讲了 AI 如何辅助需求拆解和用例设计。 这一篇继续往下走&#xff1a;怎么把测试用例变成真正能跑、能维护、能接入 CI 的自动化脚本。 很多同学用 AI 生成脚本时&#xff0c;最常见的问题是&#xff1a; 脚本看起来能…...

ARM PMU性能监控单元与PMCEID2寄存器详解

1. ARM PMU性能监控单元基础解析性能监控单元(Performance Monitoring Unit, PMU)是现代处理器架构中用于硬件级性能分析的核心组件。在ARM架构中&#xff0c;PMUv3作为第三代性能监控架构&#xff0c;提供了全面的性能事件监控能力。其工作原理是通过配置专用寄存器来选择监控…...

从医院PACS到你的电脑:手把手教你用免费工具查看和转换DCM文件(Windows/Mac)

从医院PACS到个人电脑&#xff1a;零基础掌握DICOM影像查看与转换全流程 第一次从医院PACS系统导出DICOM文件时&#xff0c;那种"双击打不开、专业软件不会用"的挫败感我至今记忆犹新。作为医学影像的黄金标准格式&#xff0c;DCM文件包含着远比普通图片丰富的诊断信…...

Prompt工程进阶2026:让LLM输出稳定可靠的工程化实践

Prompt工程从"写个好提示词"进化成了一门严肃的工程学科。2026年的Prompt工程师不只是会写Prompt&#xff0c;而是要能系统性地设计、测试、版本管理、监控Prompt&#xff0c;确保LLM在生产环境中稳定输出符合预期的结果。 本文聚焦Prompt工程的工程化实践&#xff0…...

VisualCppRedist AIO:Windows运行库终极修复指南,3分钟解决软件启动失败问题

VisualCppRedist AIO&#xff1a;Windows运行库终极修复指南&#xff0c;3分钟解决软件启动失败问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇…...

基于NPU与多传感器融合的高速施工安全机器人设计与实现

1. 项目概述&#xff1a;为什么我们需要一个“会移动的安全员”&#xff1f;在高速公路上搞养护施工&#xff0c;这活儿有多危险&#xff0c;干过的人心里都清楚。我干了十几年工程&#xff0c;亲眼见过也听说过不少因为后方车辆闯入施工区引发的惨剧。传统的安全措施&#xff…...

如何在5分钟内用Blender创建专业级分子可视化效果

如何在5分钟内用Blender创建专业级分子可视化效果 【免费下载链接】blender-chemicals Draws chemicals in Blender using common input formats (smiles, molfiles, cif files, etc.) 项目地址: https://gitcode.com/gh_mirrors/bl/blender-chemicals 还在为制作分子结…...