插入符号训练的公式和非公式的不同结果

Posted

技术标签:

【中文标题】插入符号训练的公式和非公式的不同结果【英文标题】:Different results with formula and non-formula for caret training 【发布时间】:2014-04-07 16:45:15 【问题描述】:

我注意到在训练时在插入符号中使用公式和非公式方法会产生不同的结果。此外,公式法所用时间几乎是非公式法所用时间的 10 倍。这是预期的吗?

> z <- data.table(c1=sample(1:1000,1000, replace=T), c2=as.factor(sample(LETTERS, 1000, replace=T)))

# SYSTEM TIME WITH FORMULA METHOD
# -------------------------------

> system.time(r <- train(c1 ~ ., z, method="rf", importance=T))
   user  system elapsed
376.233   9.241  18.190

> r
1000 samples
   1 predictors

No pre-processing
Resampling: Bootstrap (25 reps)

Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ...

Resampling results across tuning parameters:

  mtry  RMSE  Rsquared  RMSE SD  Rsquared SD
  2     295   0.00114   4.94     0.00154
  13    300   0.00113   5.15     0.00151
  25    300   0.00111   5.16     0.00146

RMSE was used to select the optimal model using  the smallest value.
The final value used for the model was mtry = 2.


# SYSTEM TIME WITH NON-FORMULA METHOD
# -------------------------------

> system.time(r <- train(z[,2,with=F], z$c1, method="rf", importance=T))
       user  system elapsed
     34.984   2.977   2.708
    Warning message:
    In randomForest.default(trainX, trainY, mtry = tuneValue$.mtry,  :
  invalid mtry: reset to within valid range
> r
1000 samples
   1 predictors

No pre-processing
Resampling: Bootstrap (25 reps)

Summary of sample sizes: 1000, 1000, 1000, 1000, 1000, 1000, ...

Resampling results

  RMSE  Rsquared  RMSE SD  Rsquared SD
  297   0.00152   6.67     0.00197

Tuning parameter 'mtry' was held constant at a value of 2

【问题讨论】:

【参考方案1】:

您有一个级别数适中的分类预测变量。当您使用公式接口时,大多数建模函数(包括trainlmglm 等)在内部运行model.matrix 来处理数据集。这将从任何因子变量创建虚拟变量。非公式接口没有[1]。

当您使用虚拟变量时,在任何拆分中只使用一个因子水平。树方法处理分类预测变量的方式不同,但是,当不使用虚拟变量时,随机森林将根据结果对因子预测变量进行排序,并找到因子水平的 2 向拆分 [2]。这需要更多时间。

最大

[1] 我讨厌成为那些说“在my book 我展示...”的人之一,但在这种情况下我会的。图 14.2 很好地说明了 CART 树的这个过程。

[2] 上帝,我又来了。 14.1 节讨论了树木因子的不同表示,14.7 节显示了对一个数据集的两种方法之间的比较

【讨论】:

我每天都使用“你的书”:),它比我读过的任何其他关于机器学习在 R 中的实际应用的文章都更有帮助。也就是说,你有任何例子吗我可以在没有使用“rf”以因子名称后缀的变量名称的情况下获得变量重要性 - 使用非公式方法。这可能很简单,但我无法在测试中使用非公式方法,除非我使用 model.matrix 进行拆分,这违背了目的......。谢谢! 试试这个:mod2 &lt;- train(iris[, -1], iris[, 1], method = "rf", importance = TRUE); varImp(mod2, scale = FALSE) 那么基于树的模型最好不要使用公式接口吗?我通常使用 dummyvars,但它通常会为许多因子水平做出很多预测。鉴于样本量较小,这是否比让树模型使用非公式方法处理更好?感谢您的任何建议

以上是关于插入符号训练的公式和非公式的不同结果的主要内容,如果未能解决你的问题,请参考以下文章

从 VBA 插入公式时出现不同的语言问题

使用 e1071 和插入符号的 SVM 模型的结果截然不同

使用WPS的公式编辑器的时候为啥符号显示为方框一样的东西

LaTeX 教程04. LaTeX 插入数学公式与符号

具有不同结果的相同公式字段

Haversine 公式的不同结果