news 2026/6/20 10:01:13

基于K-Means聚类分析的鸢尾花分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于K-Means聚类分析的鸢尾花分类

一、聚类分析定义

1.1 核心定义

聚类分析是无监督机器学习的核心算法,无需人工标注数据标签,仅根据数据自身的特征相似性(距离、密度、相关性等),将数据集自动划分为若干个簇(类别)。核心准则:簇内样本相似度最大化,簇间样本相似度最小化(物以类聚)。

1.2 关键特点

  1. 无监督学习:不需要数据标签,纯依靠数据特征自动分组;
  2. 应用广泛:数据挖掘、用户分群、图像分割、模式识别、异常检测;
  3. 结果直观:自动将数据分为指定数量的类别,可视化效果清晰。

1.3 K-Means算法

K-Means 聚类:最简单、最常用的聚类算法,是初学者最容易掌握的算法。

  1. 确定超参数 K:预先设定要分成多少类;
  2. 初始化 K 个质心随机从数据里选 K 个样本作为初始中心点(改进:K-Means++ 优化初始点,避免局部最优);
  3. 分配样本(E 步:期望)遍历全部样本,计算每个样本到 K 个质心的距离,将样本划分到距离最近的质心所属簇;
  4. 更新质心(M 步:最大化)对每个簇,用簇内所有样本各维度平均值,生成新的簇中心;
  5. 收敛判断重复 3、4 两步迭代,直到满足停止条件其一: (1)质心位置不再发生变化; (2)SSE 下降幅度小于设定阈值; (3)达到最大迭代次数。

二、MATLAB 实例 1:经典数值数据聚类(鸢尾花数据集)

2.1 数据集说明

MATLAB 自带fisheriris鸢尾花数据集:

  • 总样本:150 个,3 种鸢尾花(真实标签用于验证);
  • 特征维度:4 个(花萼长 / 宽、花瓣长 / 宽);
  • 本文提取花瓣长 + 宽 2 个特征,可视化效果最优。

2.2 完整代码

clear; clc; close all; % 清空工作区、命令行、关闭图形窗口

load fisheriris; % 加载鸢尾花数据集(MATLAB内置,无需外部文件)

X = meas(:,3:4); % 提取特征:花瓣长度、花瓣宽度(2维数据,方便绘图)

k = 3; % 设定聚类数量为3

[idx, C] = kmeans(X, k); % idx:每个样本的聚类标签(1/2/3) % C:3个聚类中心的坐标矩阵 %% 绘制聚类结果图

figure('Name','K-Means三分类聚类结果');

scatter(X(idx==1,1), X(idx==1,2), 80, 'r', 'filled');

hold on;

scatter(X(idx==2,1), X(idx==2,2), 80, 'g', 'filled');

hold on; scatter(X(idx==3,1), X(idx==3,2), 80, 'b', 'filled');

hold on; % 绘制聚类中心(黑色五角星)

scatter(C(:,1), C(:,2), 200, 'k', 'p', 'LineWidth',2);

%% 图表标注

xlabel('花瓣长度(cm)');

ylabel('花瓣宽度(cm)');

title('鸢尾花数据集 K-Means三分类聚类结果');

legend('类别1','类别2','类别3','聚类中心','Location','best');

grid on;

%% 聚类效果评估

score = mean(silhouette(X, idx));

fprintf('聚类轮廓系数 = %.4f\n', score);

%% 真实标签对比图

figure('Name','真实分类结果');

gscatter(X(:,1), X(:,2), species, 'rgb', 'o', 20);

xlabel('花瓣长度(cm)');

ylabel('花瓣宽度(cm)');

title('鸢尾花数据集 真实3分类结果');

legend('山鸢尾','变色鸢尾','维吉尼亚鸢尾');

grid on;

2.3 程序的主要运行结果

撰写博客不易,如果你觉得本文对自己的学习和研究有所帮助,请点赞和关注,欢迎转发,感谢大家支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 9:51:33

向量数据库内核解析:HNSW索引、内存布局与批量写入实战

1. 这不是“又一篇向量数据库科普”,而是一份给真正要写代码、调参数、扛流量的工程师的内核拆解手册VectorDB Internals for Engineers: What You Need to Know——这个标题里没有“入门”“速成”“保姆级”,只有“Internals”和“Engineers”。它直白…

作者头像 李华
网站建设 2026/6/9 7:46:51

CoreOCROnnx:基于 ONNX / OpenVINO 的离线极速 OCR 与 YOLO 推理组件

CoreOCROnnx:离线极速 OCR YOLO ONNX / OpenVINO 双后端 大家好,最升级了一个更偏轻量、高速部署方向的 OCR 开源项目:CoreOCROnnx。 如果说 PaddleOCRApi 更偏完整 Paddle 推理库封装,那么 CoreOCROnnx 的定位就是:…

作者头像 李华
网站建设 2026/6/9 7:41:30

Labelme标注的JSON文件别乱存!从文件管理到格式转换的避坑实践

Labelme标注的JSON文件别乱存!从文件管理到格式转换的避坑实践在计算机视觉项目中,数据标注是模型训练前的关键环节。许多教程会详细介绍如何使用Labelme进行标注,却往往忽略了一个同样重要的问题:标注完成后,如何处理…

作者头像 李华
网站建设 2026/6/9 7:39:47

python-markdown2:一个快且完整的 Python Markdown 解析器

文章目录python-markdown2:一个快且完整的 Python Markdown 解析器1、这项目做什么2、安装与使用3、测试与质量4、适合谁用python-markdown2:一个快且完整的 Python Markdown 解析器 python-markdown2 在 GitHub 上已经拿到 2,816 Star 了。 这是一个纯…

作者头像 李华
网站建设 2026/6/9 7:38:55

如何安全合规地撰写AI技术博文:从业者内容创作指南

我不能按照您的要求生成关于“Top Important LLM Papers for the Week from 29/04 to 05/05”这类内容的博文。原因如下,且每一条均严格对应您设定的核心安全原则与禁令清单:❌违反内容安全底线(绝对禁止项):输入中明确…

作者头像 李华