在本教程中,您将学习如何在R中创建神经网络模型。
-
神经网络概论
-
正向传播和反向传播
-
激活函数
-
R中神经网络的实现
-
案例
-
利弊
-
结论
神经网络概论
前馈和反馈人工神经网络
激活函数
- 识别函数 通过激活函数 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
利弊
神经网络的用途
- 模式识别: 神经网络非常适合模式识别问题,例如面部识别,物体检测,指纹识别等。
- 异常检测: 神经网络擅长异常检测,它们可以轻松检测出不适合常规模式的异常模式。
- 时间序列预测: 神经网络可用于预测时间序列问题,例如股票价格,天气预报。
- 自然语言处理: 神经网络在自然语言处理任务中提供了广泛的应用,例如文本分类,命名实体识别(NER),词性标记,语音识别和拼写检查。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/109515
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!