Применимый метод для предсказания, примененный к объекту класса "c ('ksvm', 'vm')" для iml :: Predictor в R - PullRequest
0 голосов
/ 27 июня 2019

У меня есть следующий сегмент кода в 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")

Тем не менее, предсказатель бросает и ошибка отображается в заголовке. Есть идеи, почему это происходит и как это преодолеть?

1 Ответ

0 голосов
/ 28 июня 2019

Вам не нужно выбирать модель $ finalModel (у вас есть опечатка в этой строке? У вас есть $ finalMode - нет l). Вы запускаете строку, такую ​​как:

pred <- predict(model, newdata, type = "prob")

, и Карет автоматически использует модель с лучшим результатом. Вывод даст вам дополнительные вероятности диабета (столбец 1) или нет (столбец 2), если вы выберете type = "prob". Если вам нужна конкретная модель из каретного объекта 'модель', то я думаю, что вы можете выбрать ее (из вашего предыдущего вопроса сгиба) - но я никогда не делал этого и не уверен, как.

Для вашего графика частичной зависимости, ну, я использую пакет 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 в вашем случае?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...