【MATLAB数学建模编程实战】Kmeans算法编程及算法的简单原理

news/2024/5/19 2:49:37/文章来源:https://blog.csdn.net/qq_33950926/article/details/130040592

欢迎关注,本专栏主要更新MATLAB仿真、界面、基础编程、画图、算法、矩阵处理等操作,拥有丰富的实例练习代码,欢迎订阅该专栏!(等该专栏建设成熟后将开始收费,快快上车吧~~)

【MATLAB数学建模编程实战】Kmeans算法编程及算法的简单原理

kmeans算法是比较简单的一个算法,K-Means算法是一种「无监督」的聚类算法。什么叫无监督呢?就是对于训练集的数据,在训练的过程中,并没有告诉训练算法某一个数据属于哪一个类别。对于K-Means算法来说,他就是通过某一些骚操作,将一堆“相似”的数据聚集在一起然后当作同一个类别。例如下图:最后将数据聚集成了3个类别。
K就是代表类别的个数,它可以根据用户的需求进行确定
算法的流程很简单,如下所示:

  1. 选取初始化质心

  2. 计算数据集样本中其它的点到质心的距离,然后选取最近质心的类别作为自己的类别。

  3. 重新计算质心
    通过上面的步骤我们就得到了3个簇,然后我们从这三个簇中重新选举质心,也就是我们选举出一个新的“爸爸”,这个"爸爸"可以为样本点(比如说红点),也可以不是样本中的点(比如说蓝点和绿色点)。选举方式很简单,就是计算每一个簇中样本点的平均值。

  4. 重复第3,4步骤,直到达到某一个阈值
    这个阈值可以是迭代的轮数,也可以是当质心不发生改变的时候或者质心变化的幅度小于某一个值得时候停止迭代。

代码结果演示

完整代码下载链接

首先生成符合正太分布的简单数据集:
在这里插入图片描述
生成的代码如下:

% 第一组数据
mu1=[0 0 ];  %均值
S1=[.1 0 ;0 .1];  %协方差
data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据
%第二组数据
mu2=[1.25 1.25 ];
S2=[.1 0 ;0 .1];
data2=mvnrnd(mu2,S2,100);
% 第三组数据
mu3=[-1.25 1.25 ];
S3=[.1 0 ;0 .1];
data3=mvnrnd(mu3,S3,100);
% 显示数据
plot(data1(:,1),data1(:,2),'b+');
hold on;
plot(data2(:,1),data2(:,2),'r+');
plot(data3(:,1),data3(:,2),'g+');
grid on;

然后进入Kmeans算法,开始聚类,最终的聚类结果如图所示:
在这里插入图片描述
中间的空心原点就是生成的聚类中心:
在这里插入图片描述
算法部分代码:
在这里插入图片描述
可以看到和上面所述的流程差不多;

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

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

相关文章

[LeetCode周赛复盘] 第 340 场周赛20230409

[LeetCode周赛复盘] 第 340 场周赛20230409 一、本周周赛总结二、 6361. 对角线上的质数1. 题目描述2. 思路分析3. 代码实现三、6360. 等值距离和1. 题目描述2. 思路分析3. 代码实现四、6359. 最小化数对的最大差值1. 题目描述2. 思路分析3. 代码实现五、 6353. 网格图中最少访…

ROS实践06 自定义消息类型

文章目录运行环境:思路:1.1 定义.msg文件1)功能包下新建 msg 目录,添加文件 Person.msg2)修改package.xml3)修改CMakeLists.txt2.1 自定义消息调用(C)1)编译后修改includePath2)发布方实现2.1修改CMakeLists.txt2.3运行…

【OpenCV-Python】cvui 之 trackbar

CVUI 之 trackbar cvui::trackbar() 渲染一个 trackbar, 可以左右拖动或点击对数字进行增加或减少的调整。 不使用离散间隔 使用离散间隔 Python import numpy as np import cv2 import cvuidef trackbar_test():WINDOW_NAME Trackbar-Test# 创建画布frame np.z…

【Python童年游戏】满满的回忆杀—那些年玩过的童年游戏你还记得吗?那个才是你的菜?看到第一个我就泪奔了(致我们逝去的青春)

导语 滴一一学生卡🙌 结伴上车的学生仔子们 用笑声打破车厢的沉默 大人眼里的晚高峰 是给放学后快乐😀时光的加时 下车的学生匆匆起身带起 一阵熟悉的栀子香于💓 是关于校园的记忆 开始零零散散地闪现 放学后集合的秘密基地/跟着城…

LVGL v8学习笔记 |12 - 移植LVGL 8.3到ESP32C3开发板(ST7789)

一、移植前的准备 1. 基础工程 ESP32-IDF开发笔记 | 03 - 使用SPI外设驱动ST7789 SPILCD2. lvgl源码 https://github.com/lvgl/lvgl下载最新发布的 8.3.6 版本:https://github.com/lvgl/lvgl/releases/ 二、移植lvgl 1. 复制lvgl源码到工程中 将下载的 lvgl-8.3.6 文件夹直…

JSON数据遍历之for-in

