R机器学习:神经网络算法的理解与实操,实例解析

神经网络算法是一种模仿生物神经网络(尤其是人脑)结构和功能的算法。它由大量相互连接的节点(称为神经元)组成,这些神经元组织成层,通过传递信号来处理信息。神经网络算法在机器学习、人工智能等领域中扮演着至关重要的角色,尤其擅长处理复杂的模式识别、分类和预测问题。今天给大家介绍下这个算法。

回忆一下高中生物知识,高中的时候我们学过生物神经元:

生物神经元通过树突接收信号,通过轴突发送信号。神经元之间通过突触连接,信号的强弱由突触的“强度”控制。在人工神经网络中,人工神经元模拟了生物神经元的工作原理。它也接收多个输入,每个输入与一个权重相乘,最后通过激活函数生成输出。

整个过程其实是类似的:在生物神经元中,信号由树突接收,经过突触传递到下一个神经元。而在人工神经元中,输入信号经过加权和激活函数后生成输出信号,类似地传递到下一层神经元,类比如图示:

神经网络的基本组成包括:

  • 神经元(Neuron): 神经网络的基本单元,也称为节点。每个神经元接收来自其他神经元的输入信号,通过加权求和并应用激活函数进行处理,然后将输出信号传递给其他神经元。
  • 连接(Connection): 神经元之间的连接,每个连接都有一个权重(Weight),表示连接的强度。权重决定了输入信号对输出信号的影响程度。
  • 层(Layer): 神经元按层组织,常见的层包括: 输入层(Input Layer): 接收外部输入信号。 隐藏层(Hidden Layer): 位于输入层和输出层之间,负责对输入信号进行复杂的处理。一个神经网络可以有多个隐藏层,构成深度神经网络。 输出层(Output Layer): 输出最终的计算结果。
  • 激活函数(Activation Function): 应用于神经元输出的函数,引入非线性特性,使神经网络能够处理非线性问题。常用的激活函数包括 Sigmoid、ReLU、Tanh 等。

神经网络层的图示如下:

就是这么个意思,大家千万不要被神经网络这么高级的名词吓到,其实基本构成还是很简单的。

神经网络的工作原理:

我们依然先来回忆一下生物大脑的学习:大脑通过突触可塑性学习和调整神经元之间的连接强度。通过反复的学习和经验积累,突触的强度会发生变化,从而影响信息的处理方式。

神经网络的学习(反向传播)也是这样:神经网络的学习过程就是通过反向传播算法来调整神经元之间的权重。神经网络会根据预测结果和实际结果之间的误差,调整连接权重,以减少预测误差。

类比解释一下就是:在大脑中,学习是通过调整突触强度来改变神经元之间的连接。在神经网络中,学习是通过调整权重来优化模型的输出。这个权重调整的过程就是训练的过程,调整的过程也涉及到一些优化算法比如梯度下降,但是你都不需要去记,你只需要记住神经网络就是输入数据:数据从输入层进入网络,网络又可分为好几层。输入的时候每个输入有一个“权重”(类似重要性)和一个“偏置”(调整值)。然后通过激活函数对计算结果应用一个数学函数,让输出更灵活,比如让它可以表示“非线性关系”。最后输出结果:经过层层计算,得到预测结果。

神经网络通过以下两个主要过程进行工作:

  • 前向传播(Forward Propagation): 输入信号从输入层开始,逐层传递到隐藏层,最终到达输出层。在每个神经元中,输入信号与连接权重相乘并求和,然后应用激活函数得到输出。
  • 反向传播(Backpropagation): 将输出结果与实际值之间的误差反向传播回网络,根据误差调整连接权重,使网络的输出更接近实际值。这个过程通常使用梯度下降等优化算法。

神经网络又可以可以分为多种类型,常见的包括:

  • 前馈神经网络(Feedforward Neural Network): 信息单向传递,没有循环或反馈连接。常用于分类和回归问题。
  • 循环神经网络(Recurrent Neural Network,RNN): 具有循环连接,可以处理序列数据,例如文本、语音等。
  • 卷积神经网络(Convolutional Neural Network,CNN): 专门用于处理图像和视频等具有空间结构的数据。
  • 自编码器(Autoencoder): 用于数据降维、特征提取等。
  • 生成对抗网络(Generative Adversarial Network,GAN): 用于生成新的数据样本。

实操演示

我们依然是用iris数据集来做一个简单的神经网络分类模型,先用neuralnet 包来做,具体代码如下:

