r - 使用插入符号包的 type = "prob" 的 Deepboost 预测不起作用
问题描述
我试图使用包来拟合deepboost
模型。caret
我已经从这个链接下载了数据
library(caret)
prc <- read.csv("Prostate_Cancer.csv",stringsAsFactors = FALSE)
prc <- na.omit(prc[-1]) #removes the first variable(id) from the data set.
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x))) }
prc_n <- as.data.frame(lapply(prc[2:9], normalize))
summary(prc_n)
df <- cbind(prc_n,diagnosis_result= prc$diagnosis_result)
head(df,2)
# create a list of 70% of the rows in the original dataset we can use for training
set.seed(123)
training <- sample(nrow(df), 0.7 * nrow(df))
dataTrain <- df[training,]
dataTest <- df[-training,]
trainControl <- trainControl(method="repeatedcv", number=10, repeats=5,
savePredictions=TRUE, classProbs=T)
#Deepboost
set.seed(7)
fit.dpb <- train(diagnosis_result~., data=dataTrain, method="deepboost",
trControl=trainControl)
fit.dpb
dpb_cal_prob <- predict(fit.dpb, newdata = dataTrain, type = "prob")
dpb_val_prob <- predict(fit.dpb, newdata = dataTest, type = "prob")
dpb_cal <- predict(fit.dpb, newdata = dataTrain)
dpb_val <- predict(fit.dpb, newdata = dataTest)
#variable importance of variables
varImp(fit.dpb,scale=T)
plot(varImp(fit.dpb,scale=T))
两者都varImp
不起作用predict(fit.dpb, newdata = dataTrain, type = "prob")
。谁能帮我吗?
解决方案
基于deepboost 的源代码,该模型无法预测概率,也没有 varimp 方法。查看模型列表元素与glmnet 源代码的差异,例如可以执行这些操作的代码。
编辑:要使 deepboost 模型预测概率,您需要修改源代码:
创建一个:
deepboost_prob <- list(label = "DeepBoost",
library = "deepboost",....
您将在其中复制整个源代码:https ://github.com/topepo/caret/blob/master/models/files/deepboost.R
添加一个概率槽:
deepboost_prob$prob <- function(modelFit, newdata, submodels = NULL) {
if(!is.data.frame(newdata))
newdata <- as.data.frame(newdata, stringsAsFactors = TRUE)
probs <- deepboost:::predict(modelFit, newdata, type = "response")
probs <- as.data.frame(probs, stringsAsFactors = FALSE)
colnames(probs) <- modelFit@classes
probs
}
检查它是否有效:
library(mlbench)
library(caret)
data(Sonar)
trainControl <- trainControl(method = "cv",
number = 5,
savePredictions = TRUE,
classProbs = TRUE)
set.seed(7)
fit.dpb <- train(x = Sonar[1:150,1:60],
y = Sonar$Class[1:150],
method = deepboost_prob,
trControl = trainControl,
tuneLength = 1)
Warning messages:
1: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
2: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
3: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
4: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
5: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
6: In model.matrix.default(mt, mf, contrasts) :
non-list contrasts argument ignored
我也收到原始 deepboost 实现的警告
predict(fit.dpb, Sonar[200:208,1:60], type = "prob")
M R
1 0.3721210 0.6278790
2 0.4087576 0.5912424
3 0.3700643 0.6299357
4 0.3656457 0.6343543
5 0.5232370 0.4767630
6 0.2439648 0.7560352
7 0.3687249 0.6312751
8 0.2679716 0.7320284
9 0.3292782 0.6707218
推荐阅读
- html - Asp.net mvc - 如何在没有 html 标签的情况下显示富文本?
- r - 在谷歌云平台中从 CRAN 构建 docker 镜像时需要帮助
- php - 用于 recaptcha 的 PHP 5.2 替代语法
- powershell - 有没有办法绕过 Power-Shell 确认(Y/N)提示?
- javascript - 什么是正确的选择方法在 DOM 中?
- r - 检测一列中只有一个数字的行
- excel - Excel VBA 替换不适用于公式
- postgresql - 子选择时PostgreSQL列不存在
- html - 如何在更改屏幕时隐藏导航并显示它?
- css - 有没有办法通过使用 CEF 来更改旧的 MFC 浏览器窗口?