Matlab:K-means算法

K-means算法是一种常见的聚类算法,它将一组数据划分为K个不同的簇,以最小化每个簇内部数据点与簇中心之间的平方距离的总和为目标实现聚类。

1、基本步骤:

1.选择要划分的簇数K;

2.选择K个数据点作为初始的聚类中心;

3.对于每个数据点,计算其与每个聚类中心之间的距离,并将数据点分配给距离最近的聚类中心;

4.更新每个簇的中心点,将其设置为该簇中所有数据点的平均值;

5.重复步骤3和步骤4,直到达到收敛条件(即簇中心不再发生变化或达到最大迭代次数);

6.得到K个簇,每个簇包含一组数据点。

2、算法结构:

%K-means算法的函数定义,用于执行K-means聚类并返回结果
function [Idx, Center] = K_means(X, xstart)len = length(X);        %X中的数据点个数
Idx = zeros(len, 1);    %每个数据点的IdC1 = xstart(1,:);       %第1类的中心位置
C2 = xstart(2,:);       %第2类的中心位置
C3 = xstart(3,:);       %第3类的中心位置for i_for = 1:100%为避免循环运行时间过长,通常设置一个循环次数%或相邻两次聚类中心位置调整幅度小于某阈值则停止%更新数据点属于哪个类for i = 1:lenx_temp = X(i,:);    %提取出单个数据点d1 = norm(x_temp - C1);    %与第1个类的距离d2 = norm(x_temp - C2);    %与第2个类的距离d3 = norm(x_temp - C3);    %与第3个类的距离d = [d1;d2;d3];[~, id] = min(d);   %离哪个类最近则属于那个类Idx(i) = id;end%更新类的中心位置L1 = X(Idx == 1,:);     %属于第1类的数据点L2 = X(Idx == 2,:);     %属于第2类的数据点L3 = X(Idx == 3,:);     %属于第3类的数据点C1 = mean(L1);      %更新第1类的中心位置C2 = mean(L2);      %更新第2类的中心位置C3 = mean(L3);      %更新第3类的中心位置
endCenter = [C1; C2; C3];  %类的中心位置

注:

(1)函数的输入参数为X和xstart,其中:

【1】X是一个包含数据点的矩阵,每一行代表一个数据点的特征向量;

【2】xstart是一个初始化的聚类中心矩阵,每一行代表一个初始的聚类中心。

(2)函数的输出结果为Idx和Center,其中:

【1】Idx是一个向量,表示每个数据点所属的聚类簇编号;

【2】Center是一个矩阵,表示最终得到的聚类中心。

3、

例:

1.

data = [randn(10,2)+1; randn(10,2)-1; randn(10,2)];%生成数据点
[idx, C] = kmeans(data, 3);%用K-means算法将data数据集聚类成3个簇
scatter(data(:,1), data(:,2), [], idx);%用散点图可视化数据集
hold on;
plot(C(:,1), C(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
%将聚类中心绘制在散点图上

2.

%随机生成三组数据
a = rand(30,2) * 2;
b = rand(30,2) * 5;
c = rand(30,2) * 10;
figure(1);
subplot(2,2,1); 
plot(a(:,1), a(:,2), 'r.'); hold on
plot(b(:,1), b(:,2), 'g*');
plot(c(:,1), c(:,2), 'bx'); hold off
grid on;
title('raw data');%K-means
X = [a; b; c];  %需要聚类的数据点
xstart = [2 2; 5 5; 8 8];  %初始聚类中心
subplot(2,2,2);
plot(X(:,1), X(:,2), 'kx'); hold on
plot(xstart(:,1), xstart(:,2), 'r*'); hold off
grid on;
title('raw data center');[Idx, Center] = K_means(X, xstart);
subplot(2,2,4);
plot(X(Idx==1,1), X(Idx==1,2), 'kx'); hold on
plot(X(Idx==2,1), X(Idx==2,2), 'gx');
plot(X(Idx==3,1), X(Idx==3,2), 'bx');
plot(Center(:,1), Center(:,2), 'r*'); hold off
grid on;
title('K-means cluster result');disp('xstart = ');
disp(xstart);
disp('Center = ');
disp(Center);

上接

Matlab:BP神经网络算法,二叉决策树icon-default.png?t=N7T8https://blog.csdn.net/weixin_73011353/article/details/135275547

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

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

相关文章

用 Node.js 写一个爬虫

自己设计一个网站,然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈,如果自己写着玩可能没啥事,但如果用这个网站来获利,你可能就要被寄律师函了,毕竟这有点‘刑’。这篇文章呢,就带大家爬取豆瓣TOP2…

51单片机之LED灯

51单片机之LED灯 🌴前言:🏮点亮LED灯的原理💘点亮你的第一个LED灯💘点亮你的八个LED灯 📌让LED灯闪烁的原理🎽 LED灯的闪烁🏓错误示范1🏓正确的LED闪烁代码应该是这样&am…

论文阅读——UniRepLKNet

UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio, Video, Point Cloud, Time-Series and Image Recognition 当我们将一个33的conv添加到一个小卷积核ConvNet中时,我们预计它会同时产生三种效果——1)使感受野更大,2&am…

【Linux】Linux

Linux 文章目录 Linux1. 简介2. 目录结构3. vi/vim 的使用4. 网络配置4.1 配置网络ip地址4.2 配置主机名或ip映射4.3 远程登陆及上传下载 5. 系统管理5.1 service 服务管理(CentOS 6 版本)5.2 systemctl 服务管理(CentOS 7 版本)5…

听GPT 讲Rust源代码--src/tools(39)

File: rust/src/tools/rustfmt/src/config/config_type.rs 在Rust代码中,rust/src/tools/rustfmt/src/config/config_type.rs文件的作用是定义了与配置相关的数据结构和函数。 Config struct(配置结构体):该结构体用于存储rustfmt…

命令模式-实例使用

未使用命令模式的UML 使用命令模式后的UML public abstract class Command {public abstract void execute(); }public class Invoker {private Command command;/*** 为功能键注入命令* param command*/public void setCommand(Command command) {this.command command;}/***…

Unity关于动画混合树(Blend Tree)的使用

在动画与动画的切换过程中,常因为两个动画之间的差距过大,而显得动画的切换很不自然。 这时候就需要动画混合树Blend Tree这个功能。使用混合树可以将多个动画混合在一起,例如在处理角色的移动中,走动画与跑动画切换的时候&#x…

Redis经典五大类型源码及底层实现(一)

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

前端八股文(工程化篇)

目录 1.常用的git命令有哪些? 2.git rebase和git merge的区别 3.有哪些常见的Loader和Plugin? 4.webpack的构建流程 5.bundle,chunk,module是什么? 6.如何提高webpack的打包速度 7.vite比webpack快在哪里 8.说一下你对Monorepo的理解 …

【MATLAB】PSO粒子群优化LSTM(PSO_LSTM)的时间序列预测

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 PSO粒子群优化LSTM(PSO-LSTM)是一种将粒子群优化算法(PSO)与长短期记忆神经网络(LSTM)相结合的混合模型。该算法通过…

springboot 项目新建流程

一、新建工程 二、工程建好后&#xff0c;在pom文件中加入springboot 依赖 <dependencies><!--SpringBoot启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>&l…

uniapp打包Android、Ios、微信小程序

首先我们需要在我们的代码中&#xff0c;把我们所要用到的配置信息配置好&#xff0c;在检查一下我们测试的内容是否有打开&#xff08;取消注释&#xff09;&#xff0c;在检查一下我们的版本信息是否正确&#xff0c;查看一下接口ip是否是正式线 这里的配置信息一定要配置好…