【问题标题】:Tuning of mtry by caret returning strange value通过插入符号返回奇怪的值调整 mtry
【发布时间】:2023-03-13 09:12:01
【问题描述】:

我使用caret 包中的train 函数调整randomForestmtry 参数。我的X 数据中只有48 列,但是train 返回mtry=50 作为最佳值,而这不是有效值(>48)。对此有何解释?

> dim(X)
[1] 93 48
> fit <- train(level~., data=data.frame(X,level), tuneLength=13) 
> fit$finalModel

Call:
 randomForest(x = x, y = y, mtry = param$mtry) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 50

        OOB estimate of  error rate: 2.15%
Confusion matrix:
     high low class.error
high   81   1  0.01219512
low     1  10  0.09090909

不设置tuneLength参数就更惨了:

> fit <- train(level~., data=data.frame(X,level)) 
> fit$finalModel 

Call:
 randomForest(x = x, y = y, mtry = param$mtry) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 55

        OOB estimate of  error rate: 2.15%
Confusion matrix:
     high low class.error
high   81   1  0.01219512
low     1  10  0.09090909

我不提供数据,因为它是机密的。但是这些数据并没有什么特别之处:每一列都是数值或者是因子,并且没有缺失值。

【问题讨论】:

  • 如果没有可重复的数据,很难判断。作为第一个想法,您可以检查fit$modelInfo$grid(X, level, 13) 以确保网格生成没有发生奇怪的事情。
  • 谢谢@charles。 fit$modelInfo$grid(X, level, 13) 的输出中的最大值是48
  • 尝试使用set.seed(1234)X &lt;- matrix(rep(rep(rnorm(48)), 93), nrow=93) 的通用随机矩阵并诱导分类X[1:82,] &lt;- X[1:82,] + 0.5X[83:93,] &lt;- X[83:93,] - 0.5。这是非常粗略的,但应该适用于这些目的。运行相同的分析。这应该在每次拆分时只返回 5 个变量,以确保一切正常工作。另外,也许您可​​以分享您的数据的str(随意将列重命名为 X1-X48),以便我们尽可能地模仿它?

标签: r random-forest r-caret


【解决方案1】:

数据集中的列数和预测变量的数量之间很可能存在明显差异[1],如果任何一列是因子,则差异可能不同。您使用了公式方法,它将因子扩展为虚拟变量。例如:

> head(model.matrix(Sepal.Width ~ ., data = iris))
  (Intercept) Sepal.Length Petal.Length Petal.Width Speciesversicolor Speciesvirginica
1           1          5.1          1.4         0.2                 0                0
2           1          4.9          1.4         0.2                 0                0
3           1          4.7          1.3         0.2                 0                0
4           1          4.6          1.5         0.2                 0                0
5           1          5.0          1.4         0.2                 0                0
6           1          5.4          1.7         0.4                 0                0

所以iris 中有 3 个预测变量列,但您最终会得到 5 个(非截距)预测变量。

最大

[1] 这就是您需要提供可重现示例的原因。通常,当我准备提出问题时,当我花时间写出对问题的良好描述时,答案就会变得显而易见。

【讨论】:

  • 谢谢,我以后会认真看的。但是randomForest(Sepal.Width ~ ., data = iris, mtry=5)中的mtry=5的值是无效的,那么我不明白为什么train()可能会返回这样的值。
猜你喜欢
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多