model <- neuralnet(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris, hidden = c(5),      # 隐藏层的神经元数量linear.output = FALSE)  # 因为这是分类任务,不需要线性输出
summary(model)
plot(model)

上面代码中需要注意hidden (hidden = c(5))这个参数:

  • hidden指定隐藏层的结构。可以通过调整这个参数来控制模型的复杂度,增加隐藏层数量或神经元数量。c(5)表示网络有一个隐藏层,且该层包含5个神经元,输出如下:

图中每条箭头线上标注的数字就是连接权重,表示输入信号对目标神经元的影响大小。例如,从Petal.Width到某隐藏层神经元的一条箭头上标注的数字4.93165,表示Petal.Width的输入被放大了4.93165倍后传递到该隐藏层神经元。

每个隐藏层神经元和输出层神经元都有一个偏置节点(图中顶部标记为1的圆圈)。偏置项通过权重(蓝色箭头上的数字)调节网络的输出,从而增加模型的灵活性。

随意瞅一下该模型分类的准确性哦。只能说真牛,是比前两篇文章中介绍的算法都牛的哦:

nnet 包也可以用来做神经网络分析,但是只能做单层神经网络,有局限性,代码如下:结果就不贴出来了:

library(nnet)
# 训练一个包含一个隐藏层的多层感知器
nn <- nnet(iris[, 1:4], class.ind(iris$Species), size = 3, softmax = TRUE)
predictions <- predict(nn, iris[, 1:4], type = "class")
table(predictions, iris$Species)
plotnet(nn)

运行代码后也可以出图,但这个图有点呆哦,不太好看的样子:

神经网络的可视化

再单开一块给大家介绍下模型可视化的技巧,对于neuralnet生成的神经网络模型我们可以用plot.neuralnet函数来出图,有很多的参数可以调节,例如我想将输入节点颜色设置为蓝色,隐藏层节点颜色设置为绿色,输出层节点颜色设置为红色,字体大小调整为10我就可以写出如下代码:

plot(nn_model,rep = "best",      # 显示最佳模型col.entry = "blue",# 输入节点颜色col.hidden = "green", # 隐藏层节点颜色col.out = "red",   # 输出层节点颜色show.weights = TRUE, # 显示权重值fontsize = 10)     # 调整字体大小

运行代码后输出如下,其余的参数也都可以调整试试:

同样的我们用nnet包做出模型后也可以使用plotnet函数输出模型图,也有很多可以调整的参数,circle_col 参数设置输入层和其余层的节点颜色。circle_cex 控制节点的大小, cex_text 和 cex_val 设置节点标签和权重文字的字体大小,比如我想让输入层为蓝色,其余层为绿色,并且设置文字和节点圈圈的大小我就可以写出如下代码:

plotnet(nn, alpha = 0.8, circle_col = list("blue", "red"), circle_cex = 3, cex_text = 1, cex_val = 0.6, # pos_col = "darkgreen", # neg_col = "red", max_sp = F)

运行后输出如下,大家也可自己调整参数看看哦:

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

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

相关文章

【C++】B2092 开关灯

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述和解析题目描述输入格式输出格式解析 &#x1f4af;实现代码对比&#xff1a;我的做法和老师的做法我的代码实现代码分析优点问题 老师的代码实现代码分析 &#x…

【PS不常见教程】实操篇之通道抠图-抠黑色背景的图片

观前小提示&#xff1a;本文内容为我原创成果&#xff0c;若您需要转载或引用其中图片或文字内容&#xff0c;请记得标注来源是“璞子的家”哦&#xff0c;感谢您的尊重&#xff0c;理解与支持&#xff0c;谢谢啦&#xff01; 如果没看过之前的文章&#xff0c;可以先看之前的两…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器&#xff0c;递增的不太行&#xff0c;控制的不够准确&#xff0c;其次在大于10微秒的延时是非常准确的&#xff0c;小于的话&#xff0c;就没有那没准&#xff0c;但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

【Cesium】三、实现开场动画效果

文章目录 实现效果实现方法实现代码组件化 实现效果 实现方法 Cesium官方提供了Camera的flyTo方法实现了飞向目的地的动画效果。 官方API&#xff1a;传送门 这里只需要用到目的地&#xff08;destination&#xff09;和持续时间&#xff08;duration&#xff09;这两个参数…

【游戏设计原理】47 - 超游戏思维

对于这条原理&#xff0c;我首先想到的是开放世界&#xff0c;或者探索性游戏&#xff0c;这是最能包容各类玩家的游戏类型。这类游戏定义了基本规则&#xff0c;玩家的可操作性很强。就像上图里的沙池一样&#xff0c;里面有滑梯&#xff0c;是规则性比较明确的&#xff0c;而…

DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?

最近&#xff0c;DeepSeek v3&#xff08;一个MoE模型&#xff0c;拥有671B参数&#xff0c;其中37B参数被激活&#xff09;模型全球爆火。 作为一款能与Claude 3.5 Sonnet&#xff0c;GPT-4o等模型匹敌的开源模型DeepSeek v3不仅将其算法开源&#xff0c;还放出一份扎实的技术…

Kbuild学习知识点

1.Kbuild本质&#xff1a;一个可扩展、可配置的Makefile框架&#xff0c;递归式Makefile&#xff0c;菜单式配置。 2.Kbuild构成&#xff1a; Makefile:顶层目录下的Makefile.config:内核的配置文件arch/S(ARCH)/Makefile:跟平台架构相关的Makefilescripts/Makefile.*:通用编…

C++和OpenGL实现3D游戏编程【连载19】——着色器光照初步(平行光和光照贴图)(附源码)

1、本节要实现的内容 我们在前期的教程中,讨论了在即时渲染模式下的光照内容。但在我们后期使用着色器的核心模式下,会经常在着色器中使光照,我们这里就讨论一下着色器光照效果,以及光照贴图效果,同时这里知识会为后期的更多光照效果做一些铺垫。本节我们首先讨论冯氏光照…

后端java开发路由接口并部署服务器(四)

一、安装IntelliJ IDEA&#xff0c;安装包下载 1、官网下载 2、网盘资源 安装包下载完成后进行傻瓜式下一步安装就可以了 打开IntelliJ IDEA&#xff0c;输入网盘资源文件内容 三、汉化处理 插件搜索chinese&#xff0c;就会找到相应的插件安装重启软件即可 四、新建后端j…

一文理解ssh,ssl协议以及应用

在使用基于密钥的认证方式的时候&#xff0c;私钥的位置一定要符合远程服务器规定的位置&#xff0c;否则找不到私钥的位置会导致建立ssh连接失败 SSH 全称是 “Secure Shell”&#xff0c;即安全外壳协议。 它是一种网络协议&#xff0c;用于在不安全的网络中安全地进行远程登…

通往O1开源之路

“Scaling of Search and Learning: A Roadmap to Reproduce o1 from Reinforcement Learning Perspective”由复旦大学和上海人工智能实验室的研究者撰写。该论文从强化学习视角出发&#xff0c;深入分析了实现类似OpenAI o1模型性能的路线图&#xff0c;聚焦于策略初始化、奖…

FPGA、STM32、ESP32、RP2040等5大板卡,结合AI,更突出模拟+数字+控制+算法

板卡选择困难症了&#xff1f;如果你也想玩FPGA、STM32、ESP32、RP2040相关的板卡&#xff0c;不如看看以下几款板卡&#xff0c;如果正巧碰上能实现你想要做的项目呢~ 01 小脚丫FPGA STEP BaseBoard V4.0套件 STEP BaseBoard V4.0是第4代小脚丫FPGA扩展底板&#xff08;点击了…

python进阶06:MySQL

课后大总结 Day1 一、数据库命令总结 1.连接数据库 连接数据库进入mysql安装目录打开bin文件夹&#xff0c;输入cmd(此命令后无分号)mysql.exe -u root -ppassword命令后输入密码:root 设置密码set passwordpassword("root123"); 查看所有数据库show databases; …

lec7-路由与路由器

lec7-路由与路由器 1. 路由器硬件 路由器的硬件部分&#xff1a; 断电失去&#xff1a; RAM断电不失去&#xff1a;NVRAM&#xff0c; Flash&#xff0c; ROMinterface也算是一部分 路由器是特殊组件的计算机 console 口进行具体的调试 辅助口&#xff08;Auxiliary&…

HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级

注&#xff1a;本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常&#xff0c;重传。 篇 1&#xff1a;Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢复、升级教程 开机黑屏&#xff0c…

代码随想录算法训练营第五十天|图论基础|深度优先搜索理论基础|KM98.所有可达路径|广度优先搜索理论基础

图论基础 1、图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 2、图的种类 整体上一般分为有向图和无向图&#xff1b; 有向图是指图中边是有方向的…

《Vue3实战教程》40:Vue3安全

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 安全​ 报告漏洞​ 当一个漏洞被上报时&#xff0c;它会立刻成为我们最关心的问题&#xff0c;会有全职的贡献者暂时搁置其他所有任务来解决这个问题。如需报告漏洞&#xff0c;请发送电子邮件至 securityvuejs.org。…

2025年1月4日蜻蜓q旗舰版st完整开源·包含前后端所有源文件·开源可商用可二开·优雅草科技·优雅草kir|优雅草星星|优雅草银满|优雅草undefined

2025年1月4日蜻蜓q旗舰版st完整开源包含前后端所有源文件开源可商用可二开优雅草科技优雅草kir|优雅草星星|优雅草银满|优雅草undefined 产品介绍&#xff1a; 本产品主要贡献者优雅草科技优雅草kir|优雅草星星|优雅草银满|优雅草undefined-青史留名&#xff0c;时光如川浪淘…

计算机网络练习题

学习这么多啦&#xff0c;那就简单写几个选择题巩固一下吧&#xff01; 1. 在IPv4分组各字段中&#xff0c;以下最适合携带隐藏信息的是&#xff08;D&#xff09; A、源IP地址 B、版本 C、TTL D、标识 2. OSI 参考模型中&#xff0c;数据链路层的主要功能是&#xff08;…

【UE5 C++课程系列笔记】21——弱指针的简单使用

目录 概念 声明和初始化 转换为共享指针 打破循环引用 弱指针使用警告 概念 在UE C 中&#xff0c;弱指针&#xff08;TWeakPtr &#xff09;也是一种智能指针类型&#xff0c;主要用于解决循环引用问题以及在不需要强引用保证对象始终有效的场景下&#xff0c;提供一种可…