利用rstudio做深度学习回归模型的案例

2023-12-06 19:02:09 3点赞 5收藏 11评论

先说说我写本文的目的:

我之前买了一本《python深度学习》的书(见下图),这本书是基于keras和tensorflow做深度学习的,我的建议是,小白不要买这本书,避免看不懂。

利用rstudio做深度学习回归模型的案例

这本书对深度学习的小白很不友好,如果你直接复制代码就想上手跑的话,代码是跑不通的,会报一堆的错误。也就是说,这本书不是给小白看的。给小白看至少代码复制粘贴就能跑,不是吗?

利用rstudio做深度学习回归模型的案例

另外我还买了《R语言深度学习》这本书(见下面的购买截图),我发现《python深度学习》这本书(见上图)和《R语言深度学习》这本书(见下面)两者的重复率高达90%,作者或者出版社就是将python的代码换成R代码就编成两本书了(国外的出版社很聪明呀),这个作者够聪明的(LA-JI)的,这样都能写成两本书来卖?要不是我这两本书都买了,我也不会发现这个现象。反正这个作者和这个出版社给我的印象就是:太聪明了,大家碰见这个出版社和这个作者,要小心一点。小白看不懂

利用rstudio做深度学习回归模型的案例

我发现《python深度学习》这本书和《R语言深度学习》这本书,关于回归模型的深度学习,也就是第3章关于预测波士顿房价的那些代码,你直接复制粘贴,很有可能报错,另外书里面讲得不明不白,看得云里雾里。所以我用网上找到的其他材料自学了一遍回归模型的深度学习过程,如果你需要这方面的知识,可以看本文我的讲解,保证代码能跑。

第1步,加载波士顿房屋价格的数据

命令如下所示,为什么要加载这个数据,因为已经有现成的数据了,你也可以自己编写一个广州的房价数据加载进去。

data("BostonHousing")利用rstudio做深度学习回归模型的案例

如果报下面的错误,代表你没有安装mlbench包:

利用rstudio做深度学习回归模型的案例

用下面的命令安装mlbench包,就不会报上面的没有BostonHousing这个数据集的错误了:

install.packages("mlbench")

第2步、将BostonHousing这个数据集命名为data:

data <- BostonHousing

可以用data回车来查看波士顿房价的数据,一共14列,506行:

利用rstudio做深度学习回归模型的案例

关于这14列的数据,网上有详细的介绍,我这里简单介绍一下14列数据的表示的意思(最后一列medv就是房屋的价格中位数,必须清楚第14列是房屋价格的意思,不然无法理解下面的代码):

CRIM——按城镇划分的人均犯罪率

ZN——划分为25000平方英尺以上地块的住宅用地比例。

INDUS——每个城镇非零售商业英亩数的比例。

CHAS-Charles River伪变量(如果域边界为河流,则为1;否则为0)

NOX-氮氧化物浓度(百万分之一)

RM——每个住宅的平均房间数

年龄-1940年之前建造的自住单元的比例

DIS-到波士顿五个就业中心的加权距离

RAD——辐射状公路可达性指数

TAX-每10000美元的全额财产税税率

PTRATIO-按城镇划分的师生比例

B-1000(Bk-0.63)^2其中Bk是按城镇划分的黑人比例

LSTAT——人口地位降低%

MEDV-自住房屋的中值,单位为1000美元

第3步、将data转化成matrix数据:

data <- as.matrix(data)

第4步、设置取样的数据

首先设置一个种子, 例如我设置了一个9999的种子,如果不设置种子的话,就无法重复。如果我设置了9999的种子,下次我想要重复的时候,就用9999来重新调取即可。你也可以设置成一个8888的种子:

set.seed(9999)

从data里面抽取样品ind(你也可以设置成abc,不一定要设置成ind),下面设置成从 1,2 中有放回( replace = T)抽取样品,概率分别为(0.8,0.2),也就是抽取506行数据的80%作为训练样品,506行数据的20%作为测试样品。

ind <- sample(2, nrow(data), replace = T, prob = c(.8, .2))

将1到13列数据的80%作为训练样品,命名为training:

training <- data[ind==1,1:13]

将1到13列数据的20%作为测试样品,命名为test:

test <- data[ind==2, 1:13]

将第14列数据的80%作为训练目标数据,命名为trainingtarget:

trainingtarget <- data[ind==1, 14]

将第14列数据的20%作为测试目标数据,命名为testtarget:

testtarget <- data[ind==2, 14]

在rstudio里面,将上面所述的6条代码依次敲入并回车即可:

