java 分类回归树的构造过程_CART ( Classification and regression tree)分类回归树建立回归模型...

本文介绍了如何使用R语言的Cubist包建立分类回归树(CART)。通过设置种子保证可重复性,数据预处理,利用交叉验证调优参数,构建模型并进行预测,最后评估模型性能并解释规则。CART模型因其高精度和广泛适用性在不同领域得到应用。
摘要由CSDN通过智能技术生成

分类与回归树(CART)方法是一种机器学习方法,具有很好的数据拟合性、较高的R2值和较低的RMSE,是一种很好的探索性方法,其目的是确定分类与预测规则。CART以其高精度和高性能在不同的工程领域得到了广泛的应用。具体介绍就不在赘述,可以参考百度(有很多),这里直接上代码。本实例以我的研究为例。主要工具是采用R语言包进行结果的输出。

主要步骤:

1 首先主要采用的是R语言中的Cubist包,输入代码前要先进行安装,install.packet('Cubist'),安装成功后可直接运行。

2 数据准备:

这一步相对比较简单,将因变量与自变量按列排列即可,该实例中自变量既可以是数值形式也可以是文本形式,如下数据格式:

86200820edc1

image.png

3 复制代码,注意修改自己的路径。下述代码将原始数据分为test和train两部分,结合自身情况可以进一步输出。

library(Cubist)

library(caret)

setwd("I:\\01-data\\Global\\flux\\FLUXNET2015\\04Result\\RV3_年值03_合并所有年份\\")

data = read.csv("I:\\01-data\\Global\\flux\\FLUXNET2015\\04Result\\RV3_年值03_合并所有年份\\NPP_yearly.csv",header = T)

set.seed(1) # 设置种子,保证生成的随机数不发生变化

inTrain

#===========================================自变量

# 训练数据集(前13列)

train_pred

# 随机样本剩余的数据(前13列)

test_pred

#==========================================因变量(目标变量)

train_resp

test_resp

#======这一步是为了确定参数,选择怎杨的committees和neighbors值模拟的RMSE可以达到最小

grid

neighbors = c(0,1,3,5,7,9))

set.seed(1)

boston_tuned

x = train_pred,

y = train_resp,

method = "cubist",

tuneGrid = grid,

trControl = trainControl(method = "cv")

#trControl = trainControl(method = "repeatedcv",number = 10,repeats = 10)

)

#------------------trainControl()--------------------------------------

# method表示进行重采样方法 cv:cross validation,number表示 k折交叉验证,repeats表示重复交叉验证的次数

boston_tuned

ggplot(boston_tuned) +

theme(legend.position = "top")

# ================cubistControl()======================

# unbiased:无偏估计,rules:表示规则的最大上限,

# extrapolation:表示最大值最小值外推的上限百分比,比如范围0-100,那训练外推到100+10%,0-10%

# sample:表示80%的样本进行训练,剩下的20%测试,

# seed:随机种子,sample.int(x,size): 表示在1:x之间产生size个随机数,size为整数

# label:表示目标变量

# cubistControl(unbiased = FALSE, rules = 100, extrapolation = 5)

# =================cubist()===========================

# X :表示自变量组成的子集,Y:表示目标变量,

# committees:The committee option can be used to control number of model trees,

# 可以根据上述boston_tuned进行最优选择,control = cubistControl() :训练规则

model_tree = cubist(x = train_pred, y = train_resp)

# ==============summary()=============================

# summary() 表示生产的规则

rule = summary(model_tree)

# sink("test.log", type=c("output", "message")) # 将控制台输出内容保存,即将生成的规则保存用于后续应用

# ===============predict()============================

# predict() 表示对验证数据的预测,用于检验模型的精度

# models 为上述的cubist结果,validation_data[,2:5]为验证数据集,

# neighbors:表示使用多少实例来纠正基于规则的预测? 可以根据上述boston_tuned进行最优选择

model_tree_pred

yanzheng = data.frame(test_resp,model_tree_pred)

sqrt = sqrt(mean((model_tree_pred - test_resp)^2))

cor = cor(model_tree_pred, test_resp)^2

print(cor)

write.csv(yanzheng,"I:\\01-data\\Global\\flux\\FLUXNET2015\\04Result\\RV3_年值03_合并所有年份\\validation_yearly_test.csv",quote =F,row.names = F)

#==============dotplot()==============================

# 输出的是 每一个回归方程的系数以及截距(常数项)在每一个规则上的值

# dotplot(model1,what = "coefs",col = "blue",lwd = 10)

4 结果解读

86200820edc1

image.png

这是代码生成的模型规则集(rule sets)committees空值模型的数量

针对上述生成的规则,采用python进行栅格结果的确定

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值