我想绘制个人条件期望值(ICE),并且有以下代码段:
library(caret)
library(gridExtra)
library(grid)
library(ggridges)
library(ggthemes)
library(iml)
library(partykit)
library(rpart)
library(tidyverse)
theme_set(theme_minimal())
set.seed(88)
kfolds <- 3
load_dataset <- function() {
dataset <- read_csv("https://gist.githubusercontent.com/dmpe/bfe07a29c7fc1e3a70d0522956d8e4a9/raw/7ea71f7432302bb78e58348fede926142ade6992/pima-indians-diabetes.csv", col_names=FALSE) %>%
mutate(X9=as.factor(ifelse(X9== 1, "diabetes", "nondiabetes")))
X = dataset[, 1:8]
Y = dataset$X9
return(list(dataset, X, Y))
}
compute_rf_model <- function(dataset) {
index <- createDataPartition(dataset$X9,
p=0.8,
list=FALSE,
time=1)
dataset_train <- dataset[index,]
dataset_test <- dataset[-index,]
fit_control <- trainControl(method="repeatedcv",
number=kfolds,
repeats=1,
classProbs=TRUE,
savePredictions=TRUE,
verboseIter=FALSE,
allowParallel=FALSE,
summaryFunction=defaultSummary)
rf_model <- train(X9~.,
data=dataset_train,
method="rf",
preProcess=c("center","scale"),
trControl=fit_control,
metric="Accuracy",
verbose=FALSE)
return(list(rf_model, dataset_train, dataset_test))
}
main <- function() {
data <- load_dataset()
dataset <- data[[1]]
X <- data[[2]]
Y <- data[[3]]
rf_model_data <- compute_rf_model(dataset)
rf_model <- rf_model_data[[1]]
dataset_train <- rf_model_data[[2]]
dataset_test <- rf_model_data[[3]]
X <- dataset_train %>%
select(-X9) %>%
as.data.frame()
predictor <- Predictor$new(rf_model, data=X, y=dataset_train$X9)
ice <- FeatureEffect$new(predictor, feature="X2", center.at=min(X$X2), method="pdp+ice")
ice_plot_glucose <- ice$plot() +
scale_color_discrete(guide="none") +
scale_y_continuous("Predicted Diabetes")
ice <- FeatureEffect$new(predictor, feature="X4", center.at=min(X$X4), method="pdp+ice")
ice_plot_insulin <- ice$plot() +
scale_color_discrete(guide="none") +
scale_y_continuous("Predicted Diabetes")
grid.arrange(ice_plot_glucose, ice_plot_insulin, ncol=1)
}
if (!interactive()) {
main()
} else if (identical(environment(), globalenv())) {
quit(status = main())
}
我最后收到的图看起来像这样:
而且,该图在某些ICE在线图上看起来不如在网上好看,例如以下所示:
任何想法为什么会这样?我相信我所拥有的数据至少在价值方面类似于以上文章中显示的数据。
最佳答案
问题在于,预测变量会给出类标签而不是类概率。
改变中predictor <- Predictor$new(rf_model, data=X, y=dataset_train$X9)
至predictor <- Predictor$new(rf_model, data=X, y=dataset_train$X9, type = "prob")
应该修复你的情节。
见these fixed PD plots
关于r - 如何在R中正确绘制ICE?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56799055/