【机器学习与R语言】8- 神经网络
1.理解神经网络
1)基本概念
- 人工神经网络(ANN):对一组输入信号和一组输出信号之间的关系进行建模,模型来源于人类大脑对来自感觉输入刺激反应的理解。使用人工神经元或节点的网络来学习。
- 图灵测试:如果一个人不能把机器行为和一种生物行为区分开来,那么将该机器划分为智能类。
- ANN应用方法:分类/数值预测/无监督模式识别
- ANN应用场景:输入和输出好理解,但其过程很复杂(即黑箱方法)


n个输入神经元:

2)激活函数
- 单位跳跃激活函数:输入信号总和大于0,神经元才击破阈值

- S形激活函数(最常用的激活函数):输出信号不是二元的,而是0-1之间的某个值(可微的,因此可对整个输入范围求导)

- 其他激活函数:差异就在于输出信号的范围不同,一般是(0-1),(-1,1),(-∞,+∞)中的一种。

对于很多激活函数,影响输出信号的输入值范围是相对较窄的,比如上面S形激活函数影响输出信号(0,1)的输入信号范围(-5,5),存在输入信号压缩(也称为压缩函数),所以神经网络输入一般要做标准化,使特征值落在0附近的小范围内,这样模型训练也更快些。
3)网络拓扑
神经网络的学习能力来自它的拓扑结构:相互连接的神经元模式和结构。关键特征:
- 层的数目



- 信息传播方向
前馈网络:输入信号从上至下节点传送,直至输出层。应用广泛。
反馈网络(递归网络):允许信号使用循环在两个方向上传播。更贴近生物神经网络工作原理,使复杂模式被学习。停留在理论层面。
多层前馈网络(多层感知器,MLP):人工神经网络拓扑结构的事实标准。

- 每一层内的节点数
输入节点的个数由输入数据特征的数量预先确定,输出节点的个数由需要进行建模的结果或结果中分类水平数预先确定。隐藏节点的个数留给使用者在训练模型之前确定(无可信规则)。
较多数量的神经元训练更严格的模型,但易过拟合,且训练慢。最好是基于验证数据集,使用较少的节点产生适用的性能。
4)训练算法
通过调整连接权重训练神经网络模型的计算量非常大,因此一种后向传播误差的训练策略被发现。
目前,后向传播算法的多层前馈网络在数据挖掘领域很常见:

该算法通过两个过程的多次循环进行迭代。
两个过程:
- 前向阶段:输入层到输出层,沿途应用每个神经元的权重和激活函数,一旦到最后一层就产生一个输出信号。
- 后向阶段:前向阶段产生的输出信号与训练集中的真是目标值比较,两者的误差向后传播来修正神经元之间的连接权重,并减少将来的误差。
梯度下降法:利用每个神经元的激活函数的导数来确定每个输入权重方向上的梯度(因此一个可微的激活函数很重要,梯度因为权重的改变表明误差的急剧变化,后向传播算法通过学习率的量来改变权重来使得误差最大化减少)。
2.神经网络应用示例
使用人工神经网络对混凝土的强度进行建模。
1)收集数据
包含1030个混凝土案例,8个描述混合物成分的特征(与抗压强度相关)。
数据下载:
链接: https://pan.baidu.com/s/1Js-Asm479XYBjuCEXVF7Ng 提取码: 45fv
2)探索和准备数据
输入数据的标准化。注意如果数据服从一个钟形曲线(如正态分布),使用base::scale()函数才是有意义的。如果是均匀分布或严重非正态,则标准化到0-1水平会更合适。
## Example: Modeling the Strength of Concrete ----
## Step 2: Exploring and preparing the data ----
# read in data and examine structure
concrete <- read.csv("concrete.csv")
str(concrete)
# custom normalization function
normalize <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}
# apply normalization to entire data frame
concrete_norm <- as.data.frame(lapply(concrete, normalize))
# confirm that the range is now between zero and one
summary(concrete_norm$strength)
# compared to the original minimum and maximum
summary(concrete$strength)
# create training and test data
concrete_train <- concrete_norm[1:773, ] #75%
concrete_test <- concrete_norm[774:1030, ] #25%
训练模型前应用于数据的任何变换,之后需要应用反变换,以便将数据转换回原始的测量单位。
3)训练数据
可做神经网络的R包:neuralnet,nnet,RSNNS等。这里使用neuralnet包的同名函数来做,hidden参数即隐藏层默认为1。
## Step 3: Training a model on the data ----
# train the neuralnet model
library(neuralnet)
# simple ANN with only a single hidden neuron
set.seed(12345) # to guarantee repeatable results
concrete_model <- neuralnet(formula = strength ~ cement + slag +
ash + water + superplastic +
coarseagg + fineagg + age,
data = concrete_train)
# visualize the network topology
plot(concrete_model)
训练模型的网络拓扑结构可视化:

