黑箱方法-神经网络①

2023-05-16

人工神经网络

人工神经网络的概念

人工神经网络(Artificial Neural Networks,ANN)是对一组输入信号和一组输出信号之间的关系进行建模,使用的模型来源于人类大脑对来自感觉输入的刺激是如何反应的理解。通过调整内部大量节点(神经元)之间相互连接的权重,从而达到处理信息的目的。
从广义上讲,人工神经网络是可以应用于几乎所有的学习任务的多功能学习方法:分类、数值预测甚至无监督的模式识别。ANN最好应用于下列问题:输入数据和输出数据相对简单,而输入到输出的过程相对复杂。作为一种黑箱方法,对于这些类型的黑箱问题,它运行的很好。

人工神经网络的构成与分类

常见的人工神经网就是这种三层人工神经网络模型,如果没有隐含层,那就是两层人工神经网络;如果有多层隐含层那就是多层人工神经网络。
小圆圈就是节点,相当于人脑的神经元。节点之间的线称之为边,边表示节点之间存在关联性,关联性的大小由权重表示。
输入层就是我们的输入变量X,通常一个变量X是一个节点,有多少X就有多少个节点。
隐含层对输入变量X进行转化计算,层数和节点个数自行制定,通常只要一层,个数视情况而定。
输出层是我们的输出变量Y,对于回归问题和二分类变量问题,就有一个节点,多分类问题就存在多个节点。

基本构造

信息传播的方向

