好的,下面是一个使用R语言进行神经网络分类问题的示例代码。我们将使用著名的鸢尾花数据集(Iris dataset)进行演示。这个数据集包含了150条记录,每条记录有4个特征和一个目标变量(花的种类)。
安装并加载所需的包
首先,我们需要安装并加载所需的包,如neuralnet和nnet。
install.packages(“neuralnet”) install.packages(“nnet”) library(neuralnet) library(nnet)加载和准备数据
接下来,我们将加载Iris数据集,并将数据标准化,以便神经网络能够更好地处理。
# 加载内置的Iris数据集 data(iris) # 查看数据集的结构 str(iris) # 标准化函数 normalize <- function(x) { return ((x – min(x)) / (max(x) – min(x))) } # 对特征进行标准化 iris_norm <- as.data.frame(lapply(iris[1:4], normalize)) iris_norm$Species <- iris$Species # 将目标变量转换为因子类型 iris_norm$Species <- as.factor(iris_norm$Species) # 将数据集分为训练集和测试集 set.seed(123) index <- sample(1:nrow(iris_norm), size = 0.7 * nrow(iris_norm)) train_data <- iris_norm[index, ] test_data <- iris_norm[-index, ]创建和训练神经网络模型
我们将使用neuralnet包创建一个简单的神经网络模型,并进行训练。
# 创建公式 formula <- as.formula(“Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width”) # 训练神经网络模型 nn_model <- neuralnet(formula, data = train_data, hidden = c(5, 3), linear.output = FALSE) # 查看模型结果 print(nn_model)可视化神经网络
我们可以使用内置的绘图功能来可视化神经网络。
# 绘制神经网络 plot(nn_model)进行预测并评估模型
使用测试数据进行预测,并评估模型的性能。
# 进行预测 nn_predictions <- compute(nn_model, test_data[, 1:4]) # 将预测结果转换为因子类型 nn_predicted <- as.factor(ifelse(nn_predictions$net.result[,1] > 0.5, “versicolor”, ifelse(nn_predictions$net.result[,2] > 0.5, “virginica”, “setosa”))) # 查看混淆矩阵 confusion_matrix <- table(test_data$Species, nn_predicted) print(confusion_matrix) # 计算准确率 accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(paste(“Accuracy: “, accuracy))完整代码
下面是完整的代码段,整合了上述各个步骤:
install.packages(“neuralnet”) install.packages(“nnet”) library(neuralnet) library(nnet) # 加载内置的Iris数据集 data(iris) # 查看数据集的结构 str(iris) # 标准化函数 normalize <- function(x) { return ((x – min(x)) / (max(x) – min(x))) } # 对特征进行标准化 iris_norm <- as.data.frame(lapply(iris[1:4], normalize)) iris_norm$Species <- iris$Species # 将目标变量转换为因子类型 iris_norm$Species <- as.factor(iris_norm$Species) # 将数据集分为训练集和测试集 set.seed(123) index <- sample(1:nrow(iris_norm), size = 0.7 * nrow(iris_norm)) train_data <- iris_norm[index, ] test_data <- iris_norm[-index, ] # 创建公式 formula <- as.formula(“Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width”) # 训练神经网络模型 nn_model <- neuralnet(formula, data = train_data, hidden = c(5, 3), linear.output = FALSE) # 查看模型结果 print(nn_model) # 绘制神经网络 plot(nn_model) # 进行预测 nn_predictions <- compute(nn_model, test_data[, 1:4]) # 将预测结果转换为因子类型 nn_predicted <- as.factor(ifelse(nn_predictions$net.result[,1] > 0.5, “versicolor”, ifelse(nn_predictions$net.result[,2] > 0.5, “virginica”, “setosa”))) # 查看混淆矩阵 confusion_matrix <- table(test_data$Species, nn_predicted) print(confusion_matrix) # 计算准确率 accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(paste(“Accuracy: “, accuracy))以上代码演示了如何使用R语言中的neuralnet包创建和训练一个简单的神经网络模型,并使用该模型对鸢尾花数据集进行分类预测。通过标准化数据、分割数据集、训练模型、进行预测和评估模型,你可以全面了解如何在R中使用神经网络进行分类任务。