使用 R 进行神经网络机器学习

发布日期:2026-06-25 05:29:04   来源 : 杭州电子商务研究院    浏览量 :8
杭州电子商务研究院 发布日期:2026-06-25 05:29:04  
8

介绍

神经网络用于解决许多具有挑战性的人工智能问题。它们通常比传统的机器学习模型表现更好,因为它们具有非线性、变量交互和定制的优势。在本指南中,您将学习使用 R 构建神经网络机器学习模型的步骤。

数据

本指南的目的是建立一个神经网络模型来预测贷款申请人的批准状态。我们将使用一个包含 600 个观测值和 10 个变量的虚构数据集,如下所述:

  1. Marital_status:申请人是否已婚(“是”)或未婚(“否”)

  2. Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)

  3. 收入:申请人的年收入(美元)

  4. Loan_amount:提交申请的贷款金额(美元)

  5. Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)

  6. Approval_status:贷款申请是否被批准(“是”)或不被批准(“否”)

  7. 年龄:申请人的年龄(岁)

  8. 性别:申请人是男性(“M”)还是女性(“F”)

  9. 投资额:申请人申报的股票和共同基金投资总额(美元)

  10. 目的:申请贷款的目的

评估指标

我们将使用准确率来评估模型的性能,准确率表示正确分类的案例百分比。从数学上讲,对于二元分类器,它表示为准确率 = (TP+TN)/(TP+TN+FP+FN),其中:

  1. 真正例(True Positive,TP):具有正标签的案例,且被正确归类为正例。

  2. 真阴性,或 TN:带有阴性标签的案例,但被正确归类为阴性。

  3. 假阳性(FP):带有负标签的案例被错误地归类为阳性。

  4. 假阴性,或 FN:具有正标签的案例被错误地归类为负数。

让我们首先加载所需的库和数据。

      library(plyr)
library(readr)
library(dplyr)
library(caret)
library(neuralnet)
library(nnet)

dat <- read_csv("data_2.csv")

glimpse(dat)
    

输出:

      Observations: 600
Variables: 10
$ Marital_status  <chr> "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", ...
$ Is_graduate     <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Income          <int> 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...
$ Loan_amount     <int> 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...
$ Credit_score    <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Satis...
$ approval_status <chr> "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "Yes", "...
$ Age             <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...
$ Sex             <chr> "F", "F", "M", "F", "M", "M", "M", "F", "F", "F", "M",...
$ Investment      <int> 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690...
$ Purpose         <chr> "Education", "Travel", "Others", "Others", "Travel", "...
    

输出显示数据集有四个数值变量(标记为int)和六个字符变量(标记为chr)。

数据分区

我们将在训练集上构建模型,并在测试集上评估其性能。这称为用于评估模型性能的保留验证方法。下面的第一行代码设置了结果可重复性的随机种子。第二行加载将用于数据分区的caTools包,而第三至第五行创建训练和测试数据集。训练数据集包含 70% 的数据(10 个变量的 420 个观测值),测试数据集包含剩余的 30%(10 个变量的 180 个观测值)。

      library(caTools)
set.seed(100)

spl = sample.split(dat$approval_status, SplitRatio = 0.7)
train = subset(dat, spl==TRUE)
test = subset(dat, spl==FALSE)

print(dim(train)); print(dim(test))
    

输出:

      1] 420  10

[1] 180  10
    

构建、预测和评估模型

下面的第一行代码使用trainControl()函数来控制用于训练算法的参数。方法参数指定重采样技术。在本例中,我们使用重复交叉验证。number 参数指定折叠或采样迭代的次数,在本例中为 10。repeat参数指定要计算的完整折叠集的数量,在本例中为 5。我们可以使用?trainControl命令查看完整的参数集

下面第二行代码使用nnet算法训练神经网络算法。preProcess参数对数值变量执行标准化。

      train_params <- trainControl(method = "repeatedcv", number = 10, repeats=5)

nnet_model <- train(train[,-6], train$approval_status,
                 method = "nnet",
                 trControl= train_params,
                 preProcess=c("scale","center"),
                 na.action = na.omit
)
    

算法训练完成,下一步是模型评估。我们首先使用以下代码计算基线准确率。由于目标变量的多数类比例为 0.68,因此基线准确率为 68%。

      prop.table(table(train$approval_status))   #Baseline Accuracy
    

输出:

      No       Yes 
0.3166667 0.6833333
    

现在让我们评估模型性能,它应该比基线准确率更好。我们从训练数据开始,其中第一行代码在训练集上生成预测。第二行代码创建混淆矩阵,第三行使用混淆矩阵打印模型在训练数据上的准确率。训练数据集准确率为 96%。

我们将在测试数据上重复此过程,准确率将达到 87.2%。

      # Predictions on the training set
nnet_predictions_train <-predict(nnet_model, train)

# Confusion matrix on training data
table(train$approval_status, nnet_predictions_train)
(278+125)/nrow(train)                    

#Predictions on the test set
nnet_predictions_test <-predict(nnet_model, test)

# Confusion matrix on test set
table(test$approval_status, nnet_predictions_test)
157/nrow(test)
    

输出:

      # Confusion matrix and accuracy on train data

    nnet_predictions_train
       No Yes
  No  125   8
  Yes   9 278


[1] 0.9595238

# Confusion matrix and accuracy on test data
    nnet_predictions_test
       No Yes
  No   42  15
  Yes   8 115

[1] 0.8722222
    

结论

在本指南中,您学习了如何使用 R 中的神经网络库构建机器学习模型。数据的基线准确率为 68%,而训练和测试数据集的准确率分别为 96% 和 87%。总体而言,神经网络模型表现良好,并且在训练集和测试集上都大大超过了基线准确率。

要了解有关使用 R 进行数据科学的更多信息,请参阅以下指南:

  1. 使用 R 的描述性统计解释数据

  2. 使用 R 统计模型解释数据

  3. 使用 R 进行时间序列预测

  4. 假设检验 - 用统计模型解释数据

  5. 使用 R 对文本数据进行机器学习

  6. 使用 R 中的词云对文本数据进行可视化

  7. 使用 R 进行可视化数据探索

  8. 处理 R 中的缺失、无效和重复数据

  9. 使用 R 重塑数据

  10. 使用 R 中的数据类型

  11. 使用 R 拆分和合并数据

  12. 使用 R 进行线性、套索和岭回归

  13. 使用 R 创建数据表

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据