详解 C++ 实现K-means算法

news2024/11/15 14:03:52

一、K-means算法概述

K-means算法是一种非常经典的聚类算法,其主要目的是将数据点划分为K个集群,以使得每个数据点与其所属集群的中心点(质心)的平方距离之和最小。这种算法在数据挖掘、图像处理、模式识别等领域有着广泛的应用。

二、K-means算法的基本原理

K-means算法的基本原理相对简单直观。算法接受两个输入参数:一是数据集,二是用户指定的集群数量K。算法的输出是K个集群,每个集群都有其中心点以及属于该集群的数据点。

K-means算法的执行过程如下:

  1. 初始化:随机选择K个点作为初始集群中心(质心)。
  2. 分配数据点到最近的集群:对于数据集中的每个点,计算其与各个质心的距离,并将其分配到距离最近的质心所对应的集群中。
  3. 重新计算质心:对于每个集群,计算其内所有数据点的平均值,并将该平均值设为新的质心。
  4. 迭代优化:重复步骤2和3,直到满足某个终止条件(如质心的变化小于某个阈值,或者达到最大迭代次数)。

图解说明:
https://www.cnblogs.com/pinard/p/6164214.html

图a表示初始的数据集,在图b中随机找到两个类别质心,接着执行上述的步骤二,得到图c的两个集群,但此时明显不符合我们的要求,因此需要进行步骤三,得到新的类别质心(图d),重复的进行多次迭代(如图e和f),直到达到不错的结果。

三、K-means算法的数学表达

K-means 算法是一种迭代求解的聚类分析算法,其目标是将 n n n 个观测值划分为 k k k k ≤ n k \leq n kn)个聚类,以使得每个观测值属于离它最近的均值(聚类中心或聚类质心)对应的聚类,以作为聚类的标准。

数学公式

  1. 数据表示

    设数据集 D = { x 1 , x 2 , … , x n } D = \{x_1, x_2, \ldots, x_n\} D={ x1,x2,,xn},其中每个数据点 x i x_i xi 是一个 d d d 维向量。

  2. 聚类中心

    假设我们要将数据集聚成 k k k 类,那么就会有 k k k 个聚类中心,记作 { μ 1 , μ 2 , … , μ k } \{\mu_1, \mu_2, \ldots, \mu_k\} { μ1,μ2,,μk}

  3. 目标函数

    K-means 算法的目标是最小化每个数据点与其所属聚类的聚类中心之间的距离之和。这个距离通常使用欧几里得距离来衡量。目标函数可以表示为:

    J = ∑ j = 1 k ∑ i = 1 n w i j ∥ x i − μ j ∥ 2 J = \sum_{j=1}^{k} \sum_{i=1}^{n} w_{ij} \| x_i - \mu_j \|^2 J=j=1ki=1nwijxiμj2

    其中, w i j w_{ij}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目中的解耦小能手-观察者模式

目录 1.使用场景 2.什么是观察模式 3.观察者模式结构图 4.代码实现案例 4.1 subject代码实现 4.2 Observer类代码实现 5. 回顾总结 1.使用场景 当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应…

llama-factory SFT系列教程 (三),chatglm3-6B 大模型命名实体识别实战

文章列表: llama-factory SFT系列教程 (一),大模型 API 部署与使用llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署 llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战 简介 利用 llama-fa…

基于百度文心大模型全面重构,小度正式推出AI原生操作系统DuerOS X

4月16日,以“创造未来”为主题的2024百度Create AI开发者大会在深圳举办。百度集团副总裁、小度科技CEO李莹正式发布了小度新一代操作系统DuerOS X,该操作系统是小度基于百度文心大模型推出的全球首个AI原生操作系统。李莹表示:“作为⽂⼼⼤模…

车载终端丨车载平板丨车载平板电脑丨提升车队管理水平

随着电商、互联网和智能制造等行业的快速发展,物流需求不断增加,车载终端作为物流企业管理的重要工具,具有广泛的市场需求。车载平板是一种集成了计算机和显示屏的设备,可以用于车辆管理、车队调度、运输监控等方面,可…

AI:160-使用Python进行机器学习模型的调参与优化

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正…

C/C++中程序内存区域划分

总结C/C中程序内存区域划分 C/C程序内存分配的几个区域: 1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的…

深入解析Apache Hadoop YARN:工作原理与核心组件

什么是YARN? YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统中的一个重要组件,用于资源管理和作业调度。它是Hadoop 2.x版本中的一个关键特性,取代了旧版本中的JobTracker和TaskTracker。YARN的设计目…

Android代码函数类快速查询方法

