k-NN 剪辑近邻法

       本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记

      AI学习笔记(10)---《k-NN 剪辑近邻法

k-NN 剪辑近邻法

目录

1. 前言

2.相关知识

2.1最邻近法决策规则

2.2剪辑最近邻算法基本原理

3.K-means 算法原理

3.1k 最近邻法( k-NN )

3.2重复剪辑最近邻法

4.编程实现

4.1最近邻法MATLAB代码

4.2 剪辑最近邻法MATLAB代码

4.3 测试输入


1. 前言

        理解并掌握基本最邻近法( k-NN )的算法思想以及基本过程,并实现一个 k-NN 算法的函数。

        理解并掌握剪辑最近邻算法思想以及基本过程,并实现一个剪辑最近邻算法的函数。


2.相关知识

2.1最邻近法决策规则

2.2剪辑最近邻算法基本原理

        这种方法的思想是,在最近邻算法的基础上,理清两类间的边界,去掉类别混杂的样本,使两类别的边界更清晰。这样,不仅能够减少最近邻法判别类别的样本数量从而提升分类效率,还在理论上明显好于一般的最近邻法。

         可以证明,经过剪辑的最近邻法的渐进误判概率接近 Bayes 误判概率。        


3.K-means 算法原理

3.1k 最近邻法( k-NN )

        由于上述方法只根据离待识别模式最近的一个样本的类别而决定其类别,通常称其为最近邻法或 1-NN 法。

3.2重复剪辑最近邻法

        只要样本足够多,就可以重复地执行剪辑程序,以进一步提高分类性能。这里给出一种称为 MULTIEDIT 的使用算法:


4.编程实现

4.1最近邻法MATLAB代码

function [rm] = step1_mission(samples, labels, k, x)[m,n] = size(samples); % 获取样本矩阵 samples 的维度,m 为样本数量,n 为特征数量E = zeros(1,m); % 初始化长度为 m 的零向量,用于存储距离值c = 0; % 初始化类别计数器for i=1:m % 遍历每一个样本E(i) = norm(samples(i,:)-x)/sqrt(n); % 计算每个样本与输入向量 x 的欧氏距离,并标准化c = max(c,labels(i)); % 更新类别计数器,获取样本中最大的类别标签endkc = zeros(c,1); % 初始化长度为 c 的零向量,用于存储每个类别的计数for i=1:k % 选取前 k 个最近邻[b,j] = min(E); % 找到距离最小的样本及其索引kc(labels(j)) = kc(labels(j)) + 1; % 对应类别计数加一E(j) = []; % 删除已选择的最近邻的距离值,防止重复选择end[~,rm] = max(kc); % 找到计数最多的类别作为最终分类结果,并返回其标签值   end

4.2 剪辑最近邻法MATLAB代码

