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.mzph.cn/pingmian/66053.shtml

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

相关文章

wsl linux CUDA安装、卸载、清理、版本降级、升级过程详解

目录 1 前言2 卸载与重新安装2.1 列出所有与 CUDA 相关的包2.2 卸载 CUDA2.3 删除残留文件2.4 移除 CUDA 仓库包2.5 删除仓库目录2.6 移除所有 CUDA 相关包2.7 删除 CUDA 的优先级配置文件2.8 查看所有 APT 源中的 CUDA 条目2.9 移除或禁用不需要的 CUDA 仓库源2.10 删除所有 A…

牛客网刷题 ——C语言初阶——OR76 两个整数二进制位不同个数

1. 牛客网题目&#xff1a;OR76 两个整数二进制位不同个数 牛客网OJ链接 描述&#xff1a; 输入两个整数&#xff0c;求两个整数二进制格式有多少个位不同 输入描述&#xff1a;两个整数 输出描述&#xff1a;二进制不同位的个数 示例1 输入&#xff1a;22 33 输出&#xff1a…

【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理

使用AWS SDK碰到的错误&#xff0c;其实很简单&#xff0c;要装个扩展库 保持如下 Fatal error: Uncaught Aws\Auth\Exception\UnresolvedAuthSchemeException: This operation requests sigv4a auth schemes, but the client currently supports sigv4, none, bearer, sigv4-…

设计模式 结构型 装饰器模式(Decorator Pattern)与 常见技术框架应用 解析

装饰器模式&#xff08;Decorator Pattern&#xff09;&#xff0c;又称为包装器模式&#xff08;Wrapper Pattern&#xff09;&#xff0c;是一种结构型设计模式。它允许在不改变原有对象结构的基础上&#xff0c;动态地给对象添加一些新的职责&#xff08;即增加其额外功能&a…

<论文>聊聊初代LLaMA

一、摘要 本文介绍来自Meta的论文《LLaMA: Open and Efficient Foundation Language Models》&#xff0c;这篇2023年的研究发布了开源的LLaMA系列大模型&#xff0c;轰动一时。 译文&#xff1a; 我们推出了 LLaMA&#xff0c;一系列参数规模从 70 亿到 650 亿的基础语言模型。…

把vue项目或者vue组件发布成npm包或者打包成lib库文件本地使用

将vue项目发布成npm库文件&#xff0c;第三方通过npm依赖安装使用&#xff1b;使用最近公司接了一个项目&#xff0c;这个项目需要集成到第三方页面&#xff0c;在第三方页面点击项目名称&#xff0c;页面变成我们的项目页面&#xff1b;要求以npm库文件提供给他们&#xff1b;…

自从学会Git,感觉打开了一扇新大门

“同事让我用 Git 提交代码&#xff0c;我居然直接把项目文件压缩发过去了……”相信很多初学者都经历过类似的窘境。而当你真正掌握 Git 时&#xff0c;才会发现它就像一本魔法书&#xff0c;轻松解决代码管理的种种难题。 为什么 Git 能成为程序员的标配工具&#xff1f;它究…

【重庆】《政务数字化应用费用测算规范》(T/CDCIDA 001—2023)-省市费用标准解读系列36

《政务数字化应用费用测算规范&#xff08;报批稿&#xff09;》于2023年11月18日实施&#xff0c;本文件按照GB/T 1.1-2020给出的规则起草&#xff0c;主要适用于重庆政务数字化应用项目的费用测算。我司基于专业第三方信息化项目造价机构角度&#xff0c;从标准创新点、定制软…

Python | 学习type()方法动态创建类

getattr方法的使用场景是在访问不存在的属性时&#xff0c;会触发该方法中的处理逻辑。尤其是在动态属性获取中结合 type()动态创建类有着良好的使用关系。 type()方法常用来判断属性的类别&#xff0c;而动态创建类不常使用&#xff0c;通过如下的几个实例来学习使用&#xff…

机器学习之逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告

逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告 目录 逻辑回归算法、数据标准化处理及数据预测和数据的分类结果报告1 逻辑回归算法1.1 概念理解1.2 算法导入1.3 算法优缺点 2 LogisticRegression理解2.1查看参数定义2.2 参数理解2.3 方法2.4基本格式 3 数据标准…

Linux(Ubuntu24.04)源码编译安装VTK7.1.1记录

VTK&#xff08;Visualization Toolkit&#xff09;是一个开源的3D可视化开发工具包&#xff0c;用于开发可视化和图形处理应用程序。VTK提供了一系列的算法和工具&#xff0c;用于创建、渲染和处理复杂的3D图形和数据。VTK由C编写&#xff0c;并提供了Python、Java和Tcl等语言…

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64 工具下载安装设置国内镜像源&#xff08;永久&#xff09; node-v20.18.0-x64 工具 系统&#xff1a;Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…

如何轻松安全地销售旧 Android 手机

众所周知&#xff0c;手机不断更新换代。当您想要的手机终于到货时&#xff0c;您可能迫不及待地将旧 Android 手机更新为最新手机。在此之前&#xff0c;你们中的一些人可能会考虑以最多的钱卖掉旧的Android手机。 但永远不要冲动地卖掉你的旧 Android 手机&#xff01;为了安…

欧科云链研究院:ChatGPT 眼中的 Web3

编辑&#xff5c;OKG Research 转眼间&#xff0c;2024年已经进入尾声&#xff0c;Web3 行业经历了热闹非凡的一年。今年注定也是属于AI的重要一年&#xff0c;OKG Research 决定拉上 ChatGPT 这位“最懂归纳的AI拍档”&#xff0c;尝试把一整年的研究内容浓缩成精华。我们一共…

【从零开始入门unity游戏开发之——unity篇04】unity6基础入门——场景窗口(Scene)和层级窗口(Hierarchy)介绍

文章目录 场景窗口&#xff08;Scene&#xff09;和层级窗口&#xff08;Hierarchy&#xff09;一、层级窗口&#xff08;Hierarchy&#xff09;1、添加新的对象&#xff08;物体&#xff09;2、Hierarchy层级窗口快捷键3、搜索 二、Scene场景窗口1、工具栏控制台2、操作物体位…

Mac中配置vscode(第一期:python开发)

1、终端中安装 xcode-select --install #mac的终端中安装该开发工具 xcode-select -p #显示当前 Xcode 命令行工具的安装路径注意&#xff1a;xcode-select --install是在 macOS 上安装命令行开发工具(Command Line Tools)的关键命令。安装的主要组件包括&#xff1a;C/C 编…

快速将索尼手机联系人导出为 HTML 文件

我想将 Sony Xperia 手机上的联系人导出到计算机上进行备份&#xff0c;并在需要时进行编辑。这可以做到吗&#xff1f;如何做到&#xff1f;作为助手我需要下载什么工具吗&#xff1f; 当您的 Android 手机上存储了如此多的重要联系人&#xff0c;而您又不想丢失它们时&#…

学习threejs,导入AWD格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AWDLoader AWD模型加…

【OAA 】面向对象分析:从概念到实践

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 我们都知道Java是一门面向对象的开发语言&#xff0c;在软件开发的广袤天地中&#xff0c;面向对象分析&#xff08;Object-Oriented Analysis&#xff0c;简称…

jvm结构介绍

JVM结构概述 Java虚拟机&#xff08;JVM&#xff09;是Java程序的运行环境&#xff0c;它负责将Java字节码转换为机器码并执行。JVM的结构主要包括类加载子系统、运行时数据区、执行引擎、本地接口以及垃圾收集器。 1. 类加载子系统&#xff08;Class Loader Subsystem&#xf…