【问题标题】:randomForest using caret : shows incorrect mtry valuerandomForest 使用插入符号:显示不正确的 mtry 值
【发布时间】:2016-02-21 23:32:27
【问题描述】:



我正在尝试使用'caret'包的randomForest。

当我在不提供任何控件的情况下运行基本命令时,它显示插入符号在最终模型中使用了 mtry=5。即,它使用了 5 个预测变量。 但是,我的数据有 4 个预测变量。谁能解释为什么它显示 mtry=5?

这是我的代码:

  library(caret)
  data(iris)
  set.seed(100)
  model.rf = train(Petal.Length~., data=iris, method="rf")
   print(model.rf$finalModel)

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

      Mean of squared residuals: 0.06799251
                % Var explained: 97.8

【问题讨论】:

    标签: r-caret


    【解决方案1】:

    如果您未指定网格搜索,则 method = "rf" 的模型信息将默认使用var_seq(p = ncol(x)),在这种情况下,x 是数据集虹膜。如果您使用var_seq(ncol(iris)),它将返回 2 3 和 5。这些值将用于 mtry 参数的默认网格搜索。这将返回 3 个 rf 模型,并选择具有最低 rmse 的模型作为最终模型。您只需键入 model.rf 即可看到这一点。

    您看到 5 的原因与您的种子有关。如果将种子设置为 99,则所选模型的 mtry 为 3。

    当然,仅仅因为 mtry 为 5 并不意味着突然有一个额外的变量可供选择。它只需要所有可用的变量。

    【讨论】:

      【解决方案2】:

      @phiver,感谢您解释 var_seq。恐怕它没有为我的问题提供完整的答案。

      我发现下面的函数提供了答案。

      predictors(model.rf) 
      #[1] "Sepal.Length"      "Sepal.Width"       "Petal.Width"      
      #[4] "Speciesversicolor" "Speciesvirginica" 
      

      我们看到插入符号将分类预测变量“物种”替换为 2 个虚拟变量。这就是我们看到 5 个预测变量的原因,尽管我们有 4 个实际预测变量来预测 Sepal.Length。 (我假设您熟悉 iris 数据,因此我不提供其数据结构的详细信息。)。

      【讨论】:

      • 正如您所写,这 5 个预测变量确实来自创建虚拟变量。但是有 5 个预测变量,没有理由 mtry = 5。这与网格搜索有关。用 set.seed(99) 调整你的代码,你会看到 mtry 是 3
      • @Phiver,也许我的描述不清楚。是的,插入符号尝试了 mtry= (2, 3, 5) 并选择了最好的一个。毫无疑问。我的问题是“它在哪里找到了第 5 个预测变量?”答案是“来自插入符号创建的虚拟变量”。
      【解决方案3】:

      我认为 mtry 值表示您的模型中使用的森林数量。

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 2019-11-17
        • 2020-01-16
        • 1970-01-01
        • 2023-03-13
        • 2021-07-05
        • 2013-01-28
        • 2012-08-03
        • 1970-01-01
        相关资源
        最近更新 更多