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

news/2024/12/30 3:58:57/

欢迎关注,本专栏主要更新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.ppmy.cn/news/42439.html

相关文章

C语言实例:求一个整数的所有因数,创建各类三角形图案(代码+思路)

C 语言实例 - 求一个整数的所有因数 在本文中&#xff0c;我们将介绍几种 C 语言代码写法来求一个整数的所有因数&#xff0c;并详细介绍每种代码的思路。 代码写法一 #include<stdio.h>int main() {int n, i;printf("请输入一个整数&#xff1a;");scanf(&…

d2l 文本预处理textDataset

这一节极其重要&#xff0c;重要到本来是d2l的内容我也要归到pyhon封面&#xff0c;这里面class的操作很多&#xff0c;让我娓娓道来&#xff01; 目录 1.要实现的函数 2.读取数据集 3.词元化 4.Vocab类 4.1count_corpus(tokens) 4.2class中的各种self 4.2.1 _token_fr…

每68个孩子里,就有一个自闭症,“来自星星的孩子”,离我们很近

今年4月2日是世界上第14个“世界自闭症日”。自闭症儿童&#xff0c;又称“星星儿童”&#xff0c;形容他们像遥远的星星一样独自在夜空中闪耀。自闭症并不少见根据世卫组织的调查&#xff0c;世界上每160名儿童中就有一人患有自闭症。根据《中国自闭症&#xff08;自闭症&…

数据资产目录建设方法

以信息技术为核心的第四次经济革命使得全球经济进入到数字化转型时期&#xff0c;对于今天的企业来说&#xff0c; 数字化转型已经不是可做可不做的自选题&#xff0c; 而是必须付诸行动的必选题。 从数字化转型的实践经验中我们可以得知&#xff0c;企业的数据资产是企业数字…

1、ThingsBoard部署-概述

1、介绍 当大家看到我这个文章的时候&#xff0c;肯定会很疑惑&#xff0c;也或许会心里面骂我&#xff1a;"这人为啥还要开一个专栏&#xff0c;割韭菜啊"&#xff0c;为啥不合并到上一个专栏中呢&#xff1f;因为我录制了ThingsBoard的部署课程&#xff0c;有单独售…

代码随想录打卡第60天|84.柱状图中最大的矩形(本轮打卡圆满结束啦~)

84.柱状图中最大的矩形(与接雨水类似&#xff09; 关键点1&#xff1a;先前的一些准备 单调栈&#xff1a;单调栈的含义->用栈记录已经遍历过的元素&#xff0c;再将0元素压入栈 结果&#xff1a;sum&#xff0c;初始化为0 关键点2&#xff1a;核心部分 for循环遍历给定…

多线程冲突处理方法,锁

线程之间是可以共享进程的资源&#xff0c;比如代码段、堆空间、数据段、打开的文件等资源&#xff0c;但每个线程都有自己独立的栈空间。 那么问题就来了&#xff0c;多个线程如果竞争共享资源&#xff0c;如果不采取有效的措施&#xff0c;则会造成共享数据的混乱。 我们做…

带头部表头和侧边表头样式的布局

原型设计的页面中的表格除了头部还有左侧侧边是表头的一个表格&#xff0c;查阅组件文档&#xff0c;发现表格table没有两个表头的布局。 思路&#xff1a; 1、使用div自己布局 2、使用表格table&#xff0c;修改其第一列样式背景&#xff0c;展示除了的样子看着像是有多个表头…