Почему прогноз измеряет точность, а F1 не улучшается при применении с выбранными функциями?

Я работаю над созданием модели с использованием пакета MLR контролируемыми методами. Шаги, которые я выполнил,

1) Очистил данные
2) Применил выбор признаков (выбор признаков на основе корреляции)
3) Сделал прогноз с использованием пакета MLR

library(mlr)
mlr_data <- as.data.frame(scale(df_allF[,res.cfs]))
mlr_data$label <- factor(df_allF$label)

NAN_col <- sapply(mlr_data, function(x) all(is.nan(x)))
mlr_data <- mlr_data[,!NAN_col]

task <- makeClassifTask(data = mlr_data,target = "label")
task <- normalizeFeatures(task,method = "standardize")
lrn = makeLearner("classif.rpart", predict.type = "prob")
rdesc = makeResampleDesc("LOO")
rin = makeResampleInstance(rdesc, task)
#Search for hyperparameters
ps <- makeParamSet(
makeIntegerParam("minsplit",lower = 10, upper = 50),
makeIntegerParam("minbucket", lower = 5, upper = 50),
makeNumericParam("cp", lower = 0.001, upper = 0.2)
)
ctrl1 = makeTuneControlRandom(tune.threshold = TRUE)
lrn1 = tuneParams(lrn, resampling = rdesc,task = task, measures = acc, par.set = ps, control = ctrl1)

rpart.tree <- setHyperPars(lrn, par.vals = lrn1$x)

t.rpart <- train(rpart.tree, task)
getLearnerModel(t.rpart)

tpmodel <- predict(t.rpart, task)

cat("\nConfusion Matrix before setting Threshold:\n ")
calculateConfusionMatrix(tpmodel)

threshold.update <- lrn1$threshold
tpmodel <- setThreshold(tpmodel,threshold.update)

cat("\nConfusion Matrix after setting Threshold:\n ")
calculateConfusionMatrix(tpmodel)


cat("\nMeasures : ")
m1 <- performance(tpmodel, acc)
m2 <- measureF1(tpmodel$data$truth,tpmodel$data$response,"Healthy")

cat("F1 = ",m2,"Accuracy = ",m1)

Результаты F1 и Точность при

Набор данных со всеми функциями
F1 = 0,923, точность = 0,928
Набор данных с выбранными функциями (CFS)
F1 = 0,863, точность = 0,857
Набор данных с выбранными функциями с использованием сбора информации
F1 = 0,8947, точность = 0,904

Здесь результаты не улучшаются. Весь набор данных состоит из 154 функций и 42 столбцов.

У меня есть решение или причина для этого? Я пробовал большую часть метода выбора функций. Но никаких улучшений.


person Priyanka Mohan    schedule 29.09.2019    source источник


Ответы (1)


Используемые вами методы выбора объектов не используют производительность классификатора для выбора объектов. Для этого используйте метод-оболочку, который явно принимает с учетом производительности. Тем не менее, нет никакой гарантии, что выбор функции улучшит производительность.

person Lars Kotthoff    schedule 30.09.2019
comment
Спасибо ... Я попробую это один раз и обновлю результаты. :) - person Priyanka Mohan; 30.09.2019
comment
Так вы имеете в виду, что использование внешних алгоритмов для выбора функций не работает с пакетом mlr? - person Priyanka Mohan; 03.10.2019
comment
Нет, это определенно работает. Это просто не то, что вы ищете здесь. - person Lars Kotthoff; 03.10.2019
comment
Так как я новичок в контролируемых техниках. Я хотел бы знать, когда мы в основном выбираем функции, как мы проверяем, какие функции лучше всего подходят для модели? - person Priyanka Mohan; 04.10.2019
comment
Это зависит от того, что вы подразумеваете под валидацией. Если вы заинтересованы в повышении производительности, как в вашем случае, вам подойдет метод-оболочка. Если вы заинтересованы в поиске функций, которые наиболее важны с точки зрения основной проблемы, это могут быть выборы функций, которые игнорируют прогноз. Это зависит от конкретного случая. - person Lars Kotthoff; 04.10.2019
comment
Благодаря вам, я хотел бы помочь с информацией, я отправил вам письмо. пожалуйста, помогите мне, если это возможно. - person Priyanka Mohan; 09.10.2019