随机森林变量长度不同

Posted

技术标签:

【中文标题】随机森林变量长度不同【英文标题】:random forest variable lengths differ 【发布时间】:2013-07-25 22:48:59 【问题描述】:

我正在尝试使用功能作为响应变量来运行 RF。我无法通过变量传递字符串以用作 RF 中的响应。首先,我尝试在通过变量作为响应传递的字符串上运行 RF,我得到一个“向量长度不同的错误”。在此之后,我尝试输入实际的字符串(特征)作为响应,它工作正常。你能解释一下为什么可变长度不同吗?谢谢。

> colnames(Data[1])
[1] "feature1"
> rf.file = randomForest(formula =colnames(Data[1])~ ., data = Data, proximity = T,      importance = T, ntree = 500, nodesize = 3)
Error in model.frame.default(formula = colnames(Data[1]) ~ .,  : 
  variable lengths differ (found for 'feature1')

Enter a frame number, or 0 to exit   

1: randomForest(formula = colnames(Data[1]) ~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3)
2: randomForest.formula(formula = colnames(Data[1]) ~ ., data = brainDataTrim, proximity = T, importance = T, ntree = 500, nodesize = 3)
3: eval(m, parent.frame())
4: eval(expr, envir, enclos)
5: model.frame(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...) 
6: model.frame.default(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...) 

Selection: 0



> rf.file = randomForest(formula =feature1~ ., data = Data, proximity = T,      importance = T, ntree = 500, nodesize = 3)
> rf.file

Call:
 randomForest(formula = feature1 ~ ., data = Data,      proximity = T, importance = T, ntree = 500, nodesize = 3) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 3

          Mean of squared residuals: 0.1536834
                    % Var explained: 34.21
> 

【问题讨论】:

【参考方案1】:

您只是误解了公式的工作原理。基本上,您的第一次尝试不应该起作用。

公式应该由变量名组成,可能是它们的简单函数。例如

var1 ~ var2
var1 ~ log(var2)

请注意缺少引号。如果你没有引用它,它就不是一个字符串,它是一个符号。

因此,请避免在公式中使用原始字符串、奇怪的评估要求(如 Data[1] 或任何使用 $)。要从字符串构造公式,请将其粘贴在一起,然后在结果字符串上调用as.formula

请记住,公式的全部意义在于您提供了模型的符号表示,然后 R 将在提供的数据框中查找您命名的特定列。

我认为某些函数会为您强制转换一个公式的字符串表示形式(例如 "var1 ~ var2"),但我不会指望或期望它。

【讨论】:

感谢您的回复!我看到 paste 可用于构造用于公式的字符串,并且这种方式实际上是可行的。我发现的另一种方法是使用公式(x,y)并调用实际数据表中的坐标以用作 x,y 坐标: randomForest(Data[ ,-1], Data [, 1] , 接近度 = T)

以上是关于随机森林变量长度不同的主要内容,如果未能解决你的问题,请参考以下文章

如何使用不同尺寸的多个分类输入变量为随机森林回归模型?

在随机森林中使用“一个热”编码的因变量

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)

如何在 R 中执行随机森林/交叉验证

随机森林变量重要性排序时的影响为负值怎么办

笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)