利用rstudio做深度学习回归模型的案例

第5步、数据标准化处理

m <- colMeans(training)

s <- apply(training, 2, sd)

training <- scale(training, center = m, scale = s)

test <- scale(test, center = m, scale = s)

第6步、建立模型

代码为:

model <- keras_model_sequential() %>%

layer_dense(units = 10, activation = 'relu', input_shape = c(13)) %>%

layer_dense(units = 1)

上面代码的意思是:利用 keras_model_sequential() 定义了模型model,并设置了 1 个隐藏层和 1 个输出层,其中的激活函数是 relu。

利用rstudio做深度学习回归模型的案例

用summary函数来查看这个model:

利用rstudio做深度学习回归模型的案例

第7步、模型编译

用下面的代码来编译,其中mse是损失函数,mse的意思是Mean Square Error,即预测值和目标值差异的平方;rmsprop是优化器,rmsprop是Root Mean Squared Propagation的意思;mae是监控度量,mae是Mean Absolute Error的意思

model %>% compile(loss = 'mse',

optimizer = 'rmsprop',

metrics = 'mae'

)

第8步、模型拟合

代码如下:

mymodel <- model %>%

fit(training,

trainingtarget,

epochs = 200,

batch_size = 32,

validation_split = 0.2)

其中,上面代码的 epochs = 200,batch_size = 32,validation_split = 0.2这几个参数可以自行设置。

上面的代码回车后,就开始跑了:

利用rstudio做深度学习回归模型的案例

运行结束会显示下面的图:

利用rstudio做深度学习回归模型的案例

上图的 loss 是“损失函数“的意思,val_loss 是“验证集下的损失函数“的意思。(上面代码我设置的验证集划分比例为 0.2)。mae 是“平均绝对误差“的意思,而 val_mae 是“验证集下的平均绝对误差“。从上图可以看出,训练80轮之后,mae 与 loss 就基本上趋于稳定。

第9步、用evaluate函数来评估模型

代码为:

model %>% evaluate(test, testtarget)

这时候显示loss值为21.3,mae值为3.65,loss值也就是均方误差(Mean Square Error,MSE)值为21.3,而mae值也就是平均绝对误差(Mean Absolute Error,MAE)值为3.65

利用rstudio做深度学习回归模型的案例

也可以用下面的代码来计算均方误差:

mean((testtarget-pred)^2)

用下面的代码来算预测值:

pred <- predict(model,test)

第10步、预测值和真实值之间的比较

先要加载3个包:

library(ggplot2)

library(viridis)

library(ggsci)

用下面的代码来显示预测值和真实值:

ev_data = data.frame("Item" = seq(1,length(pred)),

"Value" = c(testtarget,pred),

"Class" = rep(c("True","Pred"),each = length(pred)))

ggplot(ev_data) +

geom_line(aes(Item,Value,col = Class,lty = Class)) +

scale_color_aaas() +

theme_bw() +

theme(panel.grid = element_blank())

上面的代码最后是ggplot画出的预测值和真实值之间的比较:

利用rstudio做深度学习回归模型的案例

第一种方法小结

library(keras) #加载keras包 # 用runif函数随机生成自变量x和应变量y: x <- matrix(runif(100), nrow = 10, ncol = 10) y <- runif(10) # 生成模型 model <- keras_model_sequential() %>% layer_dense(units = 5, activation = "relu", input_shape = c(10)) %>% layer_dense(units = 1) # 编译模型,用的损失函数是mse,优化器是optimizer_sqd: model %>% compile(loss = "mean_squared_error", optimizer = optimizer_sgd(lr = 0.01)) # 训练模型 model %>% fit(x, y, epochs = 100, batch_size = 1) # 保存模型 save_model_hdf5(model, "模型名字")

第2种方法介绍

下面按照《R语言深度学习》这本书上介绍的方法来说明。

将波士顿房价数据命名为dataset:

dataset <- dataset_boston_housing()

用dataset来查看,发现这个dataset里面有train$x, train$y, test$x, test$y共4个数据集,其中train$x是404行13列的数据,train$y是404行1列,test$x是102行13列,test$y是102行1列的数据。

利用rstudio做深度学习回归模型的案例

将train$x, train$y, test$x, test$y这4个数据集分别命名为train_data, train_targets, test_data, test_targets:

c(c(train_data, train_targets), c(test_data, test_targets)) %<-% dataset

用str函数查看这4个数据集的情况:

str(train_data)

str证明,这些数据确实是我说的404行13列等格式:

