探索 R 库:CARET

发布日期:2026-07-08 08:37:05   来源 : 杭州电子商务研究院    浏览量 :7
杭州电子商务研究院 发布日期:2026-07-08 08:37:05  
7

介绍

R 是一种功能强大的数据科学编程语言,可提供大量机器学习库。最强大且最受欢迎的软件包之一是caret库,它遵循一致的数据准备、模型构建和模型评估语法,让数据科学从业者可以轻松完成工作。

Caret代表分类和回归训练,可以说是 R 中最大的项目。该包足以解决几乎所有分类或回归机器学习问题。它支持大约 200 种机器学习算法,可以轻松执行关键任务,例如数据准备、数据清理、特征选择和模型验证。

在本指南中,您将学习如何使用 R 中的 caret 库。

数据

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

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

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

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

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

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

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

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

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

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

      library(caret)
library(plyr)
library(readr)
library(dplyr)
library(ROSE)

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", "...
    

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

      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函数对于将数据拆分为训练数据集和测试数据集非常有用。此数据分区是必需的,因为您将在训练集上构建模型并在测试集上评估其性能。这称为用于评估模型性能的保留验证方法

下面的第一行代码设置了随机种子,以确保结果的可重复性。第二行执行数据分区,而第三行和第四行创建训练集和测试集。训练集包含 70% 的数据(10 个变量的 420 个观测值),测试集包含剩余的 30%(10 个变量的 180 个观测值)。

      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
    

模型建立

caret 中有几种可用的机器学习模型。您可以使用下面的代码查看这些模型。

      available_models <- paste(names(getModelInfo()), collapse=',  ')
available_models
    

输出:

      1] "ada
    

下一步是构建随机森林算法。首先在下面的第一行代码中设置种子。第二行指定用于控制模型训练过程的参数。这是通过 trainControl 函数完成

第三行训练由参数method="rf"指定的随机森林算法。选择准确率作为评估标准。

      set.seed(100)

control1 <- trainControl(sampling="rose",method="repeatedcv", number=5, repeats=5)

rf_model <- train(approval_status ~., data=train, method="rf", metric="Accuracy", trControl=control1)
    

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

      rf_model
    

输出:

      Random Forest 

420 samples
  7 predictor
  2 classes: 'No', 'Yes' 

No pre-processing
Resampling: Cross-Validated (5 fold, repeated 5 times) 
Summary of sample sizes: 336, 336, 336, 336, 336, 336, ... 
Addtional sampling using ROSE

Resampling results across tuning parameters:

  mtry  Accuracy   Kappa    
   2    0.8799087  0.7300565
   6    0.7163380  0.4289620
  10    0.6675567  0.3352061

Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 2.
    

模型评估

在训练数据上构建算法后,下一步是在测试数据集上评估其性能。下面的代码行在测试集上生成预测并打印混淆矩阵。

      predictTest = predict(rf_model, newdata = test, type = "raw")

table(test$approval_status, predictTest)
    

输出:

      predictTest
       No Yes
  No   56   1
  Yes  10 113
    

可以使用以下代码根据混淆矩阵计算准确度。

      (113+56)/nrow(test)
    

输出:

      1] 0.9388889
    

输出显示准确率为 94%,这表明模型表现良好。

结论

在本指南中,您了解了 caret 库,它是 R 中最强大的软件包之一。您还学习了如何扩展特征、创建数据分区以及训练和评估机器学习算法。

要了解有关使用 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
支持 反馈 关注 数据