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- 神经网络的更多相关文章

  1. 【机器学习与R语言】13- 如何提高模型的性能?

    目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...

  2. 【机器学习与R语言】9- 支持向量机

    目录 1.理解支持向量机(SVM) 1)SVM特点 2)用超平面分类 3)对非线性空间使用核函数 2. 支持向量机应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 ...

  3. 【机器学习与R语言】1-机器学习简介

    目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...

  4. 【机器学习与R语言】12- 如何评估模型的性能?

    目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...

  5. 【机器学习与R语言】11- Kmeans聚类

    目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...

  6. 【机器学习与R语言】10- 关联规则

    目录 1.理解关联规则 1)基本认识 2)Apriori算法 2.关联规则应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解关联规则 1)基本认识 购物 ...

  7. 【机器学习与R语言】7-回归树和模型树

    目录 1.理解回归树和模型树 2.回归树和模型树应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理解回归树和模型树 决策树用于数值预测: 回归树:基于到达 ...

  8. 【机器学习与R语言】6-线性回归

    目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...

  9. 【机器学习与R语言】5-规则学习算法

    目录 1.分类规则原理 1.1 1R单规则算法 1.2 RIPPER算法 2. 规则学习应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估性能 5)提高性能 6)选择决策树中的分类规则 ...

随机推荐

  1. Manjaro安装Mariadb

    Mariadb是MySQL的一个复刻.由于MySQL被Oracle公司收购,MySQL的一些原始开发者担心MySQL会有开源方面的某些隐患,故领导开发了Mariadb. 如今,Mariadb已经作为许 ...

  2. Beta发布声明

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 Beta-发布声明 我们是谁 删库跑路对不队 我们在做什么 题士 进度如何 进度总览 一.功能与特性 1.一 ...

  3. USART 硬件流控

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

  4. 单片机stm32F103单片机晶振不起振的原因分析

    这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题.下面是我在遇到问题后的一些检查,排除问题的过程.本人小菜鸟一个,文章中如有错误和不足,还望各位大 ...

  5. jquery正则表达式验证【是否带有小数、是否中文名称组成、是否全由8位数字组成、电话码格式、邮件地址】

    1 <form name="myform" action="" onsubmit="return fun1()"> 2 < ...

  6. 结束的NULL

    最近同学叫我帮忙看个问题,为啥这个循环没有退出, 代码如下,原本是想拿到最后的NULL指针就可以结束循环 #include <stdio.h> #include <stdlib.h& ...

  7. 链表分割 牛客网 程序员面试金典 C++ Python

    链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...

  8. popStar手机游戏机机对战程序

    DFS算,五分钟如果答案没有更新,那个解一般来说就很优了. #include <cstdio> #include <iostream> #include <string. ...

  9. 第08课 OpenGL 混合

    混合: 在这一课里,我们在纹理的基础上加上了混合,它看起具有透明的效果,当然解释它不是那么容易,当希望你喜欢它. 简单的透明OpenGL中的绝大多数特效都与某些类型的(色彩)混合有关.混色的定义为,将 ...

  10. 『学了就忘』Linux基础命令 — 23、文件基本权限的介绍和作用

    目录 1.基本权限的介绍 (1)权限位的含义 (2)权限的优先级 2.权限的基本作用 (1)权限含义的解释 (2)目录权限说明 1.基本权限的介绍 (1)权限位的含义 前面讲解ls命令时,我们已经知道 ...