KNN分类器、神经网络原理基础与代码实现

news2024/11/24 3:31:01

急切学习

两步:(1)归纳 (2)演绎

例如:贝叶斯分类器、决策树分类等等。

惰性学习

将训练数据建模过程推迟到需要对样本分类时(直观理解:死记硬背,记住所有的训练数据,仅仅当记录的属性值与一个训练记录完全匹配才与它分类)

实例:knn分类器

最近邻

使用“最近”的k个点(最近邻)进行分类

k-最近邻分类算法

1、令k是最近邻数目,D是训练样例的集合

2、for每个测试样例z=(x',y') do

3、计算z和每个样例(x,y)∈D之间的距离d(x',x)      (此处的计算开销很大)

4、选择离z最近的k个训练样例的集合Dz

5、 y^{'}=argmax \sum_{(x_{i},y_{i})\epsilon D_{z}}^{}I(v=y_{i})

                    v

6、end for

距离加权表决

       

 

 两种特殊的数据结构提前对训练集进行优化存储

  • Kd-Tree
  • Kd-Ball

k值的选择
1、如果k太小,则对噪声点敏感
2、如果k太大,邻域可能包含很多其他类的点

规范化

属性可能需要规范化,防止距离度量被具有很大值域的属性所左右。

 代码实现

 

支持向量机

 

线性不可分的解决方案:核变化将低维空间数据映射到高维空间。

感知机

最简单的神经网络的雏形:感知机

感知机通过有限次训练就能学会正确的行为。属于线性可分的分类器。

感知机没法解决异或这种线性不可分问题。所以为了解决线性不可分问题,我们将多个线性分类器进行组合,然后得到了多层感知机。对多层感知机进行进一步的延伸就获得了多层神经网络。

 

神经网络

神经网络模型比感知机模型更为复杂,输入层与输出层之间包含隐藏层

最经典: 误差反向传播(BP)神经网络

 从下往上会存在一个输入,由权值我们可以正向地获得一个输出值,这个输出又称作预测值, 误差会从上向下进行反向传播,总而言之,存在数据正向传播,误差反向传播。

 

 

 通常在BP神经网络中我们选择的激活函数为Sigmoid函数,其中Sigmoid函数的特点为处处可导。输入为加权求和的值。对于加权求和得到的数值,代入Sigmoid函数进行进一步的计算,假如这个数值大于0.5,那么该数值属于正类,假如小于0.5,则认为他属于负类。

 线性函数的梯度为0,那么在权值调整过程中没法使用上述减去学习率减去偏导数的方式调整权值,因此在线性函数中较少使用上述方法进行调整。

对于Sigmoid函数和双面正切函数均存在梯度消失问题,对此,我们为了解决激活函数中的梯度消失问题,我们还常会使用线性整流函数作为梯度函数。

 假如大于0,那么就会是一个直线,权值每次都可以通过这个常数进行调整,但是,假如输入是负值的话,偏导会是0,就会出现和前面的线性可分一样,没办法对权值进行下一步的调整。也就导致了神经元的死亡。所以当使用线性整流函数时,我们通常要设置一个较小的学习率。

BP神经网络的主要流程

 

 

 

BP神经网络的求解过程

首先使用各个神经元的数值与对应的权值相乘再相加,将数值加上偏置项,最终将对应的数值代入激活函数Sigmoid即可获得输出。 再将获得的第二层神经网络的数值作为第三层神经元的输入进行下一步计算,即可获得最后的结果。

 ​​​​​​误差计算​

预测输出Oj

真实输出Tj

Errj=Oj(1-Oj)(Tj-Oj)

 

 

 得到对应的误差后,再对误差进行下一步的反向传播。求解反向传播误差的公式

 

求解第四个神经元的误差

  

 下一步对权值进行下一步的调整,根据梯度下降法的原理可知

权值调整公式=初始权值+学习率*对应误差*对应y

对于学习率取值大小对迭代过程的影响:

假如学习率过大的话,可能能够很快地跳到收敛点, 但是不一定能够到达最优的收敛点,可能会在收敛点来回进行一个徘徊。没法达到最优的解;假如学习率太小的话,可能到达收敛点的步子很小,到达收敛点的次数要很多次才能够到达。

后向传播算法的推导 

 

后向传播BP网络注意事项

初始值选择

权值向量以及阀值的初始值应设定在一均匀分布的小范围内

初始值不能为零,否则性能曲面会趋向于鞍点

为什么鞍点不好,因为他在一个维度上面是最小值,而在另外一个维度上面又是最大值,不符合我们想要找的在所有维度都是最小值的情况。

初始值不能太大,否则远离优化点,导致性能曲面平坦,学习率很慢

训练样本输入次序

不同,也会造成不一样的学习结果

在每一次的学习循环中,输入向量输入网络的次序应使其不同

BP算法的学习过程的终止条件

权值向量的梯度<给定值
均方误差值<给定误差容限值

若其推广能力达到目标则予终止

可以结合上述各种方式

神经网络的主要特性:

1、普适性较强,精度较高
2、噪声敏感
3、训练非常耗时,但对目标分类较快

代码实现(多层感知机——MLP)

 

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

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

相关文章

Springboot集成ip2region离线IP地名映射-修订版

title: Springboot集成ip2region离线IP地名映射 date: 2020-12-16 11:15:34 categories: springboot description: Springboot集成ip2region离线IP地名映射 1. 背景2. 集成 2.1. 步骤2.2. 样例2.3. 响应实例DataBlock2.4. 响应实例RegionAddress 3. 打开浏览器4. 源码地址&…

HTML表单标签大全并附有详细代码+案例

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生 &#x1f43b;‍❄️个人主页&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;落798. &#x1f54a;️系列专栏&#xff1a;零基础学java ----- 重识c语言 ---- 计算机网络—【Spring技术内幕】…

YOLOv8目标检测算法

YOLOv8目标检测算法相较于前几代YOLO系列算法具有如下的几点优势&#xff1a; 更友好的安装/运行方式速度更快、准确率更高新的backbone&#xff0c;将YOLOv5中的C3更换为C2FYOLO系列第一次尝试使用anchor-free新的损失函数 YOLOv8简介 YOLOv8 是 Ultralytics 公司继 YOLOv5…

Android学习之路(2) 设置视图

一、设置视图宽高 ​ 在Android开发中&#xff0c;可以使用LayoutParams类来设置视图&#xff08;View&#xff09;的宽度和高度。LayoutParams是一个用于布局的参数类&#xff0c;用于指定视图在父容器中的位置和大小。 ​ 下面是设置视图宽度和高度的示例代码&#xff1a; …

【算法——双指针】LeetCode 283 移动零

题目描述&#xff1a; 思路&#xff1a; (双指针) O(n)O(n)O(n) 给定一个数组 nums&#xff0c;要求我们将所有的 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 如图所示&#xff0c;数组nums [0,1,0,3,12]&#xff0c;移动完成后变成nums [1,3,12,0,0] &am…

【探索SpringCloud】服务发现-Nacos使用

前言 在聊服务注册中心时&#xff0c;便提到了Nacos。这次便来认识一下。当然&#xff0c;这自然没有官方介绍那般详尽&#xff0c;权当是学习了解Nacos原理的一个过程吧。 Nacos简介 Nacos&#xff0c;全名&#xff1a;dynamic Naming And Configuration Service. 而这个名…

静态网页和动态网页区别

1&#xff0c;静态网页和动态网页有何区别 1) 更新和维护 静态网页内容一经发布到网站服务器上&#xff0c;无论是否有用户访问&#xff0c;这些网页内容都是保存在网站服务器上的。如果要修改网页的内容&#xff0c;就必须修改其源文件&#xff0c;然后重新上传到服务器上。…

SpringBoot框架

一、SpringBoot概述 1. 简介 springboot是spring家族中的一个全新框架&#xff0c;用来简化spring程序的创建和开发过程。在以往我们通过SpringMVCSpringMybatis框架进行开发的时候&#xff0c;我们需要配置web.xml&#xff0c;spring配置&#xff0c;mybatis配置&#xff0c;…

【算法训练营】队列合集(2) 2073. 买票需要的时间 || 面试题 03.04. 化栈为队 ||

&#x1f4cd;前言 本篇将学习queue的OJ题&#xff0c;每一题的标题都是超链接哦&#xff0c;我会将queue的基础知识放到最后供你参考~ &#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&am…

【LVS-NAT配置】

配置 node1&#xff1a;128&#xff08;客户端&#xff09; node2&#xff1a;135&#xff08;调度器&#xff09; RS&#xff1a; node3&#xff1a;130 node4&#xff1a;132 node2添加网络适配器&#xff08;仅主机模式&#xff09; [rootnode2 ~]# nmtui[rootnode2 ~]#…

棒球在国际上的流行·棒球1号位

棒球在国际上的流行 1. 棒球的起源与历史 棒球的起源源于美国。19世纪中叶&#xff0c;由于美国领土的扩张&#xff0c;当时的美国殖民地的印第安人将棒球类游戏&#xff0c;带到了当时的弗吉尼亚州的奥克兰。后来&#xff0c;棒球运动流传到了加利福尼亚州的圣迭戈。早期的棒…

Pyqt5使QTextEdit或QLabel等框框背景透明

设置&#xff1a;textEdit->setStyleSheet(“background-color: rgb(255, 255, 255, 60);”);

登录验证两种方案:token和cookie以及对比

cookie HTTP无状态&#xff0c;每次请求都要携带cookie&#xff0c;以帮助识别用户身份&#xff1b; 服务端也可以向客户端set-cookie&#xff0c;cookie大小限制为4kb&#xff1b; cookie默认有跨域限制&#xff0c;不跨域共享和传递&#xff0c;例如&#xff1a; 现代浏览…

7.4.tensorRT高级(2)-使用RAII接口模式对代码进行有效封装

目录 前言1. RAII接口模式2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-使用 RAII 接口模式对…

实战:ros机器人运行不稳定,也许是use_sim_time没有设置对

搞机环境&#xff0c;ubuntu 20.04 ros2 版本 foxy ros机器人搞了很久了&#xff0c;但是有一个初学者很容易忽略的参数&#xff1a;use_sim_time&#xff0c;设置不对&#xff0c;会让程序出跑起来有莫名其妙的问题。 use_sim_time &#xff1a;直白翻译&#xff1a; 用_仿…

一文读懂HTML

文章目录 HTML的历史HTML的作用HTML的基本语言 HTML的历史 HTML&#xff08;HyperText Markup Language&#xff09;的历史可以追溯到20世纪90年代早期&#xff0c;它是互联网发展的重要里程碑之一。以下是HTML的历史概述&#xff1a; 早期阶段&#xff08;1980年代末 - 1990年…

如何撰写一份清晰有效的说明文档

如何撰写一份清晰有效的说明文档 文章目录 导语1.明确读者群体&#xff1a;2.明确文档目的&#xff1a;3.提供清晰的结构&#xff1a;4.使用简洁明了的语言&#xff1a;5.提供具体的示例&#xff1a;6.注意文档格式和风格&#xff1a;7.接受反馈并更新文档&#xff1a;结语 导语…

JZ39 数组中出现次数超过一半的数字

目录 一、题目 二、代码 一、题目 数组中出现次数超过一半的数字_牛客题霸_牛客网 二、代码 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param numbers int整型vector * return int…

Spring Boot单元测试与Mybatis单表增删改查

目录 1. Spring Boot单元测试 1.1 什么是单元测试? 1.2 单元测试有哪些好处? 1.3 Spring Boot 单元测试使用 单元测试的实现步骤 1. 生成单元测试类 2. 添加单元测试代码 简单的断言说明 2. Mybatis 单表增删改查 2.1 单表查询 2.2 参数占位符 ${} 和 #{} ${} 和 …

LeetCode 周赛上分之旅 #39 结合中心扩展的单调栈贪心问题

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…