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

Я работаю над созданием модели с использованием пакета 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 столбцов.

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

1 Ответ

0 голосов
/ 30 сентября 2019

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

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