Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

前言

这里是在实战中使用Bart模型对数据进行建模及分析,如果有读者对如何建模以及建模函数的参数不了解,对建模后的结果里的参数不清楚的话,可以参考学习作者前面两篇文章内容。以便更好地理解模型、建模过程及思想。

R bartMachine包内bartMachine函数参数详解
https://blog.csdn.net/qq_35674953/article/details/115774921

BartMachine函数建模结果参数解析
https://blog.csdn.net/qq_35674953/article/details/115804662

提示:以下是本篇文章正文内容

一、数据集

1、数据集的获取

链接:https://pan.baidu.com/s/1bHUJpJqjN2lQ3N3DhrY_MQ
提取码:9prb
数据部分截图:

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

; 2、数据集变量名及意义

变量名意义CRIM城镇人均犯罪率。ZN占地面积超过25,000平方英尺的住宅用地比例。INDUS城镇非零售商用土地的比例。CHASCharles River虚拟变量(如果是河道,则为1;否则为0)。NOX一氧化氮浓度。RM住宅平均房间数。AGE1940 年之前建成的自用房屋比例。DIS到波士顿五个中心区域的加权距离。RAD辐射性公路的接近指数。TAX每 10000 美元的全值财产税率。PTRATIO城镇师生比例。B1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。LSTAT人口中地位低下者的比例。MEDV自住房的平均房价,以千美元计。

二、完整代码

代码如下(示例):

options(java.parameters = "-Xmx10g")

library(ggplot2)
library(bartMachine)
library(reshape2)
library(knitr)
library(ggplot2)
library(GGally)

dataread.csv(file="C:/Users/LHW/Desktop/boston_housing_data.csv",header=T,sep=",")
head(data)
n=dim(data)
n
data1data[0,]
data2data[0,]

i=1
for (i in 1:n[1]) {
  if(is.na(data[i,14])) {
    data2  rbind(data.frame(data2),data.frame(data[i,]))
  }else{
    data1  rbind(data.frame(data1),data.frame(data[i,]))
  }
  print(i)
}

damelt(data1)
da1data.frame(da)

ggplot(da, aes(x=variable, y=value, fill=variable))+ geom_boxplot()+facet_wrap(~variable,scales="free")

cormat  round(cor(data1[,1:13]), 2)
head(cormat)
melted_cormat  melt(cormat)
head(melted_cormat)

get_upper_tri  function(cormat){
  cormat[lower.tri(cormat)] NA
  return(cormat)
}
upper_tri  get_upper_tri(cormat)
upper_tri

library(reshape2)
melted_cormat  melt(upper_tri,na.rm = T)

ggplot(data = melted_cormat, aes(x=Var2, y=Var1, fill = value)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white",
                       midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name="Pearson\nCorrelation") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1,
                                   size = 12, hjust = 1)) +
  coord_fixed() +
  geom_text(aes(Var2, Var1, label = value), color = "black", size = 4)

set.seed(100)

index2=sample(x=2,size=nrow(data1),replace=TRUE,prob=c(0.9,0.1))

train2=data1[index2==1,]
head(train2)
x=train2[,-c(14)]
y=train2[,14]

data2=data1[index2==2,]
x.test_data=data2[,-c(14)]
head(data2)
xp=x.test_data
yp=data2[,14]

res = bartMachine(x,y,num_trees = 50,k=2,nu=3,q=0.9,num_burn_in = 50,num_iterations_after_burn_in = 1000,flush_indices_to_save_RAM = FALSE,seed = 1313, verbose = T)
print(res)

check_bart_error_assumptions(res, hetero_plot = "yhats")

