探索 R 库:Rpart
介绍
Rpart是 R 中一个强大的机器学习库,用于构建分类和回归树。该库实现了递归分区,非常易于使用。在本指南中,您将学习如何使用R 中的rpart库。
数据
在本指南中,您将使用包含 600 个观测值和 8 个变量的贷款申请人的虚构数据,如下所述:
Is_graduate:申请人是否为毕业生(“是”)或不是(“否”)
收入:申请人的年收入(美元)
Loan_amount:提交申请的贷款金额(美元)
Credit_score:申请人的信用评分是否令人满意(“Satisfactory”)或不令人满意(“Not_Satisfactory”)
审批状态:贷款申请是否获得批准(“是”)或未获得批准(“否”)
年龄:申请人的年龄(岁)
投资额:申请人申报的股票和共同基金投资总额(美元)
目的:申请贷款的目的
第一步是加载所需的库和数据。
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函数的重要参数如下。
公式:将目标变量与独立特征联系起来的公式。
data:用于建模的数据。在本例中,您将在训练数据上构建模型。
method:定义算法。它可以是anova、poisson、class或exp之一。在本例中,目标变量是分类变量,因此您将使用 class 作为方法。
minsplit:为了尝试分裂,节点中必须存在的最小观察数。
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)
上图显示了算法用于对观察结果进行分类的重要特征。变量Purpose和Credit_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 进行数据科学和机器学习的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~