通过插入符号返回奇怪的值来调整mtry

时间:2014-09-10 11:16:31

标签: r random-forest r-caret

我使用mtry包中的randomForest函数调整train caret参数。我的48数据中只有X列,但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

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

1 个答案:

答案 0 :(得分:6)

数据集中的列数与预测变量的数量之间的明显差异很可能是[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]这就是为什么你需要提供一个可重复的例子。通常,当我准备提出问题时,答案会变得明显,而我会花时间写出对问题的良好描述。