matlab实现聚类:寻找合适的可视化模式
作为一个CUMCM的rookie,我参加这个比赛的起因就是想学习可视化工具,建模知识只是附带的,不过在学习之后,我反倒感到建模思维才是我最大的收获。今年的国赛还没有打,我会不定期的记录一点学习过程。今天尝试了调用matlab的工具实现聚类及其可视化。
先上代码:(matlab不是人,代码高亮没人做,绷不住了)
%数据载入
load fisheriris
X = meas(:,3:4);%从矩阵中抽取特征
%-------------------------------------------------------------------------
figure;
plot(X(:,1),X(:,2),'k.','MarkerSize',10);%(横坐标来源,纵坐标来源,点型,指定大小,大小)
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';
%绘制原始数据分布图
%-------------------------------------------------------------------------
rng(1); % For reproducibility (rng函数设置了随机数生成器的当前状态,确保了结果的可复现性)
[idx,C] = kmeans(X,3); %聚类
%-------------------------------------------------------------------------
figure;
scatter(X(:,1),X(:,2),15,idx,'filled');
%用散点图和颜色描述聚类结果
%-------------------------------------------------------------------------
x1 = min(X(:,1)):0.01:max(X(:,1));
x2 = min(X(:,2)):0.01:max(X(:,2));
[x1G,x2G] = meshgrid(x1,x2);
XGrid = [x1G(:),x2G(:)]; % Defines a fine grid on the plot
idx2Region = kmeans(XGrid,3,'MaxIter',1,'Start',C);
%定义了一个精细网格,将整个平面划分为k个部分并分属于各个聚类。
%-------------------------------------------------------------------------
figure;
gscatter(XGrid(:,1),XGrid(:,2),idx2Region,...
[0,0.75,0.75;0.75,0,0.75;0.75,0.75,0],'..');
hold on;
plot(X(:,1),X(:,2),'k*','MarkerSize',5);
title 'Fisher''s Iris Data';
xlabel 'Petal Lengths (cm)';
ylabel 'Petal Widths (cm)';
legend('Region 1','Region 2','Region 3','Data','Location','SouthEast');
hold off;
%绘制聚类结果图
在使用中需要注意的几个点:
- 载入新数据时要重新编写载入部分,并且尽可能使新数据格式(Column的分布)与原示例数据一致。
- 适当的调整plot和scatter函数以优化效果,也可以尝试用GUI界面进一步美化。
- 分区过程中其实是使用了第二次聚类,将区域中足够细密的点都进行了归类,需要注意的是第二次聚类不能迭代多次,因为其初始中心即为第一次聚类的结果,多次迭代将导致背离事实的结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现