如何在R语言中进行神经网络模型的建立
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在R语言中进行神经网络模型的建立相关的知识,希望对你有一定的参考价值。
参考技术A 不能发链接,所以我复制过来了。#载入程序和数据
library(RSNNS)
data(iris)
#将数据顺序打乱
iris <- iris[sample(1:nrow(iris),length(1:nrow(iris))),1:ncol(iris)]
#定义网络输入
irisValues <- iris[,1:4]
#定义网络输出,并将数据进行格式转换
irisTargets <- decodeClassLabels(iris[,5])
#从中划分出训练样本和检验样本
iris <- splitForTrainingAndTest(irisValues, irisTargets, ratio=0.15)
#数据标准化
iris <- normTrainingAndTestSet(iris)
#利用mlp命令执行前馈反向传播神经网络算法
model <- mlp(iris$inputsTrain, iris$targetsTrain, size=5, learnFunc="Quickprop", learnFuncParams=c(0.1, 2.0, 0.0001, 0.1),maxit=100, inputsTest=iris$inputsTest, targetsTest=iris$targetsTest)
#利用上面建立的模型进行预测
predictions <- predict(model,iris$inputsTest)
#生成混淆矩阵,观察预测精度
confusionMatrix(iris$targetsTest,predictions)
#结果如下:
# predictions
#targets 1 2 3
# 1 8 0 0
# 2 0 4 0
# 3 0 1 10 参考技术B
原文链接:http://tecdat.cn/?p=19980
具有单个隐藏层和滞后输入的前馈神经网络,可以用于预测单变量时间序列。将神经网络模型拟合到以时间序列的滞后值作为输入的时间序列。因此它是一个非线性的模型,不可能得出预测区间。
因此我们使用仿真。
读取数据进行可视化:
## # A tibble: 6 x 2## Date Actual## <dttm> <dbl>## 1 2016-01-11 26## 2 2016-01-18 27## 3 2016-01-25 28## 4 2016-02-01 22## 5 2016-02-08 27## 6 2016-02-15 31
dat%>%ggplot(aes(Date,Actual))+labs(title = "耐久性车辆预测", x = "时间", y = "耐用车辆数量",subtitle = " 2016 & 2017年数据") +
#数据必须为数字,tsclean函数才能正常工作dat%>%dplyr::rename(Date=Week)%>%na.omit()dat_ts = ts(dat["实际数量"])
nn(data, lambda=0.5)
Average of 20 networks, each of which isa 1-1-1 network with 4 weightsoptions were - linear output unitssigma^2 estimated as 0.2705
我使用了Box-Cox变换,其中λ=0.5,
确保残差同方差。
该模型可以写成:
其中yt-1 =(yt-1,yt-2,⋯,yt-8)是包含序列的滞后值的向量,f是一个神经网络,在单个层中具有4个隐藏节点。
通过从正态分布或从历史值中重采样随机生成ϵt的值,我们可以迭代地模拟该模型的未来样本路径。
因此,如果ϵ ∗ T + 1是从时间T + 1的误差分布中随机抽取的,则
是从yT + 1的预测分布中得出的一种概率。设置
y * T + 1 =(y * T + 1,yT,⋯,yT-6)然后我们可以重复此过程来获得
我们可以迭代地模拟未来的样本路径。通过反复模拟样本路径,我们基于拟合的神经网络建立了所有未来值的分布。这是对数据的9种将来可能的采样路径的模拟。每个样本路径覆盖了观测数据之后的未来20年。
plot(dat_ts) + autolayer(sim)
如果执行此操作几百或数千次,则可以很好地了解预测分布。预测区间:
plot(fcast)
模拟次数为1000。默认情况下,误差来自于正态分布。
最受欢迎的见解
1.用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
2.Python中利用长短期记忆模型LSTM进行时间序列预测分析 – 预测电力消耗数据
3.python在Keras中使用LSTM解决序列问题
4.Python中用PyTorch机器学习分类预测银行客户流失模型
5.R语言多元Copula GARCH 模型时间序列预测
6.在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析
7.R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数
8.R语言估计时变VAR模型时间序列的实证研究分析案例
9.用广义加性模型GAM进行时间序列分析
R语言中的BP神经网络模型分析学生成绩
原文链接:http://tecdat.cn/?p=19936
在本教程中,您将学习如何在R中创建神经网络模型。
神经网络(或人工神经网络)具有通过样本进行学习的能力。人工神经网络是一种受生物神经元系统启发的信息处理模型。它由大量高度互连的处理元件(称为神经元)组成,以解决问题。它遵循非线性路径,并在整个节点中并行处理信息。神经网络是一个复杂的自适应系统。自适应意味着它可以通过调整输入权重来更改其内部结构。
该神经网络旨在解决人类容易遇到的问题和机器难以解决的问题,例如识别猫和狗的图片,识别编号的图片。这些问题通常称为模式识别。它的应用范围从光学字符识别到目标检测。
本教程将涵盖以下主题:
神经网络概论
正向传播和反向传播
激活函数
R中神经网络的实现
案例
利弊
结论
神经网络概论
神经网络是受人脑启发执行特定任务的算法。它是一组连接的输入/输出单元,其中每个连接都具有与之关联的权重。在学习阶段,网络通过调整权重进行学习,来预测给定输入的正确类别标签。
人脑由数十亿个处理信息的神经细胞组成。每个神经细胞都认为是一个简单的处理系统。被称为生物神经网络的神经元通过电信号传输信息。这种并行的交互系统使大脑能够思考和处理信息。一个神经元的树突接收来自另一个神经元的输入信号,并根据这些输入将输出响应到某个其他神经元的轴突。
树突接收来自其他神经元的信号。单元体将所有输入信号求和以生成输出。当总和达到阈值时通过轴突输出。突触是神经元相互作用的一个点。它将电化学信号传输到另一个神经元。
x1,x2 .... xn是输入变量。w1,w2 .... wn是各个输入的权重。b是偏差,将其与加权输入相加即可形成输入。偏差和权重都是神经元的可调整参数。使用一些学习规则来调整参数。神经元的输出范围可以从-inf到+ inf。神经元不知道边界。因此,我们需要神经元的输入和输出之间的映射机制。将输入映射到输出的这种机制称为激活函数。
前馈和反馈人工神经网络
人工神经网络主要有两种类型:前馈和反馈人工神经网络。前馈神经网络是非递归网络。该层中的神经元仅与下一层中的神经元相连,并且它们不形成循环。在前馈中,信号仅在一个方向上流向输出层。
反馈神经网络包含循环。通过在网络中引入环路,信号可以双向传播。反馈周期会导致网络行为根据其输入随时间变化。反馈神经网络也称为递归神经网络。
激活函数
激活函数定义神经元的输出。激活函数使神经网络具有非线性和可表达性。有许多激活函数:
识别函数 通过激活函数 Identity,节点的输入等于输出。它完美拟合于潜在行为是线性(与线性回归相似)的任务。当存在非线性,单独使用该激活函数是不够的,但它依然可以在最终输出节点上作为激活函数用于回归任务。。
在 二元阶梯函数(Binary Step Function)中,如果Y的值高于某个特定值(称为阈值),则输出为True(或已激活),如果小于阈值,则输出为false(或未激活)。这在分类器中非常有用。
S形函数 称为S形函数。逻辑和双曲正切函数是常用的S型函数。有两种:
Sigmoid函数 是一种逻辑函数,其中输出值为二进制或从0到1变化。
tanh函数 是一种逻辑函数,其输出值在-1到1之间变化。也称为双曲正切函数或tanh。
ReLU函数又称为修正线性单元(Rectified Linear Unit),是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。它是最常用的激活函数。对于x的负值,它输出0。
在R中实现神经网络
创建训练数据集
我们创建数据集。在这里,您需要数据中的两种属性或列:特征和标签。在上面显示的表格中,您可以查看学生的专业知识,沟通技能得分和学生成绩。因此,前两列(专业知识得分和沟通技能得分)是特征,第三列(学生成绩)是二进制标签。
#创建训练数据集
# 在这里,把多个列或特征组合成一组数据
test=data.frame(专业知识,沟通技能得分)
让我们构建神经网络分类器模型。
首先,导入神经网络,并通过传递标签和特征的参数集,数据集,隐藏层中神经元的数量以及误差计算来创建神经网络分类器模型。
# 拟合神经网络
nn(成绩~专业知识+沟通技能得分, hidden=3,act.fct = "logistic",
linear.output = FALSE)
这里得到模型的因变量、自变量、损失函数、激活函数、权重、结果矩阵(包含达到的阈值,误差,AIC和BIC以及每次重复的权重的矩阵)等信息:
$model.list
$model.list$response
["成绩" ]
$model.list$variables
["专业知识" "沟通技能得分" ]
$err.fct
function (x, y)
{
1/2 * (y - x)^2
}
$act.fct
function (x)
{
1/(1 + exp(-x))
}
$net.result
$net.result[[1]]
[ ]
[0.980052980 ]
[0.001292503 ]
[0.032268860 ]
[0.032437961 ]
[0.963346989 ]
[0.977629865 ]
$weights
$weights[[1]]
$weights[[1]][[1]]
[2] [,3] ] [,
[3.0583343 3.80801996 -0.9962571 ]
[1.2436662 -0.05886708 1.7870905 ]
[-0.5240347 -0.03676600 1.8098647 ]
$weights[[1]][[2]]
[ ]
[4.084756 ]
[-3.807969 ]
[-11.531322 ]
[3.691784 ]
$generalized.weights
$generalized.weights[[1]]
[2] ] [,
[0.15159066 0.09467744 ]
[0.01719274 0.04320642 ]
[0.15657354 0.09778953 ]
[-0.46017408 0.34621212 ]
[0.03868753 0.02416267 ]
[-0.54248384 0.37453006 ]
$startweights
$startweights[[1]]
$startweights[[1]][[1]]
[2] [,3] ] [,
[0.1013318 -1.11757311 -0.9962571 ]
[0.8583704 -0.15529112 1.7870905 ]
[-0.8789741 0.05536849 1.8098647 ]
$startweights[[1]][[2]]
[ ]
[-0.1283200 ]
[-1.0932526 ]
[-1.0077311 ]
[-0.5212917 ]
$result.matrix
[ ]
error 0.002168460
reached.threshold 0.007872764
steps 145.000000000
Intercept.to.1layhid1 3.058334288
专业知识.to.1layhid1 1.243666180
沟通技能得分.to.1layhid1 -0.524034687
Intercept.to.1layhid2 3.808019964
专业知识.to.1layhid2 -0.058867076
沟通技能得分.to.1layhid2 -0.036766001
Intercept.to.1layhid3 -0.996257068
专业知识.to.1layhid3 1.787090472
沟通技能得分.to.1layhid3 1.809864672
Intercept.to.成绩 4.084755522
1layhid1.to.成绩 -3.807969087
1layhid2.to.成绩 -11.531321534
1layhid3.to.成绩 3.691783805
绘制神经网络
让我们绘制您的神经网络模型。
# 绘图神经网络
plot(nn)
创建测试数据集
创建测试数据集:专业知识得分和沟通技能得分
# 创建测试集
test=data.frame(专业知识,沟通技能得分)
预测测试集的结果
使用计算函数预测测试数据的概率得分。
## 使用神经网络进行预测
Pred$result
0.9928202080
0.3335543925
0.9775153014
现在,将概率转换为二进制类。
# 将概率转换为设置阈值0.5的二进制类别
pred <- ifelse(prob>0.5, 1, 0)
pred
1
0
1
预测结果为1,0和1。
利弊
神经网络更灵活,可以用于回归和分类问题。神经网络非常适合具有大量输入(例如图像)的非线性数据集,可以使用任意数量的输入和层,可以并行执行工作。
还有更多可供选择的算法,例如SVM,决策树和回归算法,这些算法简单,快速,易于训练并提供更好的性能。神经网络更多的是黑盒子,需要更多的开发时间和更多的计算能力。与其他机器学习算法相比,神经网络需要更多的数据。NN仅可用于数字输入和非缺失值数据集。一位著名的神经网络研究人员说: “神经网络是解决任何问题的第二好的方法。最好的方法是真正理解问题。”
神经网络的用途
神经网络的特性提供了许多应用方面,例如:
模式识别: 神经网络非常适合模式识别问题,例如面部识别,物体检测,指纹识别等。
异常检测: 神经网络擅长异常检测,它们可以轻松检测出不适合常规模式的异常模式。
时间序列预测: 神经网络可用于预测时间序列问题,例如股票价格,天气预报。
自然语言处理: 神经网络在自然语言处理任务中提供了广泛的应用,例如文本分类,命名实体识别(NER),词性标记,语音识别和拼写检查。
点击标题查阅往期内容
更多内容,请点击左下角“阅读原文”查看报告全文
案例精选、技术干货 第一时间与您分享
长按二维码加关注
更多内容,请点击左下角“阅读原文”查看报告全文
以上是关于如何在R语言中进行神经网络模型的建立的主要内容,如果未能解决你的问题,请参考以下文章