function [samples, labels] = step2_ans(samples, labels, s, k)while 1==1 % 无限循环,直到满足终止条件[m,n] = size(samples); % 获取样本矩阵 samples 的维度,m 为样本数量,n 为特征数量stride = ceil(m/s); % 计算每个子集的步长,即每个子集的样本数量edi = zeros(1,m); % 初始化长度为 m 的零向量,用于标记需要编辑的样本head = zeros(1,s); % 初始化长度为 s 的零向量,用于存储每个子集的起始索引tail = zeros(1,s); % 初始化长度为 s 的零向量,用于存储每个子集的结束索引for i=1:shead(i)=(i-1)*stride+1; % 计算每个子集的起始索引tail(i)=min(head(i)+stride-1,m); % 计算每个子集的结束索引endfor i=1:s % 遍历每个子集eh = head(mod(i,s)+1); % 获取下一个子集的起始索引et = tail(mod(i,s)+1); % 获取下一个子集的结束索引for j=head(i):tail(i) % 遍历当前子集中的每个样本y = step1_ans_func(samples(eh:et,:),labels(eh:et),k,samples(j)); % 调用 step1_ans_func 函数预测样本 j 的标签if abs(y-labels(j)) > 10e-6 % 判断预测标签与真实标签是否相差过大edi(j) = 1; % 标记需要编辑的样本endendendif max(edi)<1 % 如果没有需要编辑的样本,跳出循环breakendedi_idx = find(edi==0); % 找出所有未标记的样本索引samples = samples(edi_idx,:); % 更新样本矩阵,只保留未标记的样本labels = labels(edi_idx); % 更新标签向量,只保留未标记的样本对应的标签size(samples); % 获取更新后的样本矩阵的大小end
endfunction [rm] = step1_ans_func(samples, labels, k, x)[m,n] = size(samples); % 获取样本矩阵 samples 的维度,m 为样本数量,n 为特征数量E = zeros(1,m); % 初始化长度为 m 的零向量,用于存储距离值c = 0; % 初始化类别计数器for i=1:m % 遍历每一个样本E(i) = norm(samples(i,:)-x)/sqrt(n); % 计算每个样本与输入向量 x 的欧氏距离,并标准化c = max(c,labels(i)); % 更新类别计数器,获取样本中最大的类别标签endkc = zeros(c,1); % 初始化长度为 c 的零向量,用于存储每个类别的计数for i=1:k % 选取前 k 个最近邻[b,j] = min(E); % 找到距离最小的样本及其索引kc(labels(j)) = kc(labels(j)) + 1; % 对应类别计数加一E(j) = []; % 删除已选择的最近邻的距离值,防止重复选择end[~,rm] = max(kc); % 找到计数最多的类别作为最终分类结果,并返回其标签值   
end

4.3 测试输入

MATLAB终端输入下面指令

step1_mission(samples, labels, k, x)

samples = [-7.82 -4.58 -3.97; -6.68 3.16 2.71; 4.36 -2.91 2.09; 6.72 0.88 2.80; -8.64 3.06 3.50; -6.87 0.57 -5.45; 4.47 -2.62 5.76; 6.73 -2.01 4.18; -7.71 2.34 -6.33; -6.91 -0.49 -5.68; 6.18 2.81 5.82; 6.72 -0.93 -4.04; -6.25 -0.26 0.56; -6.94 -1.22 1.13; 8.09 0.20 2.25; 6.81 0.17 -4.15; -5.19 4.24 4.04; -6.38 -1.74 1.43; 4.08 1.30 5.33; 6.27 0.93 -2.78];
labels = [1    2    2    2   1   1    2    2   1   1    2    2   1   1    2    2    2   1    2    2];disp('task1');
rm = step1_mission(samples(1:20,:),labels(1:20),1,[10 10 10])disp('task2');
rm = step1_mission(samples(1:20,:),labels(1:20),3,[10 10 10])disp('task3');
rm = step1_mission(samples(1:20,:),labels(1:20),5,[10 10 10])disp('task4');
rm = step1_mission(samples(1:20,:),labels(1:20),7,[10 10 10])disp('task5');
rm = step1_mission(samples(1:20,:),labels(1:20),9,[10 10 10])

 测试step2_ans(samples, labels, s, k)

