r - caret deepnet 为所有预测产生相同的值
问题描述
我对深度学习很陌生。我使用包deepnet
和caret
. 对于这个回归问题caret
,使用 sigmoid 函数作为激活函数,使用线性函数作为输出函数。preprocess = "range"
我使用(我认为将预测变量标准化)预处理了预测变量。
library(caret)
library(deepnet)
set.seed(123, kind = "Mersenne-Twister", normal.kind = "Inversion")
# create data
dat <- as.data.frame(ChickWeight)
dat$vari <- sample(LETTERS, nrow(dat), replace = TRUE)
dat$Chick <- as.character(dat$Chick)
preds <- dat[1:100,2:5]
response <- dat[1:100,1]
vali <- dat[101:150,]
# change format of categorical predictors to one-hot encoded format
dmy <- dummyVars(" ~ .", data = preds)
preds_dummies <- data.frame(predict(dmy, newdata = preds))
# specifiy trainControl for tuning mtry and with specified folds
control <- caret::trainControl(search = "grid", method="repeatedcv", number=3,
repeats=2,
savePred = T)
# tune hyperparameters and build final model
tunegrid <- expand.grid(layer1 = c(5,50),
layer2 = c(0,5,50),
layer3 = c(0,5,50),
hidden_dropout = c(0, 0.1),
visible_dropout = c(0, 0.1))
model <- caret::train(x = preds_dummies,
y = response,
method="dnn",
metric= "RMSE",
tuneGrid=tunegrid,
trControl= control,
preProcess = "range"
)
当我使用带有调优神经网络模型的验证集进行预测时,尽管有各种输入预测变量,但它只产生一个预测值。
# predict with validation set
# create dummies
dmy <- dummyVars(" ~ .", data = vali)
vali_dummies <- data.frame(predict(dmy, newdata = vali))
vali_dummies <- vali_dummies[,which(names(vali_dummies) %in% model$finalModel$xNames)]
# add empty columns for categorical preds of the one used in the model (to have the same matix)
not_included <- setdiff(model$finalModel$xNames, names(vali_dummies))
vali_add <- as.data.frame(matrix(rep(0, length(not_included)*nrow(vali_dummies)),
nrow = nrow(vali_dummies),
ncol = length(not_included))
)
# change names
names(vali_add) <- not_included
# add to vali_dummies
vali_dummies <- cbind(vali_dummies, vali_add)
# put it in the same order as preds_dummies (sort the columns)
vali_dummies <- vali_dummies[names(preds_dummies)]
# normalize also the validation set
pp = preProcess(vali_dummies, method = c("range"))
vali_dummies <- predict(pp, vali_dummies)
# save obs and pred for predictions with the outer CV out-of-fold test set
temp <- data.frame(obs = vali[,1],
pred = caret::predict.train(object = model, newdata = vali_dummies))
temp
当我使用MASS
包中不存在分类预测变量的波士顿数据集时,对于验证集的所有不同输入预测变量,我得到的预测值略有不同。我该如何解决这个问题并创建一个神经网络,在使用数字和分类预测变量时预测“不同”的预测?除了规范化,我还应该尝试什么?
解决方案
推荐阅读
- javascript - 使用 jQuery 或 Javascript 从 HTML 表单输入构造一个 url
- javascript - 查找并替换文本文件中的所有 javascript 变量
- appium - 运行 Appium-doctor 时出现错误
- caching - 轮询不工作时更新 Apollo 客户端 3 的缓存
- c++ - 如何在 C++11 中安全且可移植地创建和使用临时文件?
- java - 想要对应用程序进行编程以连接到蓝牙设备
- numeric - r 考试类型编号:答案 Inf
- html - Flexbox,盒子里面的盒子
- vue.js - 有条件地将事件侦听器和处理程序附加到 Vue 组件
- typescript - Jasmine/Typescript - 使用“this”变量