function kmeansSample()
close all;
clear all;
disp('k-means 聚类示例开始!!');
data = GetRawData(); % 获取原始数据的函数
% 使用 k-means 进行聚类
nCluster = 2; % 聚类的数量
[result, means] = kmeansClustering(data, nCluster);
% 显示聚类结果
ShowClusteringResult(result, means, nCluster);
function [result, means] = kmeansClustering(data, nCluster)
% 使用 k-means 进行聚类的方法
% 初始聚类,随机分配类别
result = [data randi(nCluster, [length(data(:,1)), 1])];
while 1
means = [];
for i = 1:nCluster
% 计算每个聚类的均值
means = [means; mean(result(result(:,3)==i, 1:2))];
end
% 显示聚类结果
ShowClusteringResult(result, means, nCluster);
% 将每个数据重新聚类,按距离从近到远的顺序
nUpdate = 0; % 更新的聚类数量
for j = 1:length(result(:,1))
% 计算每个数据到每个均值的距离
d = [];
for k = 1:nCluster
d = [d norm(result(j,1:2)-means(k,:))];
end
[c, i] = min(d); % 计算距离最小的聚类的ID
if result(j,3) ~= i
result(j,3) = i; % 更新聚类
nUpdate = nUpdate + 1;
end
end
if nUpdate == 0
break; % 聚类不再改变时结束
end
pause;
end
function ShowClusteringResult(result, means, nCluster)
% 显示聚类结果的函数
hold off;
% 为图形创建颜色数据
cc = hsv(nCluster);
% 对每个聚类绘制数据
for i = 1:nCluster
data = result(result(:,3)==i, 1:2);
plot(data(:,1), data(:,2), '.', 'Color', cc(i,:)); hold all;
plot(means(i,1), means(i,2), 'x', 'Color', cc(i,:)); hold all;
end
axis equal;
grid on;
hold on;
function data = GetRawData()
% 伪数据的聚类中心和误差量
nSample = [0 0 2;
10 10 5];
ndata = 30; % 每个聚类的数据点数量
data = [];
for nc = 1:length(nSample(:,1))
for i = 1:ndata
xy = nSample(nc,1:2) + randn(1,2) * nSample(nc,3);
data = [data; xy];
end
end
data = sortrows(data, 2); % 对数据进行排序和混洗
【matlab代码】k-means 聚类的示例代码.zip
需积分: 0 113 浏览量
2023-10-12
11:52:51
上传
评论
收藏 1KB ZIP 举报
小雨淋林
- 粉丝: 8
- 资源: 39
最新资源
- From Nand to Tetris (I) on Coursera
- VHDL是VHSIC Hardware Description Language的缩写,全称是Very High Speed I
- Redis是一种流行的开源内存数据库,它提供了各种各样的命令和功能来处理数据 以下是一些常见的Redis命令以及它们的用法:
- 基于java+springboot高校党建基本数据管理系统的设计与实现
- 网络安全是指保护计算机网络和网络基础设施的实践和技术 随着信息技术的发展,网络安全变得越来越重要,因为许多关键信息和个人数据都存
- 基于CYCLONE FPGA设计的出租车计价器Quartus工程VERILOG源码+课设报告文档.zip
- 课程设计:稳压电源电路.zip
- 基于C++的线段树和树状数组(免费提供全部源码)
- 使用 Redis 存储用户和他们的帖子.zip
- AI绘画实操(基础版)-推荐资料
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