没有适用于 'predict' 的适用方法应用于 class "c('ksvm', 'vm')" 的 object for iml::Predictor in R
No applicable method for 'predict' applied to an object of class "c('ksvm', 'vm')" for iml::Predictor in R
我在 R 中有以下代码段,我尝试在其中训练基于 SVM 的模型:
library(base)
library(caret)
library(iml)
library(tidyverse)
dataset <- read_csv("https://gist.githubusercontent.com/dmpe/bfe07a29c7fc1e3a70d0522956d8e4a9/raw/7ea71f7432302bb78e58348fede926142ade6992/pima-indians-diabetes.csv", col_names=FALSE)
X = dataset[, 1:8]
Y = as.factor(ifelse(dataset$X9 == 1, 'diabetes', 'nondiabetes'))
set.seed(88)
nfolds <- 3
cvIndex <- createFolds(Y, nfolds, returnTrain = T)
fit.control <- trainControl(method="cv",
index=cvIndex,
number=nfolds,
classProbs=TRUE,
savePredictions=TRUE,
verboseIter=TRUE,
summaryFunction=twoClassSummary,
allowParallel=FALSE)
model <- caret::train(X, Y,
method = "svmLinear",
trControl = fit.control,
preProcess=c("center","scale"),
tuneLength=10)
pred <- Predictor$new(model$finalMode, data=dataset)
pdp <- FeatureEffect$new(pred, "X1", method="pdp")
但是,预测器抛出错误并显示在标题中。知道为什么会发生这种情况以及如何克服它吗?
您不需要 select 模型 $finalModel(您在该行中有错字吗?您有 $finalMode - 没有 l)。你运行一行如:
pred <- predict(model, newdata, type = "prob")
Caret 将自动使用得分最高的模型。如果您 select type = "prob",输出将为您提供糖尿病(第 1 列)或非糖尿病(第 2 列)的互补概率。如果你想要插入符号 'model' 对象中的特定模型,那么我相信你可以(从你之前的折叠问题中)挑选出来 - 但我从来没有这样做过,我不确定如何。
对于你的部分依赖图,好吧,我使用 pdp 包,所以像这样的东西应该可以工作:
library(pdp)
varname = 'X1' # Change this to whatever your first variable is called, or subsequently variables you are interested in.
partial(model, pred.var = varname,
train = X, chull=T, prob = T, progress = "text")
其中 X 是您训练模型所用的数据(我认为在您的情况下是 X?)
我在 R 中有以下代码段,我尝试在其中训练基于 SVM 的模型:
library(base)
library(caret)
library(iml)
library(tidyverse)
dataset <- read_csv("https://gist.githubusercontent.com/dmpe/bfe07a29c7fc1e3a70d0522956d8e4a9/raw/7ea71f7432302bb78e58348fede926142ade6992/pima-indians-diabetes.csv", col_names=FALSE)
X = dataset[, 1:8]
Y = as.factor(ifelse(dataset$X9 == 1, 'diabetes', 'nondiabetes'))
set.seed(88)
nfolds <- 3
cvIndex <- createFolds(Y, nfolds, returnTrain = T)
fit.control <- trainControl(method="cv",
index=cvIndex,
number=nfolds,
classProbs=TRUE,
savePredictions=TRUE,
verboseIter=TRUE,
summaryFunction=twoClassSummary,
allowParallel=FALSE)
model <- caret::train(X, Y,
method = "svmLinear",
trControl = fit.control,
preProcess=c("center","scale"),
tuneLength=10)
pred <- Predictor$new(model$finalMode, data=dataset)
pdp <- FeatureEffect$new(pred, "X1", method="pdp")
但是,预测器抛出错误并显示在标题中。知道为什么会发生这种情况以及如何克服它吗?
您不需要 select 模型 $finalModel(您在该行中有错字吗?您有 $finalMode - 没有 l)。你运行一行如:
pred <- predict(model, newdata, type = "prob")
Caret 将自动使用得分最高的模型。如果您 select type = "prob",输出将为您提供糖尿病(第 1 列)或非糖尿病(第 2 列)的互补概率。如果你想要插入符号 'model' 对象中的特定模型,那么我相信你可以(从你之前的折叠问题中)挑选出来 - 但我从来没有这样做过,我不确定如何。
对于你的部分依赖图,好吧,我使用 pdp 包,所以像这样的东西应该可以工作:
library(pdp)
varname = 'X1' # Change this to whatever your first variable is called, or subsequently variables you are interested in.
partial(model, pred.var = varname,
train = X, chull=T, prob = T, progress = "text")
其中 X 是您训练模型所用的数据(我认为在您的情况下是 X?)