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

  • 前言
    • 一、数据集
      • 1、数据集的获取
      • 2、数据集变量名及意义
    • 二、完整代码
    • 三、代码运行结果及解析
      • 1.数据描述性分析
      • 2.建立Bart模型以及分析
      • 3.变量选择
      • 4.各模型效果对比
    • 特别声明

前言

这里是在实战中使用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
数据部分截图:

2、数据集变量名及意义

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

二、完整代码

代码如下(示例):

options(java.parameters = "-Xmx10g")library(ggplot2)
library(bartMachine)
library(reshape2)
library(knitr)
library(ggplot2)
library(GGally)##读取数据
data<-read.csv(file="C:/Users/LHW/Desktop/boston_housing_data.csv",header=T,sep=",")
head(data)
n=dim(data)
n
data1<-data[0,] #MEDV值不为NA的样本
data2<-data[0,] #MEDV值为NA的样本,后面用模型来填补缺失值#循环分离MEDV值为NA的样本到data2,其他的样本到data1
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)
}da<-melt(data1)
da1<-data.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)# 把一侧三角形的值转化为NA
get_upper_tri <- function(cormat){cormat[lower.tri(cormat)]<- NAreturn(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)
#按照90%和10%比例划分训练集和测试集
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]   #建立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)
#检验残差正态性
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)#用十折交叉验证,选出最佳先验参数
bmcv<-bartMachineCV(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])
cci<-calc_credible_intervals(bmcv, data2[,1:13],ci_conf = 0.95)
resp1
cci#查看迭代时模型的变化
pcd<-plot_convergence_diagnostics(bmcv,plots = c("sigsqs", "mh_acceptance", "num_nodes", "tree_depths"))#返回每一颗回归树的信息
er<-extract_raw_node_data(bmcv, g = 1)
er# 计算每个变量在树中出现的次数。
ivi<-investigate_var_importance(bmcv, type = "trees",plot = TRUE, num_replicates_for_avg = 5, num_trees_bottleneck = 20,num_var_plot = Inf, bottom_margin = 10)
ivi#画出变量的部分依赖图,可以用来展示一个特征是怎样影响模型预测的。这里展示第一个变量的部分依赖图
pd<-pd_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)##读取数据
data<-read.csv(file="C:/Users/LHW/Desktop/boston_housing_data.csv",header=T,sep=",")
head(data)


数据集前六行数据展示。

n=dim(data)
n


显示数据集维度,数据集十三个自变量,一个因变量(MEDV),一共十四列。506行数据样本。

data1<-data[0,] #MEDV值不为NA的样本
data2<-data[0,] #MEDV值为NA的样本,后面用模型来填补缺失值#循环分离MEDV值为NA的样本到data2,其他的样本到data1
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)
}da<-melt(data1)
da1<-data.frame(da)#画出数据箱线图
ggplot(da, aes(x=variable, y=value, fill=variable))+ geom_boxplot()+facet_wrap(~variable,scales="free")


对数据的描述性统计,画出的十四列数据的箱线图。从图中可以看出变量(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)


自变量的相关系数矩阵。

melted_cormat <- melt(cormat)
head(melted_cormat)


变换数据形式,以便用ggplot画图。


# 把一侧三角形的值转化为NA
get_upper_tri <- function(cormat){cormat[lower.tri(cormat)]<- NAreturn(cormat)
}
upper_tri <- get_upper_tri(cormat)
upper_tri


把自变量的相关系数矩阵一侧三角形的值转化为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)


画出热力图,相关系数矩阵热力图,相关系数范围[-1,1],颜色越红,相关系数就越接近于1,正相关性越高;颜色越蓝,相关系数就越接近于-1,负相关性越高。从图中可以看出RAD与CRIM、TAX与CRIM,正相关性很高;DIS与AGE、DIS与NOX,负相关性很高。

2.建立Bart模型以及分析

#随机种子
set.seed(100)
#按照90%和10%比例划分训练集和测试集
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]


