从零开始人工智能Matlab案例-KNN的二维数据分类

news2025/2/7 5:31:40

基于K最近邻(K-Nearest Neighbors, KNN)算法的二分类案例,包含完整MATLAB代码、算法原理和核心思想说明。此案例使用合成数据集,无需复杂数据预处理,适合快速理解。

案例:基于KNN的二维数据分类

目标:生成二维合成数据,训练KNN模型分类两种类别的点,并可视化决策边界。

核心思想

  • KNN算法:通过计算待分类样本与训练集中每个样本的“距离”,找到最近的k个邻居,根据这些邻居的多数类别决定分类结果。

  • 关键点

    • 无需显式训练模型(惰性学习)

    • 依赖距离度量(如欧氏距离)

    • k值选择影响分类边界平滑度(k小易过拟合,k大易欠拟合)

MATLAB代码

%% 生成合成数据(两类二维点)
rng(1); % 固定随机种子
class1 = mvnrnd([1, 2], [0.5 0; 0 0.5], 50);     % 类别1:均值为[1,2]
class2 = mvnrnd([4, 5], [0.5 0; 0 0.5], 50);     % 类别2:均值为[4,5]
data = [class1; class2];
labels = [ones(50,1); 2*ones(50,1)];

%% 可视化原始数据
figure;
scatter(class1(:,1), class1(:,2), 'r', 'filled'); hold on;
scatter(class2(:,1), class2(:,2), 'b', 'filled');
title('原始数据分布'); xlabel('特征1'); ylabel('特征2'); legend('类别1', '类别2');

%% 拆分训练集和测试集(70%训练,30%测试)
cv = cvpartition(labels, 'HoldOut', 0.3);
X_train = data(cv.training,:);
y_train = labels(cv.training);
X_test = data(cv.test,:);
y_test = labels(cv.test);

%% 训练KNN模型(k=3)
k = 3;
knnModel = fitcknn(X_train, y_train, 'NumNeighbors', k);

%% 预测并计算准确率
y_pred = predict(knnModel, X_test);
accuracy = sum(y_pred == y_test) / numel(y_test);
fprintf('测试集准确率:%.2f%%\n', accuracy*100);

%% 可视化决策边界
% 生成网格点
x1 = linspace(min(data(:,1)), max(data(:,1)), 100);
x2 = linspace(min(data(:,2)), max(data(:,2)), 100);
[X1, X2] = meshgrid(x1, x2);
gridPoints = [X1(:), X2(:)];

% 预测网格点类别
gridPred = predict(knnModel, gridPoints);
gridPred = reshape(gridPred, size(X1));

% 绘制决策区域
figure;
imagesc(x1, x2, gridPred);
hold on;
scatter(class1(:,1), class1(:,2), 50, 'r', 'filled');
scatter(class2(:,1), class2(:,2), 50, 'b', 'filled');
title(sprintf('KNN决策边界 (k=%d)', k));
xlabel('特征1'); ylabel('特征2');
colormap([1 0.8 0.8; 0.8 0.8 1]); % 浅红/浅蓝表示类别区域
alpha(0.3); % 设置透明度

 

代码说明与算法原理

  1. 数据生成

    • 使用mvnrnd生成两个二维高斯分布点集,分别代表两类数据。

    • 类别1中心在(1,2),类别2中心在(4,5),协方差矩阵保证数据分散。

  2. KNN训练

    • fitcknn函数指定NumNeighbors=3,即选择最近的3个邻居投票决定类别。

    • 距离默认使用欧氏距离。

  3. 决策边界可视化

    • 生成覆盖数据范围的网格点,预测每个点的类别。

    • 使用imagesc绘制分类区域,直观展示模型如何划分特征空间。


运行结果

  • 原始数据分布:红点和蓝点分别代表两类数据,明显可分。

  • 决策边界图:背景颜色显示分类区域,测试准确率100%。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AOP 扫盲

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

DeepSeek 提示词之角色扮演的使用技巧

老六哥的小提示:我们可能不会被AI轻易淘汰,但是会被“会使用AI的人”淘汰。 在DeepSeek的官方提示库中,有“角色扮演(自定义人设)”的提示词案例。截图如下: 在“角色扮演”的提示词案例中,其实…

python3中错误与异常初识