利用rstudio做深度学习回归模型的案例

用下面的命令对数据进行标准化处理:

mean <- apply(train_data, 2, mean)

std <- apply(train_data, 2, sd)

train_data <- scale(train_data, center = mean, scale = std)

test_data <- scale(test_data, center = mean, scale = std)

利用rstudio做深度学习回归模型的案例

建立模型:

model <- keras_model_sequential() %>%

layer_dense(units = 64, activation = "relu",

input_shape = dim(train_data)[[2]]) %>%

layer_dense(units = 64, activation = "relu") %>%

layer_dense(units = 1)

编译模型:

model %>% compile(

optimizer = "rmsprop",

loss = "mse",

metrics = c("mae")

)

创建一个叫做build_model的函数:

build_model <- function() {

model <- keras_model_sequential() %>%

layer_dense(units = 64, activation = "relu",

input_shape = dim(train_data)[[2]]) %>%

layer_dense(units = 64, activation = "relu") %>%

layer_dense(units = 1)

model %>% compile(

optimizer = "rmsprop",

loss = "mse",

metrics = c("mae")

)

}

用k=4来跑代码:

k <- 4

indices <- sample(1:nrow(train_data))

folds <- cut(indices, breaks = k, labels = FALSE)

num_epochs <- 100

all_scores <- c()

for (i in 1:k) {

cat("processing fold #", i, "n")

val_indices <- which(folds == i, arr.ind = TRUE)

val_data <- train_data[val_indices,]

val_targets <- train_targets[val_indices]

partial_train_data <- train_data[-val_indices,]

partial_train_targets <- train_targets[-val_indices]

model <- build_model()

model %>% fit(partial_train_data, partial_train_targets,

epochs = num_epochs, batch_size = 1, verbose = 0)

results <- model %>% evaluate(val_data, val_targets, verbose = 0)

all_scores <- c(all_scores, results$mean_absolute_error)

}

如果执行上面的代码报错,报错信息是:Error in results$mean_absolute_error : $ operator is invalid for atomic vectors,可以用下面的代码来单独跑:

model %>% fit(train_data, train_targets,

epochs = 200, batch_size = 1, verbose = 0)

可以将这个拟合的模型命名为my,然后用my来看这个模型的情况:

利用rstudio做深度学习回归模型的案例

全文完,谢谢观看。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
11评论

  • 精彩
  • 最新
  • 发错地方了吧,张大妈有人看这个?

    校验提示文案

    提交
    现在深度学习这么火?不学一下? [傻笑] 几行代码的事情

    校验提示文案

    提交
    收起所有回复
  • 拟用python做策略建模,包括但不限于:策略规则、算法建模:
    一、数据导入
    二、数据预处理(清洗规整、增删改查、数据类型转化)
    三、探索分析(可视自动化)
    四、特征衍生(组合变量批量自动化生成、特征筛选指标评估自动化)
    五、分箱筛选(变量分箱最优自动化)
    六、相关性构建(多类算法聚合:逻辑、回归、分类&机器学习、深度学习、强化学习
    七、检验评测(第六项计算各自的混淆矩阵指标,自动化计算结果)
    八、分数转换
    九、超参调优

    so针对第二至七项,就python及其第三方库(自动化)实操详解的电子书及其代码而言,特跪求大佬推荐。。。非AI或者chatgpt+XX系列,书籍需求具体如下:
    1、小白速成上手、简单易懂
    because:文科转型
    2、行业内公认靠谱,电子书中文版(暂不考虑:单个某库的说明书)
    because:内容忒多繁杂,且无常用算法库的聚合呈现
    3、需要2023年出版
    because:即使按书实操,旧版书均因为其所涉之第三方库的灭失、相同操作而新旧版本不适配、新旧版本变更操作等原因而导致无法实现同等功能)

    校验提示文案

    提交
    推荐:985大学计算机专业课程4年本科教材 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 可以成为您的粉丝吗》

    校验提示文案

    提交
    R语言和java一样,是一个帝国型的全能语言,欢迎成为R语言粉丝 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 数学不好看不懂很正常。

    校验提示文案

    提交
    玩深度学习或者模型不需要数学专家的水平,普通人也可以玩的

    校验提示文案

    提交
    收起所有回复
  • 大佬这是为我打开了新世界的大门啊

    校验提示文案

    提交
  • 不明觉厉啊

    校验提示文案

    提交
  • 这个案例提供了使用RStudio进行深度学习回归的示例代码,很实用。

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
5
扫一下,分享更方便,购买更轻松