从零开始人工智能Matlab案例-KNN的二维数据分类
基于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); % 设置透明度


![]()
代码说明与算法原理
-
数据生成:
-
使用
mvnrnd生成两个二维高斯分布点集,分别代表两类数据。 -
类别1中心在
(1,2),类别2中心在(4,5),协方差矩阵保证数据分散。
-
-
KNN训练:
-
fitcknn函数指定NumNeighbors=3,即选择最近的3个邻居投票决定类别。 -
距离默认使用欧氏距离。
-
-
决策边界可视化:
-
生成覆盖数据范围的网格点,预测每个点的类别。
-
使用
imagesc绘制分类区域,直观展示模型如何划分特征空间。
-
运行结果
-
原始数据分布:红点和蓝点分别代表两类数据,明显可分。
-
决策边界图:背景颜色显示分类区域,测试准确率100%。
相关文章:
从零开始人工智能Matlab案例-KNN的二维数据分类
基于K最近邻(K-Nearest Neighbors, KNN)算法的二分类案例,包含完整MATLAB代码、算法原理和核心思想说明。此案例使用合成数据集,无需复杂数据预处理,适合快速理解。 案例:基于KNN的二维数据分类 目标&…...
90.子集||
要求所有可能的子集,不能重复,因此对于相同的数字,要考虑去重,去重的方式就是通过排序,排序后相同的数字相邻,这样进行实现迭代时,若没有选择上一个数,,其当前数字与上一…...
4 HBase 的高级 shell 管理命令
4 HBase 的高级 shell 管理命令 1.status 例如:显示服务器状态 hbase(main):058:0> status node012.whoami 显示 HBase 当前用户,例如: hbase> whoami3.list 显示当前所有的表 hbase> list4.count 统计指定表的记录数,…...
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…...
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.响应正文…...
基于 docker 的mysql 5.7 主主集群搭建
创建挂载目录和配置文件 主节点1 mkdir -p /mysql_master_1/mysql/log mkdir -p /mysql_master_1/mysql/data mkdir -p /mysql_master_1/mysql/conf vim /mysql_master_1/mysql/conf/my.cnf[mysqld] datadir/var/lib/mysql #MySQL 数据库文件存放路径 server_id 1 #指定数据…...
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,多头潜在注意力)架构 是一种优化…...
文本分析NLP的常用工具和特点
1)非上下文感知型文本分析工具和特点 特性VADERTextBlob适合文本类型短文本、非正式语言(如评论、推文)中等长度、正式文本情感强度分析支持(正面、负面、中性)支持(极行、主观性)处理表情符号…...
AI协助探索AI新构型自动化创新的技术实现
一、AI自进化架构的核心范式 1. 元代码生成与模块化重构 - 代码级自编程:基于神经架构搜索的强化学习框架,AI可通过生成元代码模板(框架的抽象层定义、神经元结点-网络拓扑态的编码抽象定义)自动组合功能模块。例如࿰…...
7.抽象工厂(Abstract Factory)
抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…...
Android-音频采集
前言 音视频这块,首先是要先采集音频。今天我们就来深入探讨一下 Android 音频采集的两大类型:Mic 音频采集和系统音频采集。 Mic音频采集 Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。…...
旋钮屏设备物联网方案,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…...
Rust 再谈泛型
第一章:Trait约束 - 变形许可证系统 1.1 正面案例:持证上岗的变形金刚 trait Transform {fn transform(&self) -> String; }struct Car {model: String }impl Transform for Car {fn transform(&self) -> String {format!("{}变形为…...
chrome插件模板;使用 React 18 和 Webpack 5 的 Chrome 扩展样板
一、软件介绍(文末提供下载) 这是一个基本的 Chrome 扩展样板,可帮助您编写模块化和现代的 Javascript 代码,轻松加载 CSS,并在代码更改时自动重新加载浏览器。 github地址:https://github.com/lxieyang/c…...