JSON数据遍历之for-in object 本身就是无对象的集合,因此在用 for-in 语句遍历对象的属性时,遍历出的属性顺序与对象定义时不同。 W3C标准 根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对…

KlayGE-001-简介

KlayGE 引擎学习-001 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lWlSlet9-1680688988724)(images/KlayGE_logo.png)] 一、KlayGE引擎介绍 软件简介 KlayGE中文译为:粘土游戏引擎,是一个开源、跨平台,基于插…

6-MATLAB APP Design-表格组件(uitable)

此博文通过MATLAB APP Design实现对学生成绩的处理,具体的功能包括读取表格数据、添加学生数据、计算总成绩、成绩排序+以及表格的保存。 一、APP 界面设计展示 1. 在画布中拖入面板、表格和四个按钮,布局如下。将面板的title写为“学生成绩计算器”并居中,将四个按钮的t…

游戏开发之Unity2021熟悉基本工具

接上一节通用渲染管线项目搭建 导入天空盒素材:在窗口中选择资源商店后会弹出下面的图片,在资源商店中找到我们想要的天空盒素材,将素材在unity中打开,如下面的第二幅图中就是我选择的天空盒素材,在这里可能会遇到一个…

Centos7搭建Ngrok内网穿透

一、安装gcc和git(用于下载ngrok源码) yum install gcc -y yum install git -y 二、安装go语言环境 yum install -y mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 三、检查环境安装 git --version //( > 1.7 ) go version 四…

通读《技术管理实战36讲》1、自我倾听篇

你好,我是小Z,一个工作在交付前线的程序员,我们正在通读《技术管理实战36讲》,作者刘建国。今天我们要梳理的章节是“自我倾听篇”。 在第1篇《多年前的那些工程师都去哪了?》中, 作者借助上周的“老知道人…

linux系统中cat命令的详细用法

在Linux中,cat命令是一个很常用的命令,它的作用是将文件内容输出到屏幕上,或者将多个文件合并成一个文件。下面是cat命令的一些常用用法: ​1. 显示文件内容 使用cat命令可以打印出文件的内容,如: cat fi…

[Qt 教程之Widgets模块] —— QFormLayout表单布局

Qt系列教程总目录 文章目录一、创建QFormLayout二、成员函数2.1. 对行操作2.2. 操作布局项2.3. 间距2.4. 设置布局规则2.5. 对齐方式表单布局 QFormLayout 以两列形式布局其子项。左列由标签组成,右列由小部件(行编辑器、数字调整框等)组成。…

FPGA实现图像去雾 基于暗通道先验算法 纯verilog代码加速 提供2套工程源码和技术支持

目录1、前言2、目前我这里已有的图像处理方案3、暗通道先验算法介绍4、本图像去雾模块的优缺点5、vivado工程详解vivado工程1详解vivado工程2详解6、上板调试验证7、福利:工程源码获取1、前言 本文详细描述了FPGA实现图像去雾的实现设计方案,采用暗通道…

C++文件加密篇(基于char数组进行可逆加密)

严格意义上的加密算法有对称加密算法和非对称加密算法,对称加密算法是指加密与解密的key相同,而非对称加密算法是指加密(使用公钥,所有人都可以获取)与解密(使用私钥,只有指定方有私钥&#xff…

Robosense激光雷达Linux配置

文章目录1.1 速腾rs16连接:1.2 网络配置1)官方说明2)设置网络3)检查是否连接成功2.1 激光雷达ROS包下载/编译1)下载ROS包2)安装libpcap依赖3)修改编译模式4)config文件配置5)编译并运…

【数据结构与算法】一、数据结构的基本概念

文章目录一、数据结构的基本概念1.1 数据结构的研究内容1.2 数据类型和抽象数据类型1.3 算法和算法分析1.3.1 算法的时间复杂度1.3.2 算法时间效率的比较1.4 知识回顾一、数据结构的基本概念 1.1 数据结构的研究内容 1.2 数据类型和抽象数据类型 抽象数据类型(ADT…

[入门必看]数据结构4.1:串的定义和实现

[入门必看]数据结构4.1:串的定义和实现第四章 串4.1 串的定义和实现知识总览4.1.1_串的定义和基本操作4.1.2_串的存储结构4.1.1_串的定义和基本操作串的定义串 V.S 线性表串的基本操作串的比较操作字符集编码4.1.2_串的存储结构串的顺序存储串的链式存储基本操作的实…

4月9日第壹简报,星期日,农历闰二月十九

4月9日第壹简报,星期日,农历闰二月十九坚持阅读,静待花开1. “2023中国品牌女性500强”榜单揭晓,屠呦呦、张桂梅、董明珠、刘洋、孟晚舟、谷爱凌等入选。2. 京东集团副总裁:将在今年发布“京东版”ChatGPT。3. 以冒名顶…

大数据Flink进阶(十八):Flink执行图和TaskSlot问题思考

文章目录 Flink执行图和TaskSlot问题思考 一、Flink执行图 二、TaskSlot问题思考 Flink执行图和TaskSlot问题思考 一、Flink执行图 Flink代码提交到集群执行时最终会被转换成task分布式的在各个节点上运行,在前面我们学习到DataFlow数据流图