测试集数据集展示。

#建立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)


L2范数,也就是误差差值平方之和为826.44,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9736,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

#检验残差正态性
check_bart_error_assumptions(res, hetero_plot = "yhats")


用Shapiro-Wilk检验方法,检验模型残差的正态性,画出残差散点图。从中可以看出检验p值为0.013小于0.05,拒绝原假设,说明残差不服从正态分布。

#用十折交叉验证,选出最佳先验参数
bmcv<-bartMachineCV(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)


L2范数,也就是误差差值平方之和为674.91,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9785,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

#交叉验证参数及训练结果汇总
print(bmcv$cv_stats)


我们选取的是第一行参数进行建模。

#检验残差正态性
check_bart_error_assumptions(bmcv, hetero_plot = "yhats")


用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)

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

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

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

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


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

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


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

#用模型对缺失值的预测以及置信区间
resp1 = predict(bmcv,data2[,1:13])
cci<-calc_credible_intervals(bmcv, data2[,1:13],ci_conf = 0.95)
resp1
cci

部分结果:


上面第一张为对缺失值的点估计,上面第二张为对缺失值的区间估计。由上面的建模的结果来看,模型拟合效果很好,对缺失值的预测结果较为可信。

#查看迭代时模型的变化
pcd<-plot_convergence_diagnostics(bmcv,plots = c("sigsqs", "mh_acceptance", "num_nodes", "tree_depths"))


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

#返回每一颗回归树的信息
er<-extract_raw_node_data(bmcv, g = 1)
er

部分结果:

由于篇幅较长,这里只展示了第一棵树的部分信息,更多信息可以自己运行代码进行查看。

# 计算每个变量在树中出现的次数。
ivi<-investigate_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模型的变量被包含在树里的比例,了解不同协变量的相对影响。在图中,红条对应的是每一个变量比例的标准误差。用此来表示每一个变量的重要程度。

图中数据为每个变量比例的具体数值。

#画出变量的部分依赖图,可以用来展示一个特征是怎样影响模型预测的。这里展示第一个变量的部分依赖图pd<-pd_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)


可以看出第一个变量,数据集中在0到0.3,其他变量不变,预测值随着自变量的增加,先减小后增大再减小。

3.变量选择

#选择变量在树中出现的次数多的前七个变量再进行建模
head(x[,c(6,12,13,11,8,5,7)])


选取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)


L2范数,也就是误差差值平方之和为857.5,预测值和真实值的误差没有特别大,说明预测的比较准确;伪R2值为0.9726,说明解释自变量对因变量的解释性很高,模型拟合效果很好。

#检验残差正态性
check_bart_error_assumptions(bmcv_s, hetero_plot = "yhats")


用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)


图中蓝色的点、和红叉是点估计,线段是区间估计。如果区间估计过平分线(平分线即真实值),则点为蓝色预测正确,反制则为红叉预测不正确。上图为模型对训练集因变量值的预测,从图中可以看出在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)


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

4.各模型效果对比

模型 文中命名 L2值 伪R2 残差检验P值 训练集预测准确率(%) 测试集预测准确率(%)
默认参数模型 res 826.44 0.9736 0.01262 88.61% 77.08%
最佳先验参数模型 bmcv 674.91 0.9785 3e-5 93.81% 85.42%
变量选择后的模型 bmcv_s 857.5 0.9726 2e-5 93.32% 81.25%

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

