r语言 - 为什么准确度和 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 列组成。

我有解决方案或理由吗?我尝试了大多数功能选择方法。但没有改进。

您使用的特征选择方法不使用分类器的性能来选择特征。为此,请使用显式考虑性能的包装器方法。也就是说,不能保证功能选择会提高性能。

最新更新