探索 R 库:Rpart

发布日期:2026-07-07 09:15:05   来源 : 杭州电子商务研究院    浏览量 :16
杭州电子商务研究院 发布日期:2026-07-07 09:15:05  
16

介绍

Rpart是 R 中一个强大的机器学习库,用于构建分类和回归树。该库实现了递归分区,非常易于使用。在本指南中,您将学习如何使用R 中的rpart库。

数据

在本指南中,您将使用包含 600 个观测值和 8 个变量的贷款申请人的虚构数据,如下所述:

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

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

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

  4. Credit_score:申请人的信用评分是否令人满意(“Satisfactory”)或不令人满意(“Not_Satisfactory”)

  5. 审批状态:贷款申请是否获得批准(“是”)或未获得批准(“否”)

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

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

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

第一步是加载所需的库和数据。

      library(plyr)
library(readr)
library(dplyr)
library(caret)
library(rpart)
library(rpart.plot)

dat <- read_csv("data.csv")

glimpse(dat)
    

输出:

      Observations: 600
Variables: 8
$ Is_graduate     <chr> "No", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Income          <int> 3000, 3000, 3000, 3000, 8990, 13330, 13670, 13670, 173...
$ Loan_amount     <dbl> 6000, 9000, 9000, 9000, 8091, 11997, 12303, 12303, 155...
$ Credit_score    <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Not _...
$ approval_status <chr> "Yes", "Yes", "No", "No", "Yes", "No", "Yes", "Yes", "...
$ Age             <int> 27, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...
$ Investment      <dbl> 9331, 9569, 2100, 2100, 6293, 9331, 9569, 9569, 12124,...
$ Purpose         <chr> "Education", "Travel", "Others", "Others", "Travel", "...
    

输出显示数据集有四个数值变量(标记为int)和四个字符变量(标记为chr)。您将使用下面的代码行将它们转换为因子变量。

      names <- c(1,4,5,8)
dat[,names] <- lapply(dat[,names] , factor)
glimpse(dat)
    

输出:

      Observations: 600
Variables: 8
$ Is_graduate     <fct> No, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, No, Y...
$ Income          <int> 3000, 3000, 3000, 3000, 8990, 13330, 13670, 13670, 173...
$ Loan_amount     <dbl> 6000, 9000, 9000, 9000, 8091, 11997, 12303, 12303, 155...
$ Credit_score    <fct> Satisfactory, Satisfactory, Satisfactory, Not _satisfa...
$ approval_status <fct> Yes, Yes, No, No, Yes, No, Yes, Yes, Yes, No, No, No, ...
$ Age             <int> 27, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...
$ Investment      <dbl> 9331, 9569, 2100, 2100, 6293, 9331, 9569, 9569, 12124,...
$ Purpose         <fct> Education, Travel, Others, Others, Travel, Travel, Tra...
    

数据分区

createDataPartition函数用于将数据拆分为训练数据和测试数据。这被称为用于评估模型性能的holdout-validation方法。

下面的第一行代码设置了随机种子,以确保结果的可重复性。第二行执行数据分区,而第三行和第四行创建训练和测试集。最后,第五行打印训练和测试数据的维度。

      set.seed(100)
trainRowNumbers <- createDataPartition(dat$approval_status, p=0.7, list=FALSE)
train <- dat[trainRowNumbers,]
test <- dat[-trainRowNumbers,]
dim(train); dim(test)
    

输出:

      1] 420   8

[1] 180   8
    

特征缩放

由于变量的单位相差很大,数值特征需要缩放,这可能会影响建模过程。下面的第一行代码创建了一个包含数值变量名称的列表。第二行使用caret库中的preProcess函数完成此任务。所采用的方法是将数值特征居中并缩放,预处理对象仅适用于训练数据。

缩放应用于训练和测试数据分区,这在下面的第三行和第四行代码中完成。第五行打印预处理后的训练集摘要。输出显示现在所有数字特征的平均值均为零。

      cols = c('Income', 'Loan_amount', 'Age', 'Investment')

pre_proc_val <- preProcess(train[,cols], method = c("center", "scale"))

train[,cols] = predict(pre_proc_val, train[,cols])
test[,cols] = predict(pre_proc_val, test[,cols])

summary(train)
    

