决策树——CART——之R语言rpart包

本文详细介绍了如何使用R语言和RStudio构建银行营销决策树模型,包括环境准备、下载安装所需包、数据读取、模型训练与评估等步骤。重点展示了如何处理缺失值、调整模型参数以提高预测准确性,并提供了完整的代码实现和数据预测过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R是一种用于统计计算与作图的开源软件,同时也是一种编程语言,它广泛应用于企业和学术界的数据分析领域,正在成为最通用的语言之一。由于近几年数据挖掘、大数据等概念的走红,R也越来越多的被人关注。

一、环境准备

操作系统windows

下载安装地址:http://mirrors.xmu.edu.cn/CRAN/

下载安装RStudio一个非常实用的R语言的IDE,是一个免费的软件

 地址:http://www.rstudio.com/products/RStudio/#Desk

二、下载安装rpart

点击InstallPackages

packages中输入:rpart->Install

等待安装完成。

注:Installfrom中可以选择安装方式,图中显示的是从CRAN中通过网络连接下载,也可以选择在本地文件中寻找package安装。

三、下载数据

我试验的数据是从UCI上下载的数据,当然也可以用rpart包中自带的数据集。

UCI下载数据地址:http://archive.ics.uci.edu/ml/datasets/Bank+Marketing

将数据解压后,会有许多.csv格式的数据文件,在这里本次试验选择的是bank.csv

四、使用R读取数据

打开RStudio

在控制台

或者新建一个R Script

接下来我们在R Script中书写代码,同样,也可以在控制台上一行一行的书写,一条一条的执行,但是,代码换行时要按shift+Enter

 

 bank <- read.csv("D:/data/MachineLearning/bank/bank.csv",header=TRUE,sep=";") #读取bank.csv数据文件
 #注意:windows文件路径复制后文件的分隔符为“\”,但是R语言中不识别这种分隔符,她只识别“/”,
 #header=TRUE表示使用文件的头标签,默认为FALSE,sep=";"表示数据用分号分隔,默认为"",
 bank_train <- bank[1:4000,] #对读入的数据人为分割为训练组和测试组,
 bank_test <- bank[4001:4521,1:16]
 bank_test1 <- bank[4001:4521,]
 library(rpart)  #在使用包前首先要使用该命令导入包,也可以在Packages中包前的框框中打钩
 fit <- rpart(y~age+job+marital+education+default+balance+housing+loan+contact
              +day+month+duration+campaign+pdays+previous+poutcome,method="class",
              data=bank_train)
 # 我们可以使用help(rpart)来获取rpart的使用帮助,帮助文档Usage如下
 # rpart(formula, data, weights, subset, na.action = na.rpart, method,
 # model = FALSE, x = FALSE, y = TRUE, parms, control, cost, ...)
 # 在这里我们只设置formula,data,model这三个参数
 plot(fit,uniform=TRUE,main="Classification Tree for Bank") #画决策树图
 text(fit,use.n=TRUE,all=TRUE)
 #至此,第一个决策树图画好了,第一个训练的模型保存在fit中
 
 #下面我们对测试数据进行预测(此处预测的是y值是yes or no)
 result <- predict(fit,bank_test,type="class") 
 # 在控制台中直接输入result即可查看预测的结果,由于数目较多,我们写一个小的程序,将预测
 # 结果同真实值比较一下,看正确率有多少
 # 详情见 count_result.R
 # 我们写完的函数保存在本地磁盘中,使用时必须指明路径,使用source()函数
 source("D:/work/R_work/count_result.R")
 count_result(result,bank_test1) #结果为0.9021
 
 #通过观察数据,我们可以发现,在poutcome与contact属性中,有许多unknown的值,
 #通过summary(bank)我们可以看到,unknown值在其所在属性框中所占比例过大,而且该
 #值其实为缺失值,所以我们使用rpart()函数中的na.action参数,来处理缺失值
 #由于R只识别NA缺失值,所以我们需要对数据框中的unknown值进行处理
 n <- nrow(bank)  #获得data的行数
 for (i in 1:n){
   if(bank[i,9]=="unknown"){   #判断第i,9个数据是否为unknown
     bank[i,9] <- NA           #将第i,9个数据替换为NA
   }
   if(bank[i,16]=="unknown"){
     bank[i,16] <- NA
   }
 }
 #我们已知第9、16列为含有unknown的属性框
 fit2 <- rpart(y~age+job+marital+education+default+balance+housing+loan+contact
               +              +day+month+duration+campaign+pdays+previous+poutcome,method="class",
               +              data=bank_train,na.action=na.rpart)
 plot(fit,uniform=TRUE,main="Classification Tree for Bank") #画决策树图
 text(fit,use.n=TRUE,all=TRUE)
 result2 <- predict(fit2,bank_test,type="class")
 count_result(result2)# 结果仍为0.9021表示之前的关于缺失值的推测不准确
 
 #下边我们探索使用rpart()的control参数设置 
 fit3 <- rpart(y~age+job+marital+education+default+balance+housing+loan+contact
               +              +day+month+duration+campaign+pdays+previous+poutcome,method="class",
               +              data=bank_train,na.action=na.rpart,control=rpart.control(minsplit=20,cp=0.001))
 result3 <- predict(fit3,bank_test,type="class")
 count_result(result3,bank_test1)# 结果为0.90403 预测的准确度有所上升
 #下边我们队minsplit(最小分割点)设大一点 40
 fit4 <- rpart(y~age+job+marital+education+default+balance+housing+loan+contact
               +              +day+month+duration+campaign+pdays+previous+poutcome,method="class",
               +              data=bank_train,na.action=na.rpart,control=rpart.control(minsplit=40,cp=0.001))
 result4 <- predict(fit4,bank_test,type="class")
 count_result(result4,bank_test1) #结果为0.9136 这说明随着分割点的增多,预测的准确率越高,

