📜  神经网络如何用于 R 编程中的分类

📅  最后修改于: 2022-05-13 01:54:30.031000             🧑  作者: Mango

神经网络如何用于 R 编程中的分类

神经网络是机器学习和数据科学中的一个众所周知的词。由于其可靠性和数学能力,神经网络几乎被用于所有机器学习应用中。在本文中,让我们使用 R 编程来处理神经网络在分类问题中的应用。首先简要介绍一下神经网络和分类算法,然后将这两个概念结合起来。

神经网络

神经网络是神经元的通用电路,可以处理任意数量的输入,通常适用于处理非线性数据集。神经网络更灵活,可用于回归和分类问题。所以想象一下我们应该训练一个模型并检查我们是否在正确的轨道上的情况,因此我们反复前向传播和反向传播以获得最高的准确度(通常使用 epochs),整个过程只不过是工作在神经网络上!以下是神经网络的一般可视化。

神经网络

分类

分类是处理离散数据的强大工具。大多数真/假或是/否类型的机器学习问题都是使用分类解决的。预测电子邮件是否是垃圾邮件是二元分类的一个著名例子。其他示例包括将乳腺癌分类为恶性或良性、对手写字符进行分类等。以下是分类的一般可视化。

分类问题

现在我们已经熟悉了神经网络和分类算法,让我们来处理神经网络在分类中的应用。神经网络分类广泛应用于图像处理、手写数字分类、签名识别、数据分析、数据比较等等。神经网络的隐藏层相互之间以及与输入层执行 epoch,以提高准确性并最小化损失函数。

R中的实现

让我们在 R 中构建一个简单的神经网络,并将神经网络的真实值和预测值可视化。对于这个例子,让我们以 R 的内置波士顿数据集为例。

例子:
加载数据集如下:

# Generating random number
# Using set.seed()
set.seed(500)
  
# Import required library
library(MASS)
  
# Import data set
data <- Boston
head(data)
crim  zn indus   chas nox  rm    age  dis   rad tax  ptratio black lstat medv
1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98 24.0
2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14 21.6
3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03 34.7
4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94 33.4
5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33 36.2
6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21 28.7

现在让我们将数据集拟合到测试和训练集,如下所示:

# Split the dataset to
# Test and train set
index <- sample(1:nrow(data), 
         round(0.75 * nrow(data)))
train <- data[index, ]
test <- data[-index, ]
  
# Fit the model
lm.fit <- glm(medv~., data = train)
summary(lm.fit)
pr.lm <- predict(lm.fit, test)
MSE.lm <- sum((pr.lm - test$medv)^2) / nrow(test)

在拟合和划分我们的数据集之后,现在准备要拟合的神经网络,这可以按如下方式完成:

# Fit the neural network
maxs <- apply(data, 2, max) 
mins <- apply(data, 2, min)
  
scaled <- as.data.frame(scale(data, 
                              center = mins,
                              scale = maxs - mins))
  
train_ <- scaled[index, ]
test_ <- scaled[-index, ]

现在使用neuralnet网络库处理神经网络的隐藏层等参数,如下所示。

# Import neuralnet library
library(neuralnet)
  
# Work on parameters 
# of hidden layers of NN
n <- names(train_)
f <- as.formula(paste("medv ~", 
                paste(n[! n % in % "medv"], 
                collapse = " + ")))
nn <- neuralnet(f, 
                data = train_, 
                hidden = c(5, 3),
                linear.output = T)

在此之后,使用神经网络编译我们的预测medv函数,如下所示:

# Predicting the medv
pr.nn <- compute(nn, test_[, 1:13])
  
pr.nn_ <- pr.nn$net.result * (max(data$medv)
                           - min(data$medv))
                           + min(data$medv)
test.r <- (test_$medv) * (max(data$medv)
                       - min(data$medv))
                       + min(data$medv)
  
MSE.nn <- sum((test.r - pr.nn_)^2) / nrow(test_)

现在让我们绘制最终图以可视化神经网络的实际值和预测值。

# Plotting the final graph
plot(test$medv, pr.nn_, 
                col = 'green', 
                main = 'Real vs predicted NN',
                pch = 18, cex = 0.7)
points(test$medv, pr.lm, 
                  col = 'blue', 
                  pch = 18, cex = 0.7)
abline(0, 1, lwd = 2)
legend('bottomright', 
        legend = c('Real', 'Predicted'),
        pch = 18, 
        col = c('green', 'blue'))

输出:
输出屏幕