探索 R 库:CARET
介绍
R 是一种功能强大的数据科学编程语言,可提供大量机器学习库。最强大且最受欢迎的软件包之一是caret库,它遵循一致的数据准备、模型构建和模型评估语法,让数据科学从业者可以轻松完成工作。
Caret代表分类和回归训练,可以说是 R 中最大的项目。该包足以解决几乎所有分类或回归机器学习问题。它支持大约 200 种机器学习算法,可以轻松执行关键任务,例如数据准备、数据清理、特征选择和模型验证。
在本指南中,您将学习如何使用 R 中的 caret 库。
数据
在本指南中,您将使用一个虚构的贷款申请人数据集,其中包含 600 个观测值和 8 个变量,如下所述:
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是否令人满意(“Satisfactory”)或不令人满意(“Not_Satisfactory”)
审批状态:贷款申请是否获得批准(“是”)或未获得批准(“否”)
年龄:申请人的年龄(岁)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
第一步是加载所需的库和数据。
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 进行数据科学和机器学习的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~