randn('state',1);
warning off;num = 200;
R1 = [5 0; 0 1];
R2 = [10 0; 0 25];
u1 = [-3 0];
u2 = [5 0];
Y1 = multivrandn(u1,R1,num,1);
Y2 = multivrandn(u2,R2,num,2);
L1 = ones(1,num);
L2 = L1 * 2;Y = [Y1; Y2];
L = [L1 L2];
size(Y);
size(L);randIndex = randperm(size(Y,1));Y = Y(randIndex,:);
L = L(randIndex);subplot(211);
plot(Y1(:,1),Y1(:,2),'*');
hold on;
plot(Y2(:,1),Y2(:,2),'o');[ry, rl]  = step2_mission(Y, L, 4, 5);
idx1 = find(rl==1);
idx2 = find(rl==2);
size(ry);
ry1 = ry(idx1,:);
ry2 = ry(idx2,:);
subplot(212);
plot(ry1(:,1),ry1(:,2),'*');
hold on;
plot(ry2(:,1),ry2(:,2),'o');saveas(1,'./result/myfig.png');[ans_ry, ans_rl]  = step2_ans(Y, L, 4, 5);
ans_idx1 = find(ans_rl==1);
ans_idx2 = find(ans_rl==2);
size(ans_ry);
ans_ry1 = ans_ry(ans_idx1,:);
ans_ry2 = ans_ry(ans_idx2,:);
subplot(212);
plot(ans_ry1(:,1),ans_ry1(:,2),'*');
hold on;
plot(ans_ry2(:,1),ans_ry2(:,2),'o');saveas(1,'./answer/ans.png');diff = sum(ans_rl-rl)+sum(sum(ans_ry-ry));
if diff==0 disp('OK');
elsedisp('Not Equal!')
end

     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

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

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

相关文章

计算机缺失OpenCL.dll怎么办,OpenCL.dll丢失的多种解决方法

在使用电脑的过程中&#xff0c;我们经常会遇到一些开机弹窗问题。其中&#xff0c;开机弹窗找不到OpenCL.dll是一种常见的情况。本文将详细介绍开机弹窗找不到OpenCL.dll的原因分析、解决方法以及预防措辞&#xff0c;帮助大家更好地解决这一问题。 一&#xff0c;了解OpenCL.…

Swift开发——简单App设计

App的界面设计需要具有大量的图像并花费大量的时间,这样的应用不方便学习和交流,这里重点介绍SwiftUI界面元素的用法,通过简单App设计过程的讲解,展示图形用户界面应用程序的设计方法。 01、简单App设计 按照9.1节工程MyCh0901的创建方法,创建一个新的工程MyCh0902,此时工…

Yolov8可视化界面使用说明,含代码

⭐⭐ YOLOv8改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ​ ⭐⭐ YOLOv8可视化界面如下 使用需要安装opencv-python、torch、numpy及PySide6(python版本>3.9) pip install PySide6 pip install numpy pip install opencv-python 使用说明 运行下方代码&#xf…

上市公司银行专利申请数据集(2003-2022年)

数据简介&#xff1a;上市商业银行的专利申请数据是可作为金融科技创新水平的关键指标&#xff0c;这些数据反映了银行在金融技术领域的创新能力。发明专利因其创新性、技术深度和行业代表性&#xff0c;被赋予了特别的重视。遵循郭晔等人(2022)的研究方法&#xff0c;使用国家…