4)评估模型
评估模型是compute函数(而非predict),评估中包含网络中每一层的神经元和预测值这2个结果。
因为是数值预测而不是分类问题,所以不能用混淆矩阵来评估,可以用预测的强度和真实值的相关性来评估。
## Step 4: Evaluating model performance ----
# obtain model results
model_results <- compute(concrete_model, concrete_test[1:8])
# obtain predicted strength values
predicted_strength <- model_results$net.result
# examine the correlation between predicted and actual values
cor(predicted_strength, concrete_test$strength)

5)提高性能
考虑使用更复杂拓扑结构的网络学习,将隐藏节点个数增加到5来提高性能。
## Step 5: Improving model performance ----
# a more complex neural network topology with 5 hidden neurons
set.seed(12345) # to guarantee repeatable results
concrete_model2 <- neuralnet(strength ~ cement + slag +
ash + water + superplastic +
coarseagg + fineagg + age,
data = concrete_train, hidden = 5)
# plot the network
plot(concrete_model2)
# evaluate the results as we did before
model_results2 <- compute(concrete_model2, concrete_test[1:8])
predicted_strength2 <- model_results2$net.result
cor(predicted_strength2, concrete_test$strength)


机器学习与R语言系列推文汇总:
【机器学习与R语言】1-机器学习简介
【机器学习与R语言】2-K近邻(kNN)
【机器学习与R语言】3-朴素贝叶斯(NB)
【机器学习与R语言】4-决策树
【机器学习与R语言】5-规则学习
【机器学习与R语言】6-线性回归
【机器学习与R语言】7-回归树和模型树
【机器学习与R语言】8-神经网络
【机器学习与R语言】9-支持向量机
【机器学习与R语言】10-关联规则
【机器学习与R语言】11-Kmeans聚类
【机器学习与R语言】12-如何评估模型的性能?
【机器学习与R语言】13-如何提高模型的性能?
【机器学习与R语言】8- 神经网络的更多相关文章
- 【机器学习与R语言】13- 如何提高模型的性能?
目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...
- 【机器学习与R语言】9- 支持向量机
目录 1.理解支持向量机(SVM) 1)SVM特点 2)用超平面分类 3)对非线性空间使用核函数 2. 支持向量机应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 ...
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
- 【机器学习与R语言】11- Kmeans聚类
目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...
- 【机器学习与R语言】10- 关联规则
目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...
- 【机器学习与R语言】7-回归树和模型树
目录 1.理解回归树和模型树 2.回归树和模型树应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理解回归树和模型树 决策树用于数值预测: 回归树:基于到达 ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...
- 【机器学习与R语言】5-规则学习算法
目录 1.分类规则原理 1.1 1R单规则算法 1.2 RIPPER算法 2. 规则学习应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估性能 5)提高性能 6)选择决策树中的分类规则 ...
随机推荐
- pycharm中的terminal和Windows命令提示符有什么区别?二者用pip安装的包是不是位于相同位置?
那要看pycharm使用了什么shell,可以在设置->工具->终端里查看shell path.如果使用的是cmd.exe那就没区别.pycharm终端和Windows命令提示符用pip安 ...
- 改善深层神经网络-week2编程题(Optimization Methods)
1. Optimization Methods Gradient descent goes "downhill" on a cost function \(J\). Think o ...
- BUAA 软工 | 从计算机技术中探索艺术之路
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 掌握软件开发方法学和工程学知识 这个作业在哪个具体方面帮 ...
- Spring父子上下文的使用案例
Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Fe ...
- FastAPI 学习之路(三十四)数据库多表操作
之前我们分享的是基于单个的数据库表的操作,我们在设计数据库的时候也设计了跨表,我们可以看下数据库的设计. class User(Base): __tablename__ = "users&q ...
- 2021.9.28考试总结[NOIP模拟64]
T1 三元组 发现确定\(b,c\)的情况下,\(a\)的值域是连续的.确定\(b\)后\(a+b\)的取值是\([1+b,b+b]\).树状数组维护对每个\(b\)可行的\(c\). 注意取模后取值 ...
- 开关电源(DC-DC)与LDO电源的区别---纹波
https://blog.csdn.net/edadoc2013/article/details/78435775
- 从0到1搭建自己的组件(vue-code-view)库(上)
0x00 前言 本文将从结构.功能等方面讲解下项目 vue-code-view 的搭建过程,您可以了解以下内容: 使用 vue cli 4从0搭建一个组件库及细致配置信息. 项目的多环境构建配置. 项 ...
- dart系列之:dart语言中的变量
目录 简介 dart中的变量 定义变量 变量的默认值 Late变量 常量 总结 简介 flutter是google在2015年dart开发者峰会上推出的一种开源的移动UI构建框架,使用flutter可 ...
- windows端口占用处理方法
(1)输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是8081,首先找到它.C:\Users\Administrator>netstat -ano活动 ...