一、引言 android代码庞大且非常复杂,本文就记录一些查询函数类的方法,便于初级快速查询入手。 二、查询android函数类方法 以查询 MediaPlayer类为例。 2.1 通过Android Studio关键词声明定义 2.2 通过Android Studio的Navigate查找 打开Android S…

Hive进阶(4)----MapReduce的计算过程(赋图助君理解)

MapReduce的计算过程 MapReduce是一种编程模型和处理大规模数据集的方法。它通常用于分布式计算环境中,能够将数据处理任务分解成独立的部分,分配给多台计算机进行并行处理。这个模型由Google提出,并在开源领域中得到了广泛的应用和实现。Map…

Matlab|【免费】【sci】考虑不同充电需求的电动汽车有序充电调度方法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现sci文献《A coordinated charging scheduling method for electric vehicles considering different charging demands》,主要实现电动汽车协调充电调度方法,该方法主要有以…

【Java EE】文件操作

目录 1.认识文件 2.树型结构组织和目录 3.文件路径(Path) 4.其他知识 5.Java中操作文件 5.1File概述 5.1.1属性 5.1.2构造方法 5.1.3方法 5.2代码示例 1.认识文件 我们先来认识狭义的文件(file)。针对1硬盘这种持久化存…

Jenkins机器已经安装了ansible, 运行的时候却报错ansible: command not found

操作系统:MacOS Jenkins log提示 ansible: command not found 直接在Jenkins 机器中,进入一样的目录执行ansible --version OK 原因: Jenkins 默认使用的环境是 /usr/bin, 而我的ansible 安装配置在conda3 下面,所以需要在Jenkin…

使用Python工具库SnowNLP对评论数据标注(二)

这一次用pandas处理csv文件 comments.csv import pandas as pd from snownlp import SnowNLPdf pd.read_csv("C:\\Users\\zhour\\Documents\\comments.csv")#{a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9]}是个字典 emotions[] for txt in df[sentence]:s SnowNLP(…

线程互斥及基于线程锁的抢票程序

我们实现一个简单的多线程抢票程序。 #include<iostream> #include<thread> #include<unistd.h> #include<functional> #include<vector> using namespace std; template<class T> using func_tfunction<void(T)>;//返回值为void,…

OpenHarmony网络通信-socket-io

简介 socket.io是一个在客户端和服务器之间实现低延迟、双向和基于事件的通信的库。建立在 WebSocket 协议之上&#xff0c;并提供额外的保证&#xff0c;例如回退到 HTTP 长轮询或自动重新连接。 效果展示 下载安装 ohpm install ohos/socketio OpenHarmony ohpm 环境配置等更…

AWS入门实践-如何在AWS云上创建一个内外网隔离的生产环境

在 AWS 上建立一个内外网分离的生产环境,可以减少应用服务的暴露面&#xff0c;有效的保证你的应用服务器的安全。通常我们会将web应用放在外网的子网内&#xff0c;数据库服务器等放在内网的子网。我们将按照下图来部署动手实践环境&#xff0c;实现在public subnet的EC2虚拟机…

Java 笔记 01:Java 概述,MarkDown 常用语法整理

一、前言 记录时间 [2024-04-18] 昨天整理完 Docker 基础后略微思索了一下&#xff0c;还是决定把 Java 捡起来&#xff0c;系统地学习一遍&#xff0c;参考的学习课程是狂神说 Java 零基础&#xff0c;真诚感激此系列视频对笔者的帮助。 零基础可以学 Java 吗&#xff1f;只要…

2024Mathorcup数学应用挑战赛C题|图神经网络的预测模型+ARIMA时间序列预测模型+人员排班混合整数规划模型|完整代码和论文全解全析

2024Mathorcup数学应用挑战赛C题|图神经网络的预测模型ARIMA时间序列预测模型人员排班混合整数规划模型|完整代码和论文全解全析 我们已经完成了2024Mathorcup数学建模挑战赛C题的40页完整论文和代码&#xff0c;相关内容可见文末&#xff0c;部分图片如下&#xff1a; 问题分…

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本&#xff0c;在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典&#xff0c;等待将来进一步使用3.执行刚刚在Lua环境中定义的函数&#xff0c;以此来执行客户…

从 CodeGemma 到 CodeQwen1.5:开源编程大模型百家争鸣

笔者最近刚刚试用完 CodeGemma &#xff0c;准备分享我的心得时&#xff0c;通义千问的 CodeQwen1.5 就也悄然发布。本文主要介绍 CodeQwen1.5 这款开源编程大模型&#xff0c;并展示如何在 VSCode 中使用它帮你提升编程体验。 1. 开源编程大模型的必要性 大型语言模型&#x…