关于rpart的其他函数的功能探索,请继续关注...

count_result.R

count_result <- function(result,data_test){
  n <- length(result)
  count_right <- 0
  i <- 1
  for (i in 1:n){
    if (result[i]==data_test[i,17]){
      count_right = count_right+1
    }
  }
  print(count_right/n)
}



 

### 构建R语言中的决策树二分类模型 要在R语言中构建一个基于决策树的二分类模型,可以使用`rpart`来完成这一任务。以下是关于如何实现的具体说明: #### 使用 `rpart()` 函数创建决策树 `rpart` 是 R 中用于生成决策树的一个常用库。它支持回归和分类两种类型的决策树。为了构建一个二分类模型,可以通过指定目标变量为因子型(factor type)并调用 `rpart()` 来实现。 ```R library(rpart) # 假设数据框名为 'data',其中 'target' 列为目标变量 tree_model <- rpart(target ~ ., data = data, method = "class") # 设置method="class"表示分类问题 print(tree_model) # 打印生成的决策树模型 ``` 此代码片段定义了一个简单的决策树模型[^1]。这里的关键参数括: - **formula**: 定义输入特征与目标之间的关系。 - **data**: 提供的数据集名称。 - **method**: 对于分类问题是 `"class"`;如果是回归,则应设置为 `"anova"`。 #### 可视化决策树 为了让结果更加直观易懂,还可以利用额外工具绘制图形化的决策树结构。 ```R library(rpart.plot) rpart.plot(tree_model) # 绘制决策树图 ``` 这段脚本会生成一张易于解读的图表展示整个决策逻辑链路[^2]。 #### 防止过拟合——剪枝操作 由于未加控制地扩展分支可能导致最终得到一棵过于复杂的树形结构进而引发过度匹配现象 (overfitting),因此有必要实施适当的修剪措施以优化泛化能力。 ```R # 计算最佳复杂度参数 cp value via cross-validation. cv_results <- validate.rpart(tree_model)$cptable[, "CP"] optimal_cp <- cv_results[which.min(cv_results)] pruned_tree <- prune(tree_model, cp=optimal_cp) summary(pruned_tree) # 查看简化后的模型详情 ``` 上述过程展示了通过交叉验证寻找最优cp值的方法,并据此执行裁减动作[^3]。 #### CART算法简介及其优势对比ID3 值得注意的是,在实际应用过程中可能会遇到不同版本或者改进版的决策树算法比如CART(Classification And Regression Tree).相比传统的ID3,CART采用基尼指数代替信息增益作为分裂准则之一,同时允许处理连续数值型字段以及缺失值情况下的特殊策略调整等等特性使其表现更为稳健可靠[^4]. 综上所述,以上就是有关怎样运用R编程环境搭建起一套完整的针对两类别区分用途之上的机器学习解决方案概述.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值