在 R 中构建分类模型

发布日期:2026-06-25 05:30:03   来源 : 杭州电子商务研究院    浏览量 :8
杭州电子商务研究院 发布日期:2026-06-25 05:30:03  
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. 目的:申请贷款的目的

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

      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 进行数据科学的更多信息,请参阅以下指南:

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

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

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

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

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

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

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

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

  9. 使用 R 重塑数据

  10. 使用 R 中的数据类型

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

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

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