Я тренирую наивную байесовскую модель, используя пакет mlr.
Я хотел бы настроить порог (и только порог) для классификации.Учебное пособие предоставляет пример для этого, а также выполняет дополнительную настройку гиперпараметра во вложенной настройке CV. На самом деле я не хочу настраивать любой другой (гипер) параметр при поиске оптимального порогового значения.
Основываясь на обсуждении здесь Я установил makeTuneWrapper ()возразить и установить другой параметр (laplace) в фиксированное значение (1), а затем запустить resample () во вложенной настройке CV.
nbayes.lrn <- makeLearner("classif.naiveBayes", predict.type = "prob")
nbayes.lrn
nbayes.pst <- makeParamSet(makeDiscreteParam("laplace", value = 1))
nbayes.tcg <- makeTuneControlGrid(tune.threshold = TRUE)
# Inner
rsmp.cv5.desc<-makeResampleDesc("CV", iters=5, stratify=TRUE)
nbayes.lrn<- makeTuneWrapper(nbayes.lrn, par.set=nbayes.pst, control=nbayes.tcg, resampling=rsmp.cv5.desc, measures=tpr)
# Outer
rsmp.cv10.desc<-makeResampleDesc("CV", iters=10, stratify=TRUE)
nbayes.res<-resample(nbayes.lrn, beispiel3.tsk, resampling= rsmp.cv10.desc, measures=list(tpr,ppv), extract=getTuneResult)
print(nbayes.res$extract)
Настройка схемы повторной выборки для внутреннего цикла во вложенном резюме кажется излишней.Внутренний вызов tuneThreshold () , по-видимому, в любом случае выполняет более тщательную оптимизацию.Однако вызов makeTuneWrapper () без схемы передискретизации приводит к сообщению об ошибке.
У меня есть два конкретных вопроса :
1.) Существует ли более простой способ настройки порога (и только порога)?
2.) Учитывая настройки, использованные выше: как я могу получить доступ к пороговым значениям, которые были фактически проверены?
РЕДАКТИРОВАТЬ:
Это будет пример кода для настройки порогадля различных мер (точность, чувствительность, точность) на основе ответа @Lars Kotthoff.
### Create fake data
y<-c(rep(0,500), rep(1,500))
x<-c(rep(0, 300), rep(1,200), rep(0,100), rep(1,400))
balanced.df<-data.frame(y=y, x=x)
balanced.df$y<-as.factor(balanced.df$y)
balanced.df$x<-as.factor(balanced.df$x)
balanced.tsk<-makeClassifTask(data=balanced.df, target="y", positive="1")
summarizeColumns(balanced.tsk)
### TuneThreshold
logreg.lrn<-makeLearner("classif.logreg", predict.type="prob")
logreg.mod<-train(logreg.lrn, balanced.tsk)
logreg.preds<-predict(logreg.mod, balanced.tsk)
threshold_tpr<-tuneThreshold(logreg.preds, measure=list(tpr))
threshold_tpr
threshold_acc<-tuneThreshold(logreg.preds, measure=list(acc))
threshold_acc
threshold_ppv<-tuneThreshold(logreg.preds, measure=list(ppv))
threshold_ppv