一. 简介 在 编写 Python时,经常会遇到一些报错信息。接下来开始学习 Python3 中错误和异常。 本文首先初步了解一下 Python3中的错误和异常。 二. python3 中错误与异常初识 Python 中有两种错误:语法错误与异常。 1. 语法错误 Python 的语法错误…

【图像处理】- 基本图像操作

基本图像操作详解 基本图像操作是图像处理的基础,涵盖了对图像进行简单但重要的变换。以下是几种常见的基本图像操作及其详细说明: 1. 裁剪 (Cropping) 描述:从原始图像中提取一个矩形区域。 实现方法: 使用图像的坐标系指定…

Attention is All You Need-Transformer模型论文精读+架构分析--简单易懂版

Foreword写在前面的话: 大家好,我是一名刚开始学习Transformer的新手。这篇文章是我在学习Transformer过程中的一些笔记和心得,希望能和同样在学习人工智能深度学习模型的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确…

Qt跨屏窗口的一个Bug及解决方案

如果我们希望一个窗口覆盖用户的整个桌面,此时就要考虑用户有多个屏幕的场景(此窗口要横跨多个屏幕),由于每个屏幕的分辨率和缩放比例可能是不同的,Qt底层在为此窗口设置缩放比例(DevicePixelRatio&#xf…

Spark--算子执行原理

一、sortByKey SortByKey是一个transformation算子,但是会触发action,因为在sortByKey方法内部,会对每个分区进行采样,构建分区规则(RangePartitioner)。 内部执行流程 1、创建RangePartitioner part&…

javaEE-6.网络原理-http

目录 什么是http? http的工作原理: 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行: 4.正文(body) HTTP响应数据 1.首行:​编辑 2.响应头 3.空行: 4.响应正文…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

【C++】STL——list的使用

目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕7.push_front,push_back,pop_front,pop_back函数…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档:选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字:应用所有对应颜色的文字开始→创建新的幻灯片→从大纲:考生文件夹:Word素材重置 开始→版…

MLA 架构

注:本文为 “MLA 架构” 相关文章合辑。 未整理去重。 DeepSeek 的 MLA 架构 原创 老彭坚持 产品经理修炼之道 2025 年 01 月 28 日 10:15 江西 DeepSeek 的 MLA(Multi-head Latent Attention,多头潜在注意力)架构 是一种优化…

7.抽象工厂(Abstract Factory)

抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…

旋钮屏设备物联网方案,ESP32-C3无线通信应用,助力设备智能化升级

在智能家居的浪潮中,旋钮屏以其独特的交互方式和便捷的操作体验,逐渐成为智能家电控制面板上的新宠儿。从智能冰箱、洗衣机到烤箱、空气炸锅等设备,旋钮屏的应用无处不在。 通过简单的旋转和按压操作,用户可以轻松调节温度、时间…

DRGDIP 2.0时代下基于PostgreSQL的成本管理实践与探索(上)

一、引言 1.1 研究背景与意义 在医疗领域的改革进程中, DRG/DIP 2.0 时代,医院成本管理的重要性愈发凸显。新的医保支付方式下,医院的收入不再单纯取决于医疗服务项目的数量,而是与病种的分组、费用标准以及成本控制紧密相关。这…

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

edu小程序挖掘严重支付逻辑漏洞

edu小程序挖掘严重支付逻辑漏洞 一、敏感信息泄露 打开购电小程序 这里需要输入姓名和学号,直接搜索引擎搜索即可得到,这就不用多说了,但是这里的手机号可以任意输入,只要用户没有绑定手机号这里我们输入自己的手机号抓包直接进…

安卓/鸿蒙模拟位置信息-Fake Location模拟虚拟定位打卡

一、软件下载安装 需要用到的软件就一个即:FakeLocation虚拟打卡定位 下载地址:FakeLocation虚拟打卡定位.app 二、手机端设置 打开手机设置-关于手机-版本信息-版本号,连续点击版本号直到出现已进入开发者模式字样,此时打开手…

(一)DeepSeek大模型安装部署-Ollama安装

大模型deepseek安装部署 (一)、安装ollama curl -fsSL https://ollama.com/install.sh | sh sudo systemctl start ollama sudo systemctl enable ollama sudo systemctl status ollama(二)、安装ollama遇到网络问题,请手动下载 ollama-linux-amd64.tgz curl -L …

LabVIEW2025中文版软件安装包、工具包、安装教程下载

下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述2条许可协议”,点击下一步 3、点击下一步,安装NI Packa…