机器学习算法-聚类K-Means
先来看看K-Means算法的核心流程吧

下面我们通过一个简单聚类来介绍K-Means算法迭代过程
如图(a)所示:表示初始化数据集。
如图(b)所示:假设K=2,随机选择两个点作为类别质心,分别为图中的红色和蓝色质心。
如图©所示:分别求样本点xi到这两个质心的距离,并标记每个样本点的类别为距离质心最近的类别。划分得到两个簇C1和C2,完成一次迭代。
如图(d)所示:对标记为红色的点和蓝色的点分别求新的质心。
如图(e)所示:重复图©(d)过程,标记每个样本点的类别为距离质心最近的类别,重新划分得到两个簇C1和C2。
如图(f)所示:直到质心不再改变后完成迭代,最终得到两个簇C1和C2。

问题来了,这个初始质心如何随机选择
随机法: 随机选择某k个样本点作为初始质心,此方法可能导致收敛速度过慢。
层次聚类法: 先使用层次聚类进行聚类,提取出k个簇,选择这k个簇的质心作为KMeans的初始质心。
k-means++法(咱们一会代码就是这个方法): 随机选择一个样本点作为初始质心,计算任一样本点到初始质心的距离,根据距离来确定下一个质心,让下一个质心离上一个质心足够远,直到选中k个质心。
直接上个K-Means代码
import numpy as np
import random
from matplotlib.pylab import plt # pip install matplotlib
from sklearn.datasets import load_iris # pip install scikit-learn# i.chaoxing.com# X = np.array([[1, 2], [1, 3], [3, 1], [2, 3], [4, 2]])
X = load_iris().data[:,:2] # 每条数据只取前两项特征值class K_Means:def __init__(self, K, times):# 分类个数self.k = K# 优化质心坐标的循环次数self.times = times# 划分后的数据集合self.quality_center = []# 数据集self.train_x = []# 计算两个数据的距离def calc_distance(self, p1, p2):return np.sum((p1 - p2) ** 2)# 计算数据集的质心点坐标def Cmass(self, data):size = len(data)l = np.array([0.0] * len(data[0]))for item in data:l += itemreturn [round(item, 2) for item in l / size]# 初始化质心点坐标集合def initQualityCenter(self, X):# quality_center的每一个元素 {坐标,索引,分类元素}quality_center, size = [], 0# visit: 访问记录 0代表没访问过 1代表访问过visited = [0] * len(X)# 当前quality_center中每个质心的下标total_center_index = []index = int(random.random() * len(X))while size < self.k:quality_center.append({'center': X[index], 'index': index, 'element': []})total_center_index.append(index)visited[index], last_center, max_distance = 1, X[index], -1size += 1for x_i, x_v in enumerate(X):if visited[x_i] != 1:distance = self.calc_distance(x_v, last_center)if distance > max_distance:max_distance = distanceindex = x_ifor i, m in enumerate(X):if i not in total_center_index:min_distance, index = 9999999999.0, -1for q_i, q_m in enumerate(quality_center):d = self.calc_distance(m, q_m['center'])if d < min_distance:min_distance = dindex = q_iquality_center[index]['element'].append(i)return quality_center# 优化质心坐标和分类def resetQualityCenter(self, X, quality_center):for _ in range(self.times):for q_i, item in enumerate(quality_center):mark_index = [X[i] for i in [*item['element'], item['index']]]center = self.Cmass(mark_index)quality_center[q_i]['center'] = centerquality_center[q_i]['element'] = []for i, m in enumerate(X):min_distance, index = 9999999999.0, -1for q_i, q_m in enumerate(quality_center):d = self.calc_distance(m, q_m['center'])if d < min_distance:min_distance = dindex = q_iquality_center[index]['element'].append(i)return quality_center# 训练数据集def fit(self, X):self.train_x = X# 初始化质心坐标和分类quality_center = self.initQualityCenter(X)# 优化质心坐标和分类self.quality_center = self.resetQualityCenter(X, quality_center)# 绘制可视化图def preview(self):icon,color = ['o','+','*','^'],['#1897ff','#2AC864','#ff6600','#000000']plt.figure(figsize=(8, 8))for i,item in enumerate(self.quality_center):l = [self.train_x[mark] for mark in item['element']]x, y = [item[0] for item in l], [item[1] for item in l]plt.scatter(x,y,marker=icon[i],c=color[i],label='type'+str(i+1))plt.legend()plt.show()m = K_Means(K=3, times=8)
m.fit(X)
m.preview()
让我们看一下分类后的可视化图
相关文章:
机器学习算法-聚类K-Means
先来看看K-Means算法的核心流程吧 下面我们通过一个简单聚类来介绍K-Means算法迭代过程 如图(a)所示:表示初始化数据集。 如图(b)所示:假设K2,随机选择两个点作为类别质心,分别为图中的红色和蓝色质心。 如图©所示ÿ…...
初识Linux 进程:进程创建、终止与进程地址空间
目录 0.写在前面 1.进程创建 fork(): exec(): 2.进程地址空间 3.进程终止 正常终止(主动退出) 异常终止(被动终止) 0.写在前面 本文将对Linux环境下的进程:包括进程创建、终止与进程等待…...
2025年PMP 学习二十二 15章 项目绩效域
2025年PMP 学习二十二 15章 项目绩效域 文章目录 2025年PMP 学习二十二 15章 项目绩效域项目绩效域1.项目绩效域2.项目持续效域3.项目管理中的干系人管理 1.干系人持续效域促进干系人参与的步骤: 2 团队持续效域1 团队持续效域及项目团队人员有关系的活动和职能&…...
顶级流媒体服务商 Spotify 2025.04 故障复盘报告,吃他人的堑长自己的智
2025 年 4 月 16 日,Spotify 经历了一次影响全球用户的中断。以下就是发生了什么以及我们将如何解决它。 背景 我们使用 Envoy Proxy 作为我们的网络外围系统。外围是我们的软件接收用户(您!)网络流量的第一部分。然后ÿ…...
服装收银系统哪个好?服装店进销存管理软件全面评测
在服装批发零售行业,选择一款合适的收银系统和进销存管理软件至关重要。好的系统不仅能提高工作效率,还能帮助商家精准掌握库存、优化销售策略。 本文将全面分析服装收银系统的选择标准,并重点介绍秦丝进销存这一专业解决方案。 一、服装收…...
Java程序员从0学AI(二)
一、前言 在上一篇文章中,我们初步认识了 AI 领域的核心基础概念,如大语言模型(LLM)的参数量特征、提示词(Prompt)对交互效果的关键作用、文本处理单元 Token 的独特定义,以及通过向量转换实现…...
进阶知识:无参的函数装饰器之深入理解@wraps()
进阶知识:无参的函数装饰器之深入理解wraps(func) 一、wraps(func)的本质解析 1.1 核心作用 wraps(func)是functools模块提供的装饰器工具,用于保留被装饰函数的元信息。它通过将被装饰函数的名称(__name__)、文档字符串&#…...
《C 语言 sizeof 与 strlen 深度对比:原理、差异与实战陷阱》
目录 一. sizeof 和 strlen 的对比 1.1 sizeof 1.2 strlen 1.3 对比表格 二. 数组和指针笔试题解析 2.1 一维数组 2.2 字符数组 2.2.1 代码练习一 2.2.2 代码练习二 2.2.3 代码练习三 2.2.4 代码练习四 2.2.5 代码练习五 2.2.6 代码练习六 2.3 二维数组 …...
C++ 初阶 | 类和对象易错知识点(上)
目录 0.引言 1.访问限定符 2.域 3.类的实例化和声明 4.this指针 5.构造函数(自动执行) 6.拷贝构造 7.运算符重载 8.日期类的实现 9.总结 0.引言 今天,小邓儿和大家分享一下,C在类和对象中的易错知识点🤭&am…...
USB转TTL
USB转TTL模块是实现计算机USB接口与TTL电平串口设备(如单片机、嵌入式系统)通信的核心组件,其原理涉及协议转换和电平适配两大关键技术 一、核心功能与应用场景 功能:将计算机的USB信号(高速差分信号、USB协议&#…...
汽车生产中的测试台连接 – EtherCAT 转CANopen高效的网关通信
使用 EtherCAT 和 CANopen协议,实现对汽车零部件的高效生产线末端测试 某电动机、电桥和变速箱制造商之一,正在其生产线上使用ETHERCAT转canopen网关WL-ECAT-COP的解决方案。集成到测试线中的下线测试必须映射众多待测设备的测试应用。该制造商已指定 Et…...
汽车充电过程中--各个电压的关系(DeepSeek)
在电动汽车的充电过程中,电池的充电机制涉及多个电压参数的协调控制,以下从原理到实际应用逐步分析: 1. 充电基础原理 电动汽车电池(通常为锂离子电池组)的充电本质是通过外部电源向电池注入电能,使锂离子…...
基于HTML的Word风格编辑器实现:从零打造功能完备的富文本编辑器
引言 在Web开发中,实现一个功能完备的富文本编辑器是一个常见需求。本文将基于HTML5和JavaScript,结合第三方库,打造一个具有Word风格界面的富文本编辑器,支持格式设置、图片插入、表格创建、文件导入导出等核心功能。 完整代码…...
亚远景-汽车软件开发的“升级之路”:ASPICE各等级说明
ASPICE(Automotive SPICE)将汽车软件开发过程的成熟度划分为六个等级,从0级到5级,每个等级代表了组织在软件开发过程中的不同能力水平。以下是各等级的详细说明: 等级0:不完整(Incomplete&#…...
Unity Display 1 No cameras rendering
一个相机不能同时输出到屏幕和RenderTexture。 Output Texture,要么是 None (屏幕),要么是RenderTexture。 如果此时相机已经输出到RenderTexture,场景中又没有别的相机在渲染,屏幕将变黑并显示No cam…...
Python Selenium 使用指南
Selenium 是一个用于自动化 Web 浏览器交互的强大工具,常用于网页测试、数据抓取和自动化任务。以下是 Python 中 Selenium 的详细使用说明。 安装 Selenium 首先需要安装 Selenium 库和浏览器驱动: pip install selenium 然后下载对应浏览器的驱动&…...
Cribl 对数据源进行过滤-01
先说一个项目中实际的例子: Cribl 利用filter expression 来过滤 data, 举个例子: source1: sourcerouter=A, source 2: sourcerouter=B, 这个时候,可以要把他们合并起来: sourcerouter=A || sourcerouter=B 来进行过滤想要的数据。 最后可以使用一个pipeline 来对数据进行…...
python 通过 pymysql 获取 select count(*) xxx 的数量
在使用 pymysql 库来获取 SELECT COUNT(*) 语句的结果时,你可以通过以下步骤实现: 安装 pymysql:如果你还没有安装 pymysql,可以通过 pip 安装它。 pip install pymysql连接到数据库:使用 pymysql.connect() 方法连接…...
定时任务延迟任务
二者的区别: 定时任务:有固定周期的,有明确的触发时间。 延迟任务:没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件,任务可以立即执行࿰…...
【动手学深度学习】1.1~1.2 机器学习及其关键组件
目录 一、引言1.1. 日常生活中的机器学习1.2. 机器学习中的关键组件1)数据2)模型3)目标函数4)优化算法 一、引言 1.1. 日常生活中的机器学习 应用场景: 以智能语音助手(如Siri、Alexa)的唤醒…...
LLaVA-MoD:基于MoE结构和蒸馏训练方法,训练轻量化多模态大模型!!
摘要:我们介绍了LLaVA-MoD,这是一个旨在高效训练小型多模态语言模型(s-MLLM)的创新框架,通过从大规模多模态语言模型(l-MLLM)中提取知识来实现。我们的方法解决了多模态语言模型(MLL…...
YOLOv8 的双 Backbone 架构:解锁目标检测新性能
一、开篇:为何踏上双 Backbone 探索之路 在目标检测的领域中,YOLOv8 凭借其高效与精准脱颖而出,成为众多开发者和研究者的得力工具。然而,传统的单 Backbone 架构,尽管已经在诸多场景中表现出色,但仍存在一…...
SSRF(服务器端请求伪造)基本原理靶场实现
1、漏洞原理 攻击者通过构造恶意请求,诱使服务器向内部系统或第三方服务发起非预期的网络请求。其核心在于 服务器信任了不可信的用户输入,并基于该输入发起网络操作。 2、攻击场景与利用方式 1. 基础利用 攻击类型示例Payload目标读取本地文件file://…...
自动化测试脚本点击运行后,打开Chrome很久??
亲爱的小伙伴们大家好。 小编最近刚换了电脑,这几天做自动化测试发现打开Chrome浏览器需要等待好长时间,起初还以为代码有问题,或者Chromedriver与Chrome不匹配造成的,但排查后发现并不是!! 在driver.py中…...
Oracle中如何解决FREE BUFFER WAITS
基于性能上的考虑,服务器进程在扫描LRU主列的同时,会将脏块移至LRU-W列,如果发现没有足够可用(可替换)的BUFFER CACHE,进程并不会无止尽地扫描整条LRU主列,而是在扫描到某个阀值(该阀…...
OpenHarmony开源鸿蒙兼容性测试常见问题解答分享
OpenHarmony 兼容性测评主要是验证合作伙伴的设备和业务应用满足 OpenHarmony 开源兼容性定义的技术要求,确保运行在 OpenHarmony 上的设备和业务应用能稳定、正常运行,同时使用 OpenHarmony 的设备和业务应用有一致性的接口和业务体验。 一、兼容性测评…...
Android trace presentFence屏幕显示的帧
Android trace presentFence屏幕显示的帧 presentFence :当帧成功显示到屏幕时,present fence就会signal。 FrameMissed/GpuFrameMissed/HwcFrameMissed表示上一次合成的结果,当SurfaceFlinger合成后显示到屏幕上,present fence就…...
【520特辑】情人节脑影像绘图
祝大家520快乐! 永远爱自己! 1.Brain Net基于节点画爱心 clear all; clc;t linspace(0, 2*pi, 30); x 16*sin(t).^3; y 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t); z zeros(size(t));[X,Y] meshgrid(linspace(-10,10,5), linspace(-10,10,5)); X …...
Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
前言: 最近做横向需要使用实验室服务器跑模型,之前用师兄的账号登录服务器跑yolo,3张3090一轮14秒,我本地一张4080laptop要40秒,效率还是快很多,(这么算一张4080桌面版居然算力能比肩3090&#…...
如何理解大模型的幻觉输出及RAG技术的应用与实战案例
导读:大语言模型(LLM)在当今技术领域中扮演着越来越重要的角色,但其“幻觉输出”问题却成为实际应用中的痛点。本文将带你深入剖析这一现象的定义、表现形式及成因,并探讨如何通过RAG(检索增强生成…...
std::vector<>.emplace_back
emplace_back() 详解:C 就地构造的效率革命 emplace_back() 是 C11 引入的容器成员函数,用于在容器尾部就地构造(而非拷贝或移动)元素。这一特性显著提升了复杂对象的插入效率,尤其适用于构造代价较高的类型。 一、核…...
卷积神经网络(CNN)学习率调整完全指南:从理论到PyTorch实践
引言 学习率是训练卷积神经网络(CNN)最重要的超参数之一,合理调整学习率可以显著提高模型性能、加速收敛并避免训练失败。本文将全面解析CNN学习率调整的技术与方法,涵盖基础概念、常用策略、PyTorch实现以及实用技巧。 一、学习率为什么如此重要&…...
KLEC--基于知识学习的演化计算算法
KLEC–基于知识学习的演化计算算法 title: Knowledge Learning for Evolutionary Computation author: Yi Jiang, Zhi-Hui Zhan, Kay Chen Tan, Jun Zhang. journal: IEEE TRANSACTIONS ON EVOLUTIONARY COMPUTATION (TEVC) DOIÿ…...
Git查看指定作者提交命令
要查看 Git 仓库中某个作者的提交记录,可以使用 git log 命令结合 --author 选项。以下是具体用法和示例: 基础命令 git log --author"作者名"作用:列出指定作者的所有提交记录。示例:查找作者名为 John Doe 的提交&am…...
隐形安全感
凌晨两点,手机突然震动。合作三年的化工原料供应商发来紧急消息:“一批次环氧树脂需要连夜从南京调往广州,但合作多年的物流公司临时爽约,能帮忙想想办法吗?” 我盯着屏幕愣了几秒。这类危险品运输从来不是简单的“拉…...
代码随想录算法训练营 Day52 图论Ⅲ 岛屿问题Ⅱ 面积 孤岛 水流 造岛
图论 题目 101. 孤岛的总面积 计算孤岛总面积,一个想法是将相邻的陆地的位置置为 0,最后计算孤岛面积中最小的一个 #include <iostream> #include <vector> #include <queue>using namespace std;int sum 0; int dir[4][2] {0,-1…...
实用 Git 学习工具推荐:Learn Git Branching
https://learngitbranching.js.org/?localezh_CN 网站概述 Learn Git Branching 是一个面向开发者的交互式 Git 学习平台,专为那些希望通过实践掌握 Git 高级用法的用户设计。网站采用游戏化的界面和渐进式挑战,让复杂的 Git 概念变得直观易懂。无论是…...
物流项目第三期(统一网关、工厂模式运用)
前两期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 为什么要有网关? 通过前面的课程我们已经完成了四个端的登录,但是我们并没有对登录后的请…...
安卓settings单双屏显示
Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java的onCreate方法中,创建布局之前会通过ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);去获取是否使用嵌入式显示。 mIsEmbeddingActivityEnabled ActivityEmbeddingUtils.is…...
SpringCloud+Vue实现大文件分片下载(支持开始、暂停、继续、取消)
1. 实现效果 http://localhost:8089/#/demo 所有代码已提交至 https://github.com/SJshenjian/cloud.git与 https://github.com/SJshenjian/cloud-web.git中,欢迎star 2. 后端核心代码 FeignClient(value "download", contextId "download"…...
RK3576 Android 14.0 SDK开发指南(第一集)
RK3576 Android 14.0 SDK代码编译 SDK下载到本地后大概70多个G 下载后要做个校验 解压后内核源码 kernel代码路径说明 Android14支持6.1 版本的kernel,kernel源码在工程中kernel-6.1目录下 Lunch项说明 一键编译命令 ./build.sh -UKAupSoc RK3576 SDK默认没有开…...
【C/C++】现代C++线程池:从入门到生产级实现
文章目录 现代C线程池:从入门到生产级实现🧠 What Is a Thread Pool?🧩 Why Use a Thread Pool?🔰 Part 1: Basic Thread Pool (Beginner)🔧 Minimal Working Code:✅ Usage: 🧑🔬 Part 2: …...
后期:daplink
问题描述: 问题一:总工程,USB插入能识别到dap,但有个黄色的感叹号!现在连感叹号都没有了。 重点跟踪了枚举的几个函数,差异点就是有个工厂描述符没有枚举到。 问题二: 下载后,目标板,没有自动复位。 问题三:未移植daplink的时候,虚拟串口是收发正常,貌似没有映射到…...
Android SharedPreferences:从零到一的全面解析与实战指南
简介 SharedPreferences是Android平台提供的一种轻量级键值对存储方案,虽然看似简单,但在实际开发中却蕴含着丰富的技术细节和最佳实践。本文将从基本概念出发,深入分析其源码实现原理,探讨企业级开发中的应用技巧,并提供完整的代码示例,帮助开发者全面掌握这一重要数据…...
推扫式高光谱相机VIX-N230重磅发布——开启精准成像新时代
随着各行业对高光谱成像技术需求的持续增长,市场对于高分辨率、高灵敏度以及快速成像的高光谱相机的需求愈发迫切。中达瑞和凭借多年的行业经验和技术积累,敏锐捕捉到这一市场趋势,正式推出全新一代推扫式可见光近红外高光谱相机——VIX-N230…...
实现rpc通信机制(待定)
一、概述 (1)rpc(remote procedure call, 远程接口调用),就像在本地调用函数一样,是应用组成服务内部分布式的基础功能。应用场景是在内网中的计算,比如:(a) 为上传的一张图片加水印、…...
STM32--串口函数
USART_GetFlagStatus() 用于获取某个串口的寄存器中的某个标志位的状态,和中断无关。 USART_ClearFlag() 用于清楚串口寄存器中的标志位的状态,和中断无关。 USART_ITConfig() 使能或禁用指定的 USART 中断。 USART_ITConfig(USART1, USART_IT_TXE, …...
Linux跨网络通信中IP与MAC的作用
是的,MAC地址和IP地址分别属于OSI模型的不同层次,并在数据封装过程中被添加到不同的位置: 1. MAC地址(数据链路层) 作用层级:数据链路层(第二层)。封装位置:添加到数据链…...
Facebook隐私保护的成与败:一场对用户信任的考验
引言 在这个信息爆炸的时代,Facebook作为全球最大的社交网络平台之一,其隐私保护政策和实践一直是公众关注的焦点。随着数据泄露事件的频发,Facebook在隐私保护方面的成与败,不仅关系到其自身的声誉,更是对用户信任的…...
面试算法刷题3(核心+acm)
102. 二叉树的层序遍历 递归法 核心代码模式 不断递归根节点,根据深度来判断加在哪一层上。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(in…...