网格搜索以找到决策树分类的最佳参数

Posted

技术标签:

【中文标题】网格搜索以找到决策树分类的最佳参数【英文标题】:Grid Search to find the best parameters for decision tree classification 【发布时间】:2021-05-16 22:16:24 【问题描述】:

我有一个数据集,其目标变量为Target。我将数据集拆分为训练集和测试集,并应用了决策树分类:

library(rpart)
classifier = rpart(formula = Target ~ .,data = training_set)

我想应用网格搜索来找到最佳参数,然后我写:

library(caret)
classifier = train(form = Target ~ ., data = training_set, method = 'ctree')

获得

>classifier
Conditional Inference Tree 

8792 samples
   8 predictor
   2 classes: '0', '1' 

No pre-processing
Resampling: Bootstrapped (25 reps) 
Summary of sample sizes: 8792, 8792, 8792, 8792, 8792, 8792, ... 
Resampling results across tuning parameters:

  mincriterion  Accuracy   Kappa    
  0.01          0.8881768  0.4373290
  0.50          0.8936227  0.4350515
  0.99          0.8927400  0.4102918

Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mincriterion = 0.5.

>classifier$bestTune
mincriterion
2          0.5

现在如何使用这个值来改进我的模型?

【问题讨论】:

您使用train() 来找到最佳超参数。在这种情况下,它是mincriterion。您可以尝试使用 train 中的最终对象进行预测。您所说的改进模型是什么意思? 【参考方案1】:
set.seed(123)
classifier = train(form = Target ~ ., 
                   data = training_set, 
                   method = 'ctree',
                   tuneGrid = data.frame(mincriterion = seq(0.01,0.99,length.out = 100)),
                   trControl = trainControl(method = "boot",
                                            summaryFunction = defaultSummary,
                                            verboseIter = TRUE))

我为您的调整网格添加了一个非常广泛的范围,但由于最佳模型的最小标准为 0.5,您可能希望限制该范围。您还可以将tuneGrid = data.frame() 替换为tuneLength = 100,例如,插入符号可以自动选择一个100 的网格,您不需要指定mincriterion 数字。您还可以将汇总函数从显示准确度和 Kappa 的 defaultSummary 更改为 twoClassSummary,这将为您提供灵敏度、特异性和 ROC 等指标。如果您确实使用 twoClassSummary 设置 classProbs = TRUE in trainControl() 。您还可以将方法从 boot 更改为 cv 的任何折叠。看看?trainControl。最后在模型调整期间设置种子以提高可重复性。

【讨论】:

嗨@zimia,非常感谢!我很抱歉,但有一件事我无法理解。您在代码中哪里使用了有关 mincriterion=0.5 的信息? 我没有。我的意思是,因为您的第一个模型将 mincriterion=0.5 显示为测试的 3 个值中的最优值,所以测试从 0.01 到 0.99 的所有 mincriterion 值的计算成本很高。更好的方法是测试一个较小的范围 +/- 大约 0.5,例如0.3 到 0.7 并反复缩小该范围。对于ctree,这不是什么大问题,因为计算速度非常快,但使用其他模型,例如一些基于集成树的模型或 SVM,其计算成本可能很高并且可能需要几个小时!

以上是关于网格搜索以找到决策树分类的最佳参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在网格搜索后绘制热图并找到决策树的最佳超参数

提升算法

sklearn-分类决策树

分类:基本概念、决策树与模型评估

机器学习——“决策树&随机森林”学习笔记

Sklearn 决策树分类器显示浮点错误 Python [不是重复的]