设置日历程序

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 设置日历 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void dateTimePicker1_ValueChanged(object sender, EventArgs e){richTextBox1.Text dateTimePicker1.T…

【教程】安装DGL/PyG图神经网络编程环境

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 关于cuda的安装&#xff0c;可以看这个&#xff1a; 【教程】保姆级安装NVIDIA CUDA、CUDNN环境全纪录解决SSH一段时间自动断开报Destination Host Un…

大数据------JavaWeb------MyBatis(完整知识点汇总)

MyBatis MyBatis简介 定义 它是一款优秀的持久层框架&#xff0c;用于简化JDBC开发它原来是Apache的一个开源项目iBatis&#xff0c;后来改名为MyBatis中文官网&#xff1a;https://mybatis.org/mybatis-3/zh_CN/index.html JaveEE三层架构 表现层&#xff08;做页面展示&…

Coldrage Dagger

剃刀高地【寒怒匕首 Coldrage Dagger】 2020.11.26.剃刀高地刷【寒怒匕首】-1_网络游戏热门视频 2020.11.26.剃刀高地刷【寒怒匕首】-2_网络游戏热门视频

台式机通过网线直连笔记本,台式机通过笔记本上网【解决台式机没有网络的问题】

一、总览 将笔记本电脑和台式机使用网线连接起来。在笔记本电脑上打开网络和共享中心&#xff0c;进入“更改适配器设置”选项&#xff0c;找到当前连接的网卡&#xff0c;右键点击选择“属性”。在网卡属性中&#xff0c;找到“共享”选项卡&#xff0c;勾选“允许其他网络用…

湖北大学2024年成人高考函授报名专升本法学专业介绍

湖北大学&#xff0c;这所承载着深厚文化底蕴和学术积淀的高等学府&#xff0c;始终致力于为广大有志之士提供多元化的学习机会。在时代的浪潮中&#xff0c;为了满足社会对于高层次法律人才的需求&#xff0c;湖北大学特别推出了成人高等继续教育项目&#xff0c;为广大在职人…

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码

黄历工具网/万年历/财神方位/日历/佛历/道历/24节气/PHP网站源码 演示地址&#xff1a; https://hl.caohongji.com/ 手机端地址&#xff1a; https://mhl.caohongji.com/ 客服&#xff1a; kkmp326 源码说明&#xff1a; 1、系统内的黄历宜忌、农历、日历、佛历、道…

前端基础--Vue2

前端技术发展史(了解) 1.前端历史 1.1.静态网页 1990 html 1.2.异步刷新-操作dom 1995 javascript 1.3.动态网站 Asp/jsp&#xff08;java&#xff09;,php等&#xff0c;后台臃肿 1.4.Ajax成为主流 异步请求 1.5.Html5 被认为是互联网的核心技术之一。HTML产生于19…

Docker之jekins的安装

jekins官网地址&#xff1a;Jenkins Plugins &#xff08;https://plugins.jenkins.io/&#xff09; jekins 的docker 官方地址&#xff1a;https://hub.docker.com/r/jenkins/jenkins jekins 的docker 允许命令文档地址&#xff1a; docker/README.md at master jenkinsci…

学分制系统 WebService_PantoSchool SQL注入致RCE漏洞复现

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发,是基于对职业教育特点和需求的深入理解,结合教育部相关文件精神,并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法,方便学校根据自身教学改革特点、信息化建设进程情况选择、…

Kubernetes之Scheduler详解

本文尝试从Kubernetes Scheduler的功能介绍、交互逻辑、伪代码实现、最佳实践、自定义Scheduler举例及其历史演进6个方面进行详细阐述。希望对您有所帮助&#xff01; 一、Kubernetes Scheduler 功能 Kubernetes Scheduler 是 Kubernetes 集群的核心组件之一&#xff0c;负责…

Qwen2本地web Demo

Qwen2的web搭建(streamlit) 千问2前段时间发布了&#xff0c;个人觉得千问系列是我用过最好的中文开源大模型&#xff0c;所以这里基于streamlit进行一个千问2的web搭建&#xff0c;来进行模型的测试 一、硬件要求 该文档中使用的千问模型为7B-Instruct&#xff0c;需要5g以…

ROT5、ROT13、ROT18、ROT47全系列加解密小程序

ROT5、ROT13、ROT18、ROT47全系列加解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。自己编了一个关于ROT全系列的加、解密小程序。 ​ ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性&a…

【铂电阻测温】如何保证热电阻采集的可靠性

TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 参考链接 【…

领夹麦克风什么样的好,麦克风品牌排行榜前十名,无线麦克风推荐

​在人人可做自媒体的时代&#xff0c;众多普通人加入自媒体。对拍视频的自媒体人&#xff0c;好内容是基础&#xff0c;好设备是保障。想提升视频音质需专业无线麦克风。现无线麦克风品牌多&#xff0c;如何少花钱买高性价比产品是问题。作为资深自媒体人&#xff0c;我用过的…

电子看板,实现生产现场数字化管理

如何提高生产效率、优化资源配置、保障产品质量&#xff0c;成为企业在激烈竞争中脱颖而出的关键。电子看板作为一种创新的生产管理工具&#xff0c;为实现生产现场数字化管理提供了有力支持。电子看板是生产现场的“智能窗口”&#xff0c;它能够实时、准确地展示各类关键信息…