plot_y_vs_yhat(res, Xtest = x, ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)
plot_y_vs_yhat(res, Xtest = xp, ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

bmcvbartMachineCV(X = x, y = y,
              num_tree_cvs = c(50, 100,150), k_cvs = c(2, 3, 5),
              nu_q_cvs = NULL, k_folds = 10, verbose = FALSE)
print(bmcv)
print(bmcv$cv_stats)

check_bart_error_assumptions(bmcv, hetero_plot = "yhats")

plot_y_vs_yhat(bmcv, Xtest = x, ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)
plot_y_vs_yhat(bmcv, Xtest = xp, ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

resp1 = predict(bmcv,data2[,1:13])
ccicalc_credible_intervals(bmcv, data2[,1:13],
                        ci_conf = 0.95)
resp1
cci

pcdplot_convergence_diagnostics(bmcv,
                                  plots = c("sigsqs", "mh_acceptance", "num_nodes", "tree_depths"))

erextract_raw_node_data(bmcv, g = 1)
er

iviinvestigate_var_importance(bmcv, type = "trees",
                                plot = TRUE, num_replicates_for_avg = 5, num_trees_bottleneck = 20,
                                num_var_plot = Inf, bottom_margin = 10)
ivi

pdpd_plot(bmcv, 1,
            levs = c(0.05, seq(from = 0.1, to = 0.9, by = 0.05), 0.95),
            lower_ci = 0.025, upper_ci = 0.975, prop_data = 1)

head(x[,c(6,12,13,11,8,5,7)])
bmcv_s = bartMachine(x[,c(6,12,13,11,8,5,7)],y,num_trees = 100,k=2,nu=10,q=0.75,num_burn_in = 250,num_iterations_after_burn_in = 1000,flush_indices_to_save_RAM = FALSE,seed = 1313, verbose = T)
print(bmcv_s)

check_bart_error_assumptions(bmcv_s, hetero_plot = "yhats")

plot_y_vs_yhat(bmcv_s, Xtest = x[,c(6,12,13,11,8,5,7)], ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)
plot_y_vs_yhat(bmcv_s, Xtest = xp[,c(6,12,13,11,8,5,7)], ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

三、代码运行结果及解析

1.数据描述性分析

options(java.parameters = "-Xmx10g")

library(ggplot2)
library(bartMachine)
library(reshape2)
library(knitr)
library(ggplot2)
library(GGally)

dataread.csv(file="C:/Users/LHW/Desktop/boston_housing_data.csv",header=T,sep=",")
head(data)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
数据集前六行数据展示。
n=dim(data)
n

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
显示数据集维度,数据集十三个自变量,一个因变量(MEDV),一共十四列。506行数据样本。
data1data[0,]
data2data[0,]

i=1
for (i in 1:n[1]) {
  if(is.na(data[i,14])) {
    data2  rbind(data.frame(data2),data.frame(data[i,]))
  }else{
    data1  rbind(data.frame(data1),data.frame(data[i,]))
  }

}

damelt(data1)
da1data.frame(da)

ggplot(da, aes(x=variable, y=value, fill=variable))+ geom_boxplot()+facet_wrap(~variable,scales="free")

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
对数据的描述性统计,画出的十四列数据的箱线图。从图中可以看出变量(CRIM,ZN,CHAS,NOX,RM,DIS,RAD,TAX,B,LSTA,MEDV)有离群值,变量(CRIM,CHAS,NOX,RM,RAD,B)数据比较集中,变量(INDUS,AGE,RM,RAD,B)数据比较分散。
cormat  round(cor(data1[,1:13]), 2)
head(cormat)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
自变量的相关系数矩阵。
melted_cormat  melt(cormat)
head(melted_cormat)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
变换数据形式,以便用ggplot画图。

get_upper_tri  function(cormat){
  cormat[lower.tri(cormat)] NA
  return(cormat)
}
upper_tri  get_upper_tri(cormat)
upper_tri

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
把自变量的相关系数矩阵一侧三角形的值转化为NA,方便画出相关系数热力图。

library(reshape2)
melted_cormat  melt(upper_tri,na.rm = T)

ggplot(data = melted_cormat, aes(x=Var2, y=Var1, fill = value)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white",
                       midpoint = 0, limit = c(-1, 1), space = "Lab",
                       name="Pearson\nCorrelation") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1,
                                   size = 12, hjust = 1)) +
  coord_fixed() +
  geom_text(aes(Var2, Var1, label = value), color = "black", size = 4)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
画出热力图,相关系数矩阵热力图,相关系数范围[-1,1],颜色越红,相关系数就越接近于1,正相关性越高;颜色越蓝,相关系数就越接近于-1,负相关性越高。从图中可以看出RAD与CRIM、TAX与CRIM,正相关性很高;DIS与AGE、DIS与NOX,负相关性很高。

2.建立Bart模型以及分析


set.seed(100)

index2=sample(x=2,size=nrow(data1),replace=TRUE,prob=c(0.9,0.1))

train2=data1[index2==1,]
head(train2)
x=train2[,-c(14)]
y=train2[,14]

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
训练集数据集展示。

data2=data1[index2==2,]
x.test_data=data2[,-c(14)]
head(data2)
xp=x.test_data
yp=data2[,14]

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
测试集数据集展示。

res = bartMachine(x,y,num_trees = 50,k=2,nu=3,q=0.9,num_burn_in = 50,num_iterations_after_burn_in = 1000,flush_indices_to_save_RAM = FALSE,seed = 1313, verbose = T)
print(res)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
L2范数,也就是误差差值平方之和为826.44,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9736,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

check_bart_error_assumptions(res, hetero_plot = "yhats")

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
用Shapiro-Wilk检验方法,检验模型残差的正态性,画出残差散点图。从中可以看出检验p值为0.013小于0.05,拒绝原假设,说明残差不服从正态分布。

bmcvbartMachineCV(X = x, y = y,
              num_tree_cvs = c(50, 100,150), k_cvs = c(2, 3, 5),
              nu_q_cvs = NULL, k_folds = 10, verbose = FALSE)
print(bmcv)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
L2范数,也就是误差差值平方之和为674.91,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9785,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

print(bmcv$cv_stats)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
我们选取的是第一行参数进行建模。

check_bart_error_assumptions(bmcv, hetero_plot = "yhats")

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
用Shapiro-Wilk检验方法,检验模型残差的正态性,画出残差散点图。从中可以看出检验p值为0小于0.05,拒绝原假设,说明残差不服从正态分布。

plot_y_vs_yhat(res, Xtest = x, ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对训练集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为88.61%。说明模型训练拟合结果较好,但有可能过拟合。

plot_y_vs_yhat(res, Xtest = xp, ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对测试集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为77.08%。说明模型训练拟合结果较好,对测试集的预测效果也相当不错,模型没有拟合。


plot_y_vs_yhat(bmcv, Xtest = x, ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对训练集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为93.81%。说明模型训练拟合结果较好,但有可能过拟合。
plot_y_vs_yhat(bmcv, Xtest = xp, ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对测试集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为85.42%。说明模型训练拟合结果较好,对测试集的预测效果也相当不错,模型没有拟合。

resp1 = predict(bmcv,data2[,1:13])
ccicalc_credible_intervals(bmcv, data2[,1:13],
                        ci_conf = 0.95)
resp1
cci

部分结果:

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
上面第一张为对缺失值的点估计,上面第二张为对缺失值的区间估计。由上面的建模的结果来看,模型拟合效果很好,对缺失值的预测结果较为可信。

pcdplot_convergence_diagnostics(bmcv,
                                  plots = c("sigsqs", "mh_acceptance", "num_nodes", "tree_depths"))

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
上图为评估 BART 模型的收敛和特征的一组图,竖线前是被丢弃的抽样样本。
“sigsqs”选项通过Gibbs样本数绘制的后验误差方差估计。这是评估MCMC算法收敛性的标准工具。从图中可以看出在300样本后,后验误差方差估计随着抽样样本增加较为稳定,三根横线为均值及置信区间;
“Percent acceptance”选项绘制每个吉布斯样本接受的Metropolis Hastings步骤的比例,从图中可以看出在300样本后,接受率随着抽样样本增加较为稳定;
“Tree Num nodes”选项根据Gibbs样本数绘制树和模型中每棵树上的平均节点数 ,节点数随着抽样样本增加较为稳定。蓝线是所有树上的平均节点数;
“tree depth”选项根据Gibbs样本数在树和模型中绘制每棵树的平均树深。蓝线是所有树上的平均节点数。

erextract_raw_node_data(bmcv, g = 1)
er

部分结果:

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
由于篇幅较长,这里只展示了第一棵树的部分信息,更多信息可以自己运行代码进行查看。

iviinvestigate_var_importance(bmcv, type = "trees",
                                plot = TRUE, num_replicates_for_avg = 5, num_trees_bottleneck = 20,
                                num_var_plot = Inf, bottom_margin = 10)
ivi

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
算出BART模型的变量被包含在树里的比例,了解不同协变量的相对影响。在图中,红条对应的是每一个变量比例的标准误差。用此来表示每一个变量的重要程度。
Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
图中数据为每个变量比例的具体数值。

pdpd_plot(bmcv, 1,
            levs = c(0.05, seq(from = 0.1, to = 0.9, by = 0.05), 0.95),
            lower_ci = 0.025, upper_ci = 0.975, prop_data = 1)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
可以看出第一个变量,数据集中在0到0.3,其他变量不变,预测值随着自变量的增加,先减小后增大再减小。

3.变量选择


head(x[,c(6,12,13,11,8,5,7)])

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
选取BART模型的变量被包含在树里的比例高的前七个变量再进行建模。
bmcv_s = bartMachine(x[,c(6,12,13,11,8,5,7)],y,num_trees = 100,k=2,nu=10,q=0.75,num_burn_in = 250,num_iterations_after_burn_in = 1000,flush_indices_to_save_RAM = FALSE,seed = 1313, verbose = T)
print(bmcv_s)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
L2范数,也就是误差差值平方之和为857.5,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9726,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

check_bart_error_assumptions(bmcv_s, hetero_plot = "yhats")

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
用Shapiro-Wilk检验方法,检验模型残差的正态性,画出残差散点图。从中可以看出检验p值为0小于0.05,拒绝原假设,说明残差不服从正态分布。

plot_y_vs_yhat(bmcv_s, Xtest = x[,c(6,12,13,11,8,5,7)], ytest = y,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对训练集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为93.32%。说明模型训练拟合结果较好,但有可能过拟合。
plot_y_vs_yhat(bmcv_s, Xtest = xp[,c(6,12,13,11,8,5,7)], ytest = yp,
               credible_intervals = T, prediction_intervals = F,
               interval_confidence_level = 0.95)

Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型
图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对训练集因变量值的预测,从图中可以看出在95%的区间估计下的准确率为81.25%。对测试集的预测效果也相当不错,模型没有拟合。

4.各模型效果对比

模型文中命名L2值伪R2值残差检验P值训练集预测准确率(%)测试集预测准确率(%)默认参数模型res826.440.97360.0126288.61%77.08%最佳先验参数模型bmcv674.910.97853e-593.81%85.42%变量选择后的模型bmcv_s857.50.97262e-593.32%81.25%

由不同模型对比可以看出,在交叉验证选择最佳参数后、选择变量后均对模型有了改进,预测效果变得更好。而且在选择变量后的模型,虽然只有七个变量,模型解释度以及预测准确率没有太大的变化。

特别声明

作者也是初学者,水平有限,文章中会存在一定的缺点和谬误,恳请读者多多批评、指正和交流!

Original: https://blog.csdn.net/qq_35674953/article/details/115975049
Author: 丢掉幻想;准备斗争
Title: Bart模型应用实例及解析(一)————基于波士顿房价数据集的回归模型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/631464/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球