R语言 如何使用神经网络进行分类

R语言 如何使用神经网络进行分类

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

神经网络

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

在R编程中如何使用神经网络进行分类

分类法

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

在R编程中如何使用神经网络进行分类

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

在R中的实现

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

示例:

加载数据集如下。

# Generating random number
# Using set.seed()
set.seed(500)
  
# Import required library
library(MASS)
  
# Import data set
data <- Boston
head(data)
R
    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
R

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

# 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)
R

在拟合和划分我们的数据集后,现在准备神经网络的拟合,这可以按以下方式进行。

# 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, ]
R

现在使用 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)
R

之后,编译我们的函数,用神经网络来预测 medv ,如下所示。

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

现在,让我们绘制最终的图表,以直观地看到神经网络的真实值和预测值。

# Plotting the final graph
plot(testmedv, pr.nn_, 
                col = 'green', 
                main = 'Real vs predicted NN',
                pch = 18, cex = 0.7)
points(testmedv, 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'))
R

输出:
在R编程中如何使用神经网络进行分类

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册