在 R 中构建分类模型
介绍
构建分类模型是最重要的数据科学用例之一。分类模型是预测分类标签的模型。这方面的一些示例包括预测客户是否会流失或银行贷款是否会违约。在本指南中,您将学习如何在 R 中构建和评估分类模型。我们将训练逻辑回归算法,这是最古老但最强大的分类算法之一。
数据
在本指南中,我们将使用一个虚构的贷款申请人数据集,其中包含 600 个观测值和 10 个变量,如下所述:
Marital_status:申请人是否已婚(“是”)或未婚(“否”)
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是好(“好”)还是不好(“坏”)
Approval_status:贷款申请是否被批准(“是”)或不被批准(“否”)
年龄:申请人的年龄(岁)
性别:申请人是男性(“M”)还是女性(“F”)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
让我们首先加载所需的库和数据。
library(plyr)
library(readr)
library(dplyr)
library(caret)
dat <- read_csv("data.csv")
glimpse(dat)
输出:
Observations: 600
Variables: 10
$ Marital_status <chr> "Yes", "No", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Ye...
$ Is_graduate <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Y...
$ Income <int> 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136700, 17320...
$ Loan_amount <int> 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123030, 15588...
$ Credit_score <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Satisfactory", ...
$ approval_status <chr> "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "Yes", "Yes", "No"...
$ Age <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 30, ...
$ Sex <chr> "F", "F", "M", "F", "M", "M", "M", "F", "F", "F", "M", "F", "F",...
$ Investment <int> 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690, 121240, ...
$ Purpose <chr> "Education", "Travel", "Others", "Others", "Travel", "Travel", "...
输出显示数据集有四个数字(标记为int)和六个字符变量(标记为chr)。我们将使用下面的代码行将它们转换为因子变量。
names <- c(1,2,5,6,8,10)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
输出:
Observations: 600
Variables: 10
$ Marital_status <fct> Yes, No, Yes, No, Yes, Yes, Yes, Yes, Yes, Yes, No, No, Yes, Yes...
$ Is_graduate <fct> No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, No, Yes, Yes, Y...
$ Income <int> 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136700, 17320...
$ Loan_amount <int> 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123030, 15588...
$ Credit_score <fct> Satisfactory, Satisfactory, Satisfactory, Satisfactory, Satisfac...
$ approval_status <fct> Yes, Yes, No, No, Yes, No, Yes, Yes, Yes, No, No, No, Yes, No, Y...
$ Age <int> 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 30, ...
$ Sex <fct> F, F, M, F, M, M, M, F, F, F, M, F, F, M, M, M, M, M, M, M, M, M...
$ Investment <int> 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690, 121240, ...
$ Purpose <fct> Education, Travel, Others, Others, Travel, Travel, Travel, Educa...
数据分区
我们将在训练数据集上构建模型,并在测试数据集上评估其性能。这称为评估模型性能的保留验证方法。
下面的第一行代码设置了随机种子,以确保结果的可重复性。第二行加载用于数据分区的caTools包,而第三至第五行创建训练和测试数据集。训练数据集包含 70% 的数据(10 个变量的 420 个观测值),而测试数据包含剩余的 30%(10 个变量的 180 个观测值)。
set.seed(100)
library(caTools)
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
建立、预测和评估模型
为了拟合逻辑回归模型,第一步是实例化算法。这在下面的第一行代码中使用glm()函数完成。第二行打印训练模型的摘要。
model_glm = glm(approval_status ~ . , family="binomial", data = train)
summary(model_glm)
输出:
Call:
glm(formula = approval_status ~ ., family = "binomial", data = train)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.19539 -0.00004 0.00004 0.00008 2.47763
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 6.238e-02 9.052e+03 0.000 1.0000
Marital_statusYes 4.757e-01 4.682e-01 1.016 0.3096
Is_graduateYes 5.647e-01 4.548e-01 1.242 0.2144
Income 2.244e-06 1.018e-06 2.204 0.0275 *
Loan_amount -3.081e-07 3.550e-07 -0.868 0.3854
Credit_scoreSatisfactory 2.364e+01 8.839e+03 0.003 0.9979
Age -7.985e-02 1.360e-02 -5.870 4.35e-09 ***
SexM -5.879e-01 6.482e-01 -0.907 0.3644
Investment -2.595e-06 1.476e-06 -1.758 0.0787 .
PurposeHome 2.599e+00 9.052e+03 0.000 0.9998
PurposeOthers -4.172e+01 3.039e+03 -0.014 0.9890
PurposePersonal 1.577e+00 2.503e+03 0.001 0.9995
PurposeTravel -1.986e+01 1.954e+03 -0.010 0.9919
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 524.44 on 419 degrees of freedom
Residual deviance: 166.96 on 407 degrees of freedom
AIC: 192.96
Number of Fisher Scoring iterations: 19
上述输出中的重要性代码“***”显示了特征变量的相对重要性。让我们进一步评估模型,首先使用以下代码设置基线准确度。由于目标变量的多数类比例为 0.68,因此基线准确度为 68%。
#Baseline Accuracy
prop.table(table(train$approval_status))
输出:
No Yes
0.3166667 0.6833333
现在让我们评估模型在训练和测试数据上的表现,理想情况下,该表现应该优于基线准确度。我们首先使用下面的第一行代码对训练数据生成预测。第二行创建阈值为 0.5 的混淆矩阵,这意味着对于等于或大于 0.5 的概率预测,算法将预测approved_status变量的响应为Yes。第三行使用混淆矩阵打印模型在训练数据上的准确度,准确度为 91%。
然后我们在测试数据上重复此过程,准确率达到了 88%。
# Predictions on the training set
predictTrain = predict(model_glm, data = train, type = "response")
# Confusion matrix on training data
table(train$approval_status, predictTrain >= 0.5)
(114+268)/nrow(train) #Accuracy - 91%
#Predictions on the test set
predictTest = predict(model_glm, newdata = test, type = "response")
# Confusion matrix on test set
table(test$approval_status, predictTest >= 0.5)
158/nrow(test) #Accuracy - 88%
输出:
# Confusion matrix and accuracy on training data
FALSE TRUE
No 114 19
Yes 19 268
[1] 0.9095238
# Confusion matrix and accuracy on testing data
FALSE TRUE
No 44 13
Yes 9 114
[1] 0.8777778
结论
在本指南中,您学习了使用强大的逻辑回归算法在 R 中构建分类模型的技术。数据的基线准确率为 68%,而训练和测试数据的准确率分别为 91% 和 88%。总体而言,逻辑回归模型在训练和测试数据集上都大大超过了基线准确率,结果非常好。
要了解有关使用 R 进行数据科学的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~