R 编程中的单层神经网络
神经网络也称为神经网络,是机器学习和人工智能中的一种算法,其工作原理与人脑的操作相同。神经网络中的人工神经元描绘了人类大脑中神经元的相同行为。神经网络用于业务风险分析、预测销售等等。神经网络能够适应不断变化的输入,因此无需根据输入重新设计算法。在本文中,我们将讨论单层神经网络及其语法和 R 编程中的neuralnet()
函数的实现。以下函数需要neuralnet
包。
神经网络的类型
神经网络可以根据其深度激活过滤器、结构、使用的神经元、神经元密度、数据流等分为多种类型。神经网络的类型如下:
- 感知器
- 前馈神经网络
- 卷积神经网络
- 径向基函数神经网络
- 递归神经网络
- 序列到序列模型
- 模块化神经网络
根据层数,有两种类型的神经网络:
- 单层神经网络:单层神经网络包含输入层和输出层。输入层接收输入信号,输出层相应地生成输出信号。
- 多层神经网络:多层神经网络包含输入、输出和一个或多个隐藏层。隐藏层在将输入引导到输出层之前执行中间计算。
单层神经网络
单层神经网络通常称为感知器,是一种由输入层和输出层组成的前馈神经网络。提供的输入是多维的。感知器本质上是非循环的。在每个节点中计算权重乘积和输入的总和。输入层将信号传输到输出层。输出层执行计算。感知器只能学习线性函数,需要较少的训练输出。输出可以用一个或两个值(0 或 1)表示。
R中的实现
R语言提供了neuralnet()
函数,该函数在neuralnet
包中可以用来执行单层神经网络。
Syntax:
neuralnet(formula, data, hidden)
Parameters:
formula: represents formula on which model has to be fitted
data: represents dataframe
hidden: represents number of neurons in hidden layers
To know about more optional parameters of the function, use below command in console: help(“neuralnet”)
示例 1:
在这个例子中,让我们创建基于萼片长度和萼片宽度的鸢尾植物物种 setosa 和 versicolor 的单层神经网络或感知器。
第一步:安装需要的包
# Install the required package
install.packages("neuralnet")
第 2 步:加载包
# Load the package
library(neuralnet)
第 3 步:加载数据集
# Load dataset
df <- iris[1:100, ]
第 4 步:拟合神经网络
nn = neuralnet(Species ~ Sepal.Length
+ Sepal.Width, data = df,
hidden = 0, linear.output = TRUE)
第 5 步:绘制神经网络
# Output to be present as PNG file
png(file = "neuralNetworkGFG.png")
# Plot
plot(nn)
# Saving the file
dev.off()
输出:
示例 2:
在这个例子中,让我们使用多层神经网络创建更可靠的神经网络,并根据数据集进行预测。
第一步:安装需要的包
# Install the required package
install.packages("neuralnet")
第 2 步:加载包
# Load the package
library(neuralnet)
第 3 步:加载数据集
# Load dataset
df <- mtcars
第 4 步:拟合神经网络
nn <- neuralnet(am ~ vs + cyl + disp + hp + gear
+ carb + wt + drat, data = df,
hidden = 3, linear.output = TRUE)
第 5 步:绘制神经网络
# Output to be present as PNG file
png(file = "neuralNetwork2GFG.png")
# Plot
plot(nn)
# Saving the file
dev.off()
第 6 步:创建测试数据集
# Create test dataset
vs = c(0, 1, 1)
cyl =c(6, 8, 8)
disp = c(170, 250, 350)
hp = c(120, 240, 300)
gear = c(4, 5, 4)
carb = c(4, 3, 3)
wt = c(2.780, 3.210, 3.425)
drat = c(3.05, 4.02, 3.95)
test <- data.frame(vs, cyl, disp, hp,
gear, carb, wt, drat)
第 7 步:对测试数据集进行预测
Predict <- compute(nn, test)
cat("Predicted values:\n")
print(Predict$net.result)
第 8 步:将预测转换为二进制值
probability <- Predict$net.result
pred <- ifelse(probability > 0.5, 1, 0)
cat("Result in binary values:\n")
print(pred)
输出:
Predicted values:
[,1]
[1,] 0.3681382
[2,] 0.9909768
[3,] 0.9909768
Result in binary values:
[,1]
[1,] 0
[2,] 1
[3,] 1
解释:
在上面的输出中,每行测试数据集的“am”值是使用多层神经网络预测的。与函数创建的神经网络一样,大于 0.49 的预测值使汽车的“am”值为 1。
单层神经网络的优势
- 单层神经网络易于设置和训练,因为没有隐藏层
- 它与统计模型有明确的联系
单层神经网络的缺点
- 它仅适用于线性可分数据。
- 与多层神经网络相比,单层神经网络的准确性较低。