本文概述
神经网络(或人工神经网络)具有通过示例进行学习的能力。人工神经网络是一种受生物神经元系统启发的信息处理模型。它由大量称为神经元的高度互连的处理元素组成, 可以解决问题。它遵循非线性路径, 并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统。自适应意味着它可以通过调整输入权重来更改其内部结构。 (资源)
该神经网络旨在解决人类容易遇到的问题和机器难以解决的问题, 例如识别猫和狗的图片, 识别编号的图片。这些问题通常称为模式识别。它的应用范围从光学字符识别到目标检测。
在本教程中, 你将涵盖以下主题:
- 神经网络概论
- 正向传播和反向传播
- 激活函数
- R中神经网络的实现
- NN的用例
- 利弊
- 总结
神经网络概论
1943年, 沃伦·麦卡洛克(Warren McCulloch)和沃尔特·皮茨(Walter Pitts)开发了第一个神经元数学模型。在他们的研究论文”神经活动中固有的思想的逻辑演算”中, 他们描述了神经元的简单数学模型, 它代表了神经系统的一个单元, 该单元接受输入, 处理这些输入并返回输出。模型被称为McCulloch-Pitts神经模型(来源)
NN是受人脑启发执行特定任务或功能的算法。 NN通过学习通过一个过程执行计算。神经网络是一组连接的输入/输出单元, 其中每个连接都具有与之关联的权重。在学习阶段, 网络通过调整权重进行学习, 以预测给定输入的正确类别标签。
人脑由数十亿个处理信息的神经细胞组成。每个神经细胞都认为是一个简单的处理系统。被称为生物神经网络的神经元互连网通过电信号传输信息。这种并行的交互系统使大脑能够思考和处理信息。一个神经元的树突接收来自另一个神经元的输入信号, 并根据这些输入将输出响应到某个其他神经元的轴突。根据这些输入, 通过轴突发射输出信号。 (资源)
图片来源
树突接收来自其他神经元的信号。单元体将所有输入信号求和以生成输出。轴突通过输出当总和达到阈值时。突触是神经元相互作用的一个点。它将电或化学信号传输到另一个神经元。突触来自希腊语, 意为连词。
图片来源
x1, x2 …. xn是输入变量。 w1, w2 …. wn是各个输入的权重。 b是偏差, 将其与加权输入相加即可得出净输入。偏差和权重都是神经元的可调整参数。使用一些学习规则来调整参数。神经元的输出范围可以从-inf到+ inf。神经元不知道边界。因此, 我们需要神经元的输入和输出之间的映射机制。将输入映射到输出的这种机制称为激活函数。
前馈和反馈人工神经网络
人工神经网络主要有两种类型:前馈和反馈人工神经网络。前馈神经网络是非递归网络。该层中的神经元仅与下一层中的神经元相连, 并且它们不形成循环。在前馈中, 信号仅在一个方向上流向输出层。 (资源)
反馈神经网络包含循环。通过在网络中引入环路, 信号可以双向传播。反馈周期会导致网络行为根据其输入随时间变化。反馈神经网络也称为递归神经网络。 (资源)
激活函数
激活函数根据局部感应场定义神经元的输出。激活函数是单行代码, 它使神经网络具有非线性和可表达性。有许多激活函数。其中一些如下(来源):
- 识别功能是将输入映射到相同输出值的功能。它是向量空间中的线性算子。同样, 已知的直线函数, 其激活与输入成比例。
- 在Binary Step Function中, 如果Y的值高于某个特定值(称为阈值), 则输出为True(或激活), 如果小于阈值, 则输出为false(或未激活)。这在分类器中非常有用。
- S形函数称为S形函数。 Logistic和双曲正切函数是常用的S型函数。乙状结肠功能有两种。
- 二进制Sigmoid函数是一种逻辑函数, 其中输出值为二进制或从0到1变化。
- 双极S型函数是一种逻辑函数, 其输出值在-1到1之间变化。也称为双曲正切函数或tanh。
- 斜坡函数:斜坡函数的名称源自其图形的外观。它将负输入映射到0, 将正输入映射到相同的输出。
- ReLu代表整流线性单位(ReLU)。它是世界上最常用的激活函数。对于x的负值, 它输出0。
在R中实现神经网络
安装所需的软件包
首先安装神经网络库:
# install package
install.packages("neuralnet")
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
创建训练数据集
让我们创建自己的数据集。在这里, 你需要数据中的两种属性或列:特征和标签。在上面显示的表格中, 你可以查看学生的技术知识, 沟通技能得分和安置状态。因此, 前两列(技术知识得分和沟通技能得分)是功能, 第三列(学生放置)是二进制标签。
# creating training data set
TKS=c(20, 10, 30, 20, 80, 30)
CSS=c(90, 20, 40, 50, 50, 80)
Placed=c(1, 0, 0, 0, 1, 1)
# Here, you will combine multiple columns or features into a single set of data
df=data.frame(TKS, CSS, Placed)
让我们使用Neuronet库构建NN分类器模型。
首先, 导入神经网络库, 并通过传递标签和特征的参数集, 数据集, 隐藏层中神经元的数量以及误差计算来创建NN分类器模型。
# load library
require(neuralnet)
# fit neural network
nn=neuralnet(Placed~TKS+CSS, data=df, hidden=3, act.fct = "logistic", linear.output = FALSE)
这里,
- Placed~TKS+CSS, Placed is label annd TKS and CSS are features.
- df is dataframe, - hidden=3: represents single layer with 3 neurons respectively.
- act.fct = "logistic" used for smoothing the result.
- linear.ouput=FALSE: set FALSE for apply act.fct otherwise TRUE
绘制神经网络
让我们绘制你的神经网络模型。
# plot neural network
plot(nn)
创建测试数据集
使用以下两项功能创建测试数据集:技术知识得分和沟通技能得分
# creating test set
TKS=c(30, 40, 85)
CSS=c(85, 50, 40)
test=data.frame(TKS, CSS)
预测测试集的结果
使用计算功能预测测试数据的概率得分。
## Prediction using neural network
Predict=compute(nn, test)
Predict$net.result
0.9928202080 |
0.3335543925 |
0.9775153014 |
现在, 将概率转换为二进制类。
# Converting probabilities into binary classes setting threshold level 0.5
prob <- Predict$net.result
pred <- ifelse(prob>0.5, 1, 0)
pred
1 |
0 |
1 |
预测结果为1, 0和1。
利弊
神经网络更加灵活, 可以用于回归和分类问题。神经网络非常适合具有大量输入(例如图像)的非线性数据集。神经网络可以使用任意数量的输入和层。神经网络具有可以并行执行工作的数值强度。
还有更多可供选择的算法, 例如SVM, 决策树和回归算法, 这些算法简单, 快速, 易于训练并提供更好的性能。神经网络更多地是黑盒子, 需要更多的开发时间和更多的计算能力。神经网络比其他机器学习算法需要更多的数据。 NN只能用于数字输入和非缺失值数据集。一位著名的神经网络研究人员说:”神经网络是解决任何问题的第二好的方法。最好的方法是真正理解问题。”
NN的用例
NN的奇妙特性提供了许多应用程序, 例如:
- 模式识别:神经网络非常适合模式识别问题, 例如面部识别, 物体检测, 指纹识别等。
- 异常检测:神经网络擅长模式检测, 它们可以轻松检测出不适合常规模式的异常模式。
- 时间序列预测:神经网络可用于预测时间序列问题, 例如股票价格, 天气预报。
- 自然语言处理:神经网络在自然语言处理任务中提供了广泛的应用, 例如文本分类, 命名实体识别(NER), 词性标记, 语音识别和拼写检查。
总结
恭喜, 你已完成本教程的结尾!
在本教程中, 你涵盖了有关神经网络的许多详细信息。你已经了解了什么是神经网络, 正向传播和反向传播, 以及激活函数, R中神经网络的实现, NN的用例, 最后是Pros和NN的缺点。
希望你现在可以利用神经网络概念来分析自己的数据集。感谢你阅读本教程!
如果你想了解有关R中的神经网络的更多信息, 请参加srcmini的R中的网络科学-整洁方法课程。
评论前必须登录!
注册