第一种神经网络,如上例所示,箭头用来指示信号只在一个方向上传播。如果网络中的输入信号在一个方向上传送,直达输出层,那么这样的网络成为前馈网络(feedforward network)。这是我们主要使用的B-P神经网络模型就是典型的前馈式神经网络模型。另外,由于层数和每一层的节点数都可以改变,多个结果可以同时进行建模,或者可以应用多个隐藏层(这种做法有时称为深度学习 (deep learning)
第二种是反馈式神经网络,这种神经网络的特点是层间节点的连接是双向的,上层节点向下连接下层节点,下层节点也可以向上连接上层节点。这种神经网络更为复杂,很少使用。

每一层的节点数

除了层数和信息传播方向变化外,每一层的节点数同样可以改变。输入节点的个数由输入数据的特征确定,输出节点的个数由需要建模的结果决定。然而隐藏层的节点个数并没有可信的规则来确定。一般情况下,合适的数目取决于输入节点的个数、训练数据的数量等。

简单实例

今天,主要使用人工神经网络的进行建模分析,涉及的R包是neuralnet和nnet两个包,函数名和包名是一样的。

nnet
formula:公式的形式class ~ x1 + x2 + ..... x,y :矩阵或者数据框
weights:权重
size:隐含层节点个数
range:初始化随机权值
decay:经元输入权重的一个修正参数,表明权重是递减的(可以防止过拟合;
maxit:最大反馈迭代次数;
skip:是否允许跳过隐含层
trace:支出是否要最优化

  • 代码
library(nnet)
data("iris")
model.nnet <- nnet(Species  ~. , data = iris,linout = F, size = 10 ,
                   decay = 0.01,maxit= 1000, trace = F)
pre.forest <- predict(model.nnet, iris, type = "class")
table(pre.forest,iris$Species)
  • Results:
pre.forestsetosaversicolorvirginica
setosa5000
versicolor0490
virginica0150

neuralnet

数据来源:https://archive.ics.uci.edu/ml/machine-learning-databases/concrete/compressive/
该数据集包含了1030个混凝土案例,8个描述成分的特征。这些特征被认为与最终的抗压强度相关。

> setwd("I:\\Rwork\\concrete")
> list.files()
[1] "Concrete_Data.csv" "Concrete_Data.xls"
> concrete <- read.csv("Concrete_Data.csv", header = T)
> str(concrete)
'data.frame':   1030 obs. of  9 variables:
 $ Cement..component.1..kg.in.a.m.3.mixture.            : num  540 540 332 332 199 ...
 $ Blast.Furnace.Slag..component.2..kg.in.a.m.3.mixture.: num  0 0 142 142 132 ...
 $ Fly.Ash..component.3..kg.in.a.m.3.mixture.           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ Water...component.4..kg.in.a.m.3.mixture.            : num  162 162 228 228 192 228 228 228 228 228 ...
 $ Superplasticizer..component.5..kg.in.a.m.3.mixture.  : num  2.5 2.5 0 0 0 0 0 0 0 0 ...
 $ Coarse.Aggregate...component.6..kg.in.a.m.3.mixture. : num  1040 1055 932 932 978 ...
 $ Fine.Aggregate..component.7..kg.in.a.m.3.mixture.    : num  676 676 594 594 826 ...
 $ Age..day.                                            : num  28 28 270 365 360 90 365 28 28 28 ...
 $ Concrete.compressive.strength.MPa..megapascals..     : num  80 61.9 40.3 41 44.3 ...

数据整形:由于神经网络的运行最好是输入数据缩放到0附近的狭窄范围内,但是目前发现数据数值从0到1000多。

通常解决这个问题的方法是规范化或者标准化函数来重新调整数据。如果数据不服从正态分布,可以将其标准化到一个0到1的范围。

normalize <- function(x) {
                            return ((x - min(x)) / (max(x) - min(x)))}
concrete.norm <- as.data.frame(lapply(concrete, normalize))

训练模型之前应用于数据的任何变换,之后需要应用反变换。

  • 训练数据模型
summary(concrete.norm)
library(neuralnet)
concrete.train <- concrete.norm[1:773,]
concrete.test <- concrete.norm[774:1030,]
concrete_model <- neuralnet(strength ~ cement + slag + ash + water +superplastic +
                              coarseagg +fineagg + age,
                            data = concrete.train)
plot(concrete_model)

在这个简单模型中,对于8个特征中的每一个特征都有一个输入节点,后面跟着一个单一的隐藏节点和一个单一的输出节点。每一个连接的权重也都被描绘出来,偏差想也被描绘出来(通过带有1的节点表示)。另外还有训练步数和误差平方和(SSE)。

  • 评估模型性能
model.result <- compute(concrete_model, concrete.test[1:8])
predicted_strength <- model.result$net.result
cor(predicted_strength, concrete.test$strength)
0.7276065811

compute函数的运行原理与我们已经使用至今的predict()函数有些不同。$neurons代表网络中每一层的神经元;$net.result代表存储预测值,通过cor函数评估两者之间的线性相关。


  • 提高模型的性能

尝试通过增加隐藏节点数,评估模型性能

hiddenerrorstepscor
15.6619930.72
22.5722280.75
32.5823280.78
41.82550120.76
51.42342870.65
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑箱方法-神经网络① 的相关文章

  • MATLAB对于文本文件(txt)数据读取的技巧总结(经典中的经典)

    振 动论坛原版主eight 的经典贴 http www chinavib com thread 45622 1 1 html MATLAB 对于文本文件 txt 进行数据读取的技巧总结 经典中的经典 由于本帖内容较多 xff0c 部分转自他
  • 一个止传SWF的好网站

    SwfCabin 是一個免費swf空間 xff0c 最初建立的構想在於 如何在網路上將swf檔分享給別人 使用者可以將swf檔上傳到 SwfCabin 然後獲得一個連結 xff0c 其他人便可以在該頁面看到您所上傳的swf檔案 上傳檔案時
  • SqlServer教程:经典SQL语句集锦

    SQL分类 xff1a DDL 数据定义语言 CREATE xff0c ALTER xff0c DROP xff0c DECLARE DML 数据操纵语言 SELECT xff0c DELETE xff0c UPDATE xff0c INS
  • matlab练习程序(获取鼠标坐标)

    还是一个函数的使用ginput clear all close all clc img 61 ones 200 200 imshow img x y 61 ginput 这里鼠标左键点击一次 x y 添加一个值 xff0c 点四次就有四个值
  • 收到了免费的Visual Studio 2005 EE

    昨天 xff0c 收到了Micorsoft寄来的MSDN开发精选 xff08 5 xff09 xff0c 其中就包含了SQL Server 2005 Express Edition和Visual c 2005 EE xff0c xff0c
  • H3C交换机SNMP配置详解

    H3C交换机SNMP配置 1 启动 关闭SNMP Agent服务 在系统视图模式下 xff1a 启用 xff1a snmp agent 关闭 xff1a undo snmp agent 注 xff1a 缺省情况下snmp agent是关闭的
  • ppp的chap认证完全配置

    网络环境 xff1a CHAP认证命令 xff1a cisco config interface s0 0 cisco config if encapsulation ppp cisco config if ppp authenticati
  • MAVLink认识、使用、自定义

    对mavlink的认识 MAVLink是针对小型飞行器 xff08 MAV xff09 的一个lightweight header only message marshalling library 由头文件构成的信息编组库 它被封装成C结构
  • WHY数学图形可视化工具(开源)

    WHY数学图形可视化工具 软件下载地址 http files cnblogs com WhyEngine WhyMathGraph zip 源码下载地址 http pan baidu com s 1jG9QKq6 软件的开发语言是C 43
  • docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍

    一 ADD指令 ADD指令的功能是将主机构建环境 xff08 上下文 xff09 目录中的文件和目录 以及一个URL标记的文件 拷贝到镜像中 其格式是 xff1a ADD 源路径 目标路径 如 xff1a test FROM ubuntu
  • 无限“递归”的python程序

    如果一个函数直接或者间接调用了自己 xff0c 那么就形成了递归 xff08 recursion xff09 xff0c 比如斐波那契数列的一个实现 def fib n if n lt 61 2 return 1 else return f
  • FreeRTOS 二值信号量,互斥信号量,递归互斥信号量

    以下转载自安富莱电子 xff1a http forum armfly com forum php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制 xff0c 二值信号量 二值信号量是计数信号量的一种特殊形式 xff0c 即共享资源
  • 替代vnc图像远程工具NOMACHINE

    最近再做关于oracle rac集群的实验 难免要在图像界面下进行操作 以前都用的是vnc 但是vnc貌似比较占资源而已图像质量不是很好 今天无意发现了一个替代VNC的好工具NOMACHINE 它的官方网址是 http www nomach
  • antd-design LocaleProvider国际化

    1 LocaleProvider 使用 React 的 context 特性 xff0c 只需在应用外围包裹一次即可全局生效 import LocaleProvider from 39 antd 39 import zh CN from 3
  • python 读取文件、并以十六进制的方式写入到新文件

    usr bin env python infile 61 file 34 in mp3 34 34 rb 34 outfile 61 file 34 out txt 34 34 wb 34 def main while 1 c 61 inf
  • perl的内置函数scalar

    scalar可以求数组的长度 xff0c 但是 xff0c 在scalar的说明里面并没有这一项 Forces EXPR to be interpreted in scalar context and returns the value o
  • sqlalchemy批量删除数据、全量删除

    问题 xff1a sqlalchemy如何批量删除多条数据 解决 xff1a 使用参数synchronize session 61 False xff0c 或for循环 方法 xff1a users 61 self db query Use
  • 经典的同态滤波算法的优化及其应用参数配置。

    同态滤波 xff0c 网络上有很多文章提到过这个算法 xff0c 我们摘取百度的一段文字简要的说明了该算法的核心 xff1a 同态滤波是一种减少低频增加高频 xff0c 从而减少光照变化并锐化边缘或细节的图像滤波方法 关于该算法 xff0c
  • Trajectory following with MAVROS OFFBOARD on Raspberry Pi

    原文链接 Trajectory following with MAVROS OFFBOARD on Raspberry Pi Jaeyoung Lim August 10 2016 404warehouse Small Projects B
  • 职位介绍 之 嵌入式开发工程师

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0

随机推荐

  • Elementui el-dialog 组件我又学会了一种新的用法

    1 新建弹窗Form vue文件 将visible属性设置为true lt template gt lt div gt lt el dialog title 61 34 提示 34 visible 61 34 true 34 width 6
  • webpack系列——实现一个行内样式px转vw的loader

    需求 自从有了postcss来处理css文件 xff0c 我们可以快速进行网站适配的开发 xff0c 只需要改改参数 xff0c 样式按照设计稿的px写 xff0c webpack编译自动转换成rem或者vw等 但是 xff0c 标签内的p
  • Scrapy爬虫 - 获取知乎用户数据

    2016 04 10 Scrapy爬虫 获取知乎用户数据 安装Scrapy爬虫框架 关于如何安装Python以及Scrapy框架 xff0c 这里不做介绍 xff0c 请自行网上搜索 初始化 安装好Scrapy后 xff0c 执行 scra
  • 百度云下载的压缩吧损坏问题解决

    有时用百度云下载压缩包回来之后会出现损坏不能解压的问题 xff0c 比如 xff1a 1 使用网页的批量下载 xff0c 此时百度云会压缩成一个包 xff0c 格式为zip xff0c 而下载下载回来之后用WinRAR解压就会出现CRC校验
  • 理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)

    BPDU Guard xff08 BPDU保护 xff09 xff0c 简单的讲它的意义就是一个不该接收 BPDU的端口 xff0c 比如被启动了 portfast的端口 xff0c 一旦收到 BPDU报文 xff0c 那么 BPDU保护功
  • frida hook java原生算法同时打印调用堆栈

    coding UTF 8 import frida sys jsCode 61 34 34 34 function showStacks Java perform function send Java use 34 android util
  • 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)

    概述 在软件开发系统中 xff0c 客户程序经常会与复杂系统的内部子系统之间产生耦合 xff0c 而导致客户程序随着子系统的变化而变化 那么如何简化客户程序与子系统之间的交互接口 xff1f 如何将复杂系统的内部子系统与客户程序之间的依赖解
  • tld 标签元素

    每个自定义标签都必须在tld文件中声明 xff0c tld文件只不过是一个XML文件 根元素是 lt taglib gt xff0c 它包含一个或者多个 lt tag gt 标签 xff0c 该元素用来声明定制标签 TLD 文件中的元素标签
  • cuda中用cublas库做矩阵乘法

    这里矩阵C 61 A B xff0c 原始文档给的公式是C 61 alpha A B 43 beta C xff0c 所以这里alpha 61 1 xff0c beta 61 0 主要使用cublasSgemm这个函数 xff0c 这个函数
  • cv_bridge中的编码模式与实现

    image encodings cpp文件是关于图像编码模式的源文件 xff0c 其中规定了RGB的图像以及深度图的编码模式 该编码文件image encodings cpp所依赖的头文件图 命令空间 sensor msgs image e
  • Pixhawk进阶开发

    使用者 初见Pixhawk 大家知道Pix是一个出色的开源飞控 xff0c 那到底什么是Pixhawk呢 xff0c 它有那些种类 它的硬件是怎么设计的 xff0c 软件是基于什么方式设计的 xff0c 我们怎么连接 初始化配置 怎么调节参
  • Java程序心得体会

    学习Java是一件快乐的事情 xff0c 刚开始学习的时候还有点难 xff0c 后来慢慢熟悉了Java的程序操作 xff0c 在错误中获得技巧 xff0c 一次又一次的失败 xff0c 让我对Java产生了兴趣 xff0c 现在对Java既
  • linux网卡顺序发生变化,(linux)复制的虚拟机网卡eth0变成了eth1或其他名称后修正方法...

    正在使用的虚拟机 xff0c 复制之后 xff0c 发现网卡名称发生了变化 xff0c 修正方法如下 xff1a 比如eth0变成了eth1 xff1a ifconfig xff1a udev动态管理设备文件 xff1a cat etc u
  • Android中的Android中的Surface和SurfaceView

    一 什么是Surface 简单的说Surface对应了一块屏幕缓冲区 xff0c 每个window对应一个Surface xff0c 任何View都要画在Surface上 传统的view共享一块屏幕缓冲区 xff0c 所有的绘制必须在UI线
  • 创新AI技术引领手机芯片发展方向,麒麟970荣获中国好设计金奖

    11月24日 xff0c 2017年中国好设计颁奖仪式在深圳正式召开 xff0c 奖项一共设置为金奖 银奖 创意奖 入围奖四个级别 而麒麟970作为人工智能领域的代表性产品 xff0c 也是唯一的芯片产品 xff0c 在今年的85个项目中脱
  • 史上最全阿里 Java 面试题总结

    以下为大家整理了阿里巴巴史上最全的 Java 面试题 xff0c 涉及大量 Java 面试知识点和相关试题 JAVA基础 JAVA中的几种基本数据类型是什么 xff0c 各自占用多少字节 String类能被继承吗 xff0c 为什么 Str
  • 图象传输协议——PCoIP

    PCoIP 是一种高性能显示协议 专为交付虚拟桌面而构建 无论最终用户具有什么任务或处于何位置 均可为其提供内容极为丰富的最佳桌面体验 借助 PCoIP 整个计算体验先经过在数据中心进行 压缩 加密和编码 然后再通过标准 IP 网络传输到启
  • VB6 对象库未注册问题

    以下是个人使用VB6出现对象库未注册问题的解决方法 已成功 xff01 一 注册ocx文件 mscomctl ocx文件放进路径C Windows System32 xff08 64是此路径 xff0c 由于本人是64位系统32位未测试 x
  • 源码阅读技巧篇

    转载请注明原创出处 xff0c 谢谢 xff01 说在前面 本人水平有限 xff0c 下面的一些都是本人的思考与理解 xff0c 如果有那里不对 xff0c 希望各位大佬积极指出 xff0c 欢迎在留言区进行评论交流 探讨 主题 为什么要读
  • 黑箱方法-神经网络①

    人工神经网络 人工神经网络的概念 人工神经网络 xff08 Artificial Neural Networks xff0c ANN xff09 是对一组输入信号和一组输出信号之间的关系进行建模 xff0c 使用的模型来源于人类大脑对来自感