输出:

      Is_graduate     Income         Loan_amount                 Credit_score
 No : 90     Min.   :-1.3309   Min.   :-1.6568   Not _satisfactory: 97  
 Yes:330     1st Qu.:-0.5840   1st Qu.:-0.3821   Satisfactory     :323  
             Median :-0.3190   Median :-0.1459                          
             Mean   : 0.0000   Mean   : 0.0000                          
             3rd Qu.: 0.2341   3rd Qu.: 0.2778                          
             Max.   : 5.2695   Max.   : 3.7541                          
 approval_status      Age               Investment            Purpose   
 No :133         Min.   :-1.7607181   Min.   :-1.09348   Education: 76  
 Yes:287         1st Qu.:-0.8807620   1st Qu.:-0.60103   Home     :100  
                 Median :-0.0008058   Median :-0.28779   Others   : 45  
                 Mean   : 0.0000000   Mean   : 0.00000   Personal :113  
                 3rd Qu.: 0.8114614   3rd Qu.: 0.02928   Travel   : 86  
                 Max.   : 1.8944843   Max.   : 4.54891
    

使用 rpart 构建模型

数据已准备好进行建模,下一步是构建分类决策树。首先在第一行代码中设置种子。第二行使用rpart函数指定用于控制模型训练过程的参数。

rpart函数的重要参数如下。

  1. 公式:将目标变量与独立特征联系起来的公式。

  2. data:用于建模的数据。在本例中,您将在训练数据上构建模型。

  3. method:定义算法。它可以是anovapoissonclassexp之一。在本例中,目标变量是分类变量,因此您将使用 class 作为方法

  4. minsplit:为了尝试分裂,节点中必须存在的最小观察数。

  5. minbucket:任何终端节点中的最小观察数。如果仅指定 minbucket 或 minsplit 之一,则代码会根据需要将 minsplit 设置为 minbucket*3 或 minbucket 设置为 minsplit/3。

您将使用以下参数构建分类决策树:

      set.seed(100)

tree_model = rpart(approval_status ~ Is_graduate + Income + Loan_amount + Credit_score + Age + Investment + Purpose, data = train, method="class", minsplit = 10, minbucket=3)
    

您可以使用以下命令检查模型。

      summary(tree_model)
    

输出:

      Call:
rpart(formula = approval_status ~ Is_graduate + Income + Loan_amount + 
    Credit_score + Age + Investment + Purpose, data = train, 
    method = "class", minsplit = 10, minbucket = 3)
  n= 420 

          CP nsplit rel error    xerror       xstd
1 0.60902256      0 1.0000000 1.0000000 0.07167876
2 0.06766917      1 0.3909774 0.3909774 0.05075155
3 0.01503759      3 0.2556391 0.2631579 0.04258808
4 0.01002506      6 0.2030075 0.2706767 0.04313607
5 0.01000000      9 0.1729323 0.2857143 0.04420254

Variable importance
     Purpose Credit_score          Age   Investment  Loan_amount       Income 
          46           31           17            2            2            1
    

决策树的一个优点是你可以真正地将模型可视化。以下代码可以实现这一点。

      prp(tree_model)
    

上图显示了算法用于对观察结果进行分类的重要特征。变量PurposeCredit_score成为执行递归分区的最重要变量。

模型评估

您已经在训练数据上构建了算法,下一步是在训练和测试数据集上评估其性能。

下面的代码根据训练数据进行预测,创建混淆矩阵,最后计算模型准确率。

      PredictCART_train = predict(tree_model, data = train, type = "class")

table(train$approval_status, PredictCART_train)

(131+266)/(131+266+23) #94.5%
    

输出:

      PredictCART_train
       No Yes
  No  131   2
  Yes  21 266
  
 (131+266)/(131+266+23) #94.5%
    

在训练数据上的准确率达到了 94.5%,非常不错。下一步就是重复上述步骤,在测试数据上检查模型的准确率。

      PredictCART = predict(tree_model, newdata = test, type = "class")

table(test$approval_status, PredictCART)

166/180 #92.2%
    

输出:

      PredictCART
       No Yes
  No   53   4
  Yes  10 113
  
  166/180  #92.2%
    

输出结果显示,测试数据的准确率为 92%。由于该模型在训练和测试数据上都表现良好,因此表明该模型具有稳健性,并且性能良好。

结论

在本指南中,您了解了rpart库,它是 R 中用于构建非线性回归树的最强大的库之一。您学习了如何构建和评估决策树模型,还学习了如何使用prp函数可视化决策树

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

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

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

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

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

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

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

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

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