使用 R 进行神经网络机器学习
介绍
神经网络用于解决许多具有挑战性的人工智能问题。它们通常比传统的机器学习模型表现更好,因为它们具有非线性、变量交互和定制的优势。在本指南中,您将学习使用 R 构建神经网络机器学习模型的步骤。
数据
本指南的目的是建立一个神经网络模型来预测贷款申请人的批准状态。我们将使用一个包含 600 个观测值和 10 个变量的虚构数据集,如下所述:
Marital_status:申请人是否已婚(“是”)或未婚(“否”)
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)
Approval_status:贷款申请是否被批准(“是”)或不被批准(“否”)
年龄:申请人的年龄(岁)
性别:申请人是男性(“M”)还是女性(“F”)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
评估指标
我们将使用准确率来评估模型的性能,准确率表示正确分类的案例百分比。从数学上讲,对于二元分类器,它表示为准确率 = (TP+TN)/(TP+TN+FP+FN),其中:
真正例(True Positive,TP):具有正标签的案例,且被正确归类为正例。
真阴性,或 TN:带有阴性标签的案例,但被正确归类为阴性。
假阳性(FP):带有负标签的案例被错误地归类为阳性。
假阴性,或 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 进行数据科学的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~