Получить прогнозы на тестовые наборы в MLR - PullRequest
0 голосов
/ 09 ноября 2018

Я подгоняю модели классификации для бинарных проблем с использованием пакета MLR в R. Для каждой модели я выполняю перекрестную проверку с выбором встроенных функций с помощью функции «selectFeatures» и извлекаю средние значения AUC по тестовым наборам. Далее я хотел бы получить прогнозы на тестовых наборах для каждого сгиба, но эта функция, кажется, не поддерживает это. Я уже пытался подключить выбранные предикторы в функцию «resample», чтобы получить его. Это работает, но показатели производительности отличаются, что не подходит для моего анализа. Я также попытался проверить в пакете карета, если это возможно, но я не видел решения на первый взгляд. Есть идеи как это сделать?

Вот мой код с синтетическими данными и с моей попыткой с функцией «resample» (опять же: не подходит в этой текущей версии, так как показатели производительности отличаются).

# 1. Find a synthetic dataset for supervised learning (two classes)
###################################################################

install.packages("mlbench")
library(mlbench)
data(BreastCancer)

# generate 1000 rows, 21 quantitative candidate predictors and 1 target variable 
p<-mlbench.waveform(1000) 

# convert list into dataframe
dataset<-as.data.frame(p)

# drop thrid class to get 2 classes
dataset2  = subset(dataset, classes != 3)

# 2. Perform cross validation with embedded feature selection
#############################################################

library(BBmisc)
library(nnet)
library(mlr)

# Choice of algorithm i.e. neural network
mL <- makeLearner("classif.nnet", predict.type = "prob")

# Choice of sampling plan: 10 fold cross validation with stratification of target classes 
mRD = makeResampleDesc("CV", iters = 10,stratify = TRUE)

# Choice of feature selection strategy   
ctrl = makeFeatSelControlSequential(method = "sffs", maxit = NA,alpha = 0.001)

# Choice of feature selection technique (stepwize family) and p-value 
mFSCS = makeFeatSelControlSequential(method = "sffs", maxit = NA,alpha = 0.001)

# Choice of seed 
set.seed(12)

# Choice of data 
mCT <- makeClassifTask(data =dataset2, target = "classes")

# Perform the method
result = selectFeatures(mL,mCT, mRD, control = ctrl, measures = list(mlr::auc,mlr::acc,mlr::brier))

# Retrieve AUC and selected variables
analyzeFeatSelResult(result)
# Result: auc.test.mean=0.9614525 Variables selected: x.10, x.11, x.15, x.17, x.18    

# 3. Retrieve predictions on tests sets (to later perform Delong tests on AUCs derived from multiple sets of candidate variables)
#################################################################################################################################

# create new dataset with selected predictors
keep <- c("x.10","x.11","x.15","x.17","x.18","classes")
dataset3 <- dataset2[ , names(dataset2) %in% keep]

# Perform same tasks with  resample function instead of selectFeatures function to get predictions on tests set
mL <- makeLearner("classif.nnet", predict.type = "prob")   
ctrl = makeFeatSelControlSequential(method = "sffs", maxit = NA,alpha = 0.001)
mRD = makeResampleDesc("CV", iters = 10,stratify = TRUE)
set.seed(12)
mCT <- makeClassifTask(data =dataset3, target = "classes")
r1r = resample(mL, mCT, mRD, measures = list(mlr::auc,mlr::acc,mlr::brier))
# Result: auc.test.mean=0.9673023

1 Ответ

0 голосов
/ 09 ноября 2018

ctrl отсутствует в вашем коде.

Для получения прогнозов объекта повторной выборки просто используйте getRRPredictions(r1r) или r1r$measures.test.

...