特别声明

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

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

  1. ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本

    ML之FE:基于波士顿房价数据集利用LightGBM算法进行模型预测然后通过3σ原则法(计算残差标准差)寻找测试集中的异常值/异常样本 目录 基于波士顿房价数据集利用LiR和LightGBM算法进行模 ...

  2. 【python机器学习】线性回归--梯度下降实现(基于波士顿房价数据集)

    波士顿房价数据集字段说明 crim 房屋所在镇的犯罪率 zn 面积大于25000平凡英尺住宅所占比例 indus 房屋所在镇非零售区域所占比例 chas 房屋是否位于河边 如果在河边,值1 nox 一 ...

  3. ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)来比较各模型性能

    ML之回归预测:利用13种机器学习算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测)来比较各模型性能 导读 通过利用13种机器学习算法,分别是LiR.kNN.SVR.D ...

  4. ML之LiRDNNEL:基于skflow的LiR、DNN、sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价)

    ML之LiR&DNN&EL:基于skflow的LiR.DNN.sklearn的RF对Boston(波士顿房价)数据集进行回归预测(房价) 目录 输出结果 设计思路 核心代码 输出结果 ...

  5. ML之DTRFRExtraTRGBR:基于四种算法(DT、RFR、ExtraTR、GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之DT&RFR&ExtraTR&GBR:基于四种算法(DT.RFR.ExtraTR.GBR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自 ...

  6. ML之kNN(两种):基于两种kNN(平均回归、加权回归)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之kNN(两种):基于两种kNN(平均回归.加权回归)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 核心代码 输出结果 Bosto ...

  7. ML之SVM(三种):基于三种SVM(linearSVR、polySVR、RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之SVM(三种):基于三种SVM(linearSVR.polySVR.RBFSVR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 ...

  8. ML之LiRSGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能

    ML之LiR&SGDR:基于二种算法(LiR.SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能 目录 输出结果 设计思路 核心代码 输出结果 Bo ...

  9. 【源码解析】如何从零实现一个回归模型?

    说明:本文源代码来源于MACHINE LEARNING 2022 SPRING课程,我只是针对源代码进行了一些加工处理.感谢互联网,让我们能免费接触到这些优秀的课程. 前置知识 什么是回归模型?简单说 ...

  10. 基于Geoda的经典空间回归模型(OLS)、空间误差模型(SEM)和空间迟滞模型(SLM)

    引言 最近在网上搜索有关空间误差模型的方法,看到的最多的就是https://editor.csdn.net/md/?not_checkout=1&spm=1001.2014.3001.5352 ...

最新文章

  1. Python 回溯算法
  2. 【android】错误集锦及解决办法
  3. Mathematica初学者第二讲
  4. 【摩天好课】数字时代职业生涯规划
  5. 分布式架构的session问题
  6. HelloWorld程序的代码编写
  7. 有意思的记录-shell(持续更新)
  8. Android之稍微靠谱点的透明Activity(不获取触摸事件)
  9. debconf-set-selections mysql_docker 静默安装mysql
  10. 解读自监督学习(Self-Supervised Learning)几篇相关paper -
  11. zedboard的DDR3型号MT41K128M16HA
  12. 归纳偏执_防御性编程:足够偏执
  13. OpenWrt从下载到编译 -- 斐讯K2路由器
  14. 复盘MWC2017:不可错过的NFV产业链三件大事
  15. 对称加密与非对称加密结合应用
  16. 华为苏箐被曝转投大众汽车:最狂智能车高管,因抨击特斯拉丢工作,任正非亲自签发罢免令...
  17. 景观设计主题命名_景观设计主题
  18. 初学者必会的100个编程代码
  19. c语言u8代表,请问头文件里的 u8,u16 vu 等符号是什么意思?
  20. zabbix监控的报警机制

热门文章

  1. 约克大学计算机语言班,约克大学语言班申请
  2. 单细胞三大R包之Seurat
  3. 魅族手机怎么把计算机放到桌面,魅族手机怎么投屏到电脑 照片怎么传到新手机...
  4. html5 元宵节送祝福,[元宵节祝福语简短5]元宵节祝福语简短
  5. 大陆、香港、澳门、台湾身份证最全正则校验
  6. 香港身份证正则表达式
  7. docxtemplater 图片模块_VUE+docxtemplater来处理word模板
  8. (二)机器学习实践Python3-决策树ID3的一个简单案例
  9. 干货 | 6大商品数据分析模型分享!
  10. gba口袋妖怪c语言源代码,查看“精灵宝可梦 火红·叶绿”的源代码