繁体   English   中英

森林随机变量长度不同

[英]random forest variable lengths differ

我正在尝试使用功能作为响应变量来运行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
> 

您只是误解了公式是如何工作的。 基本上,你的第一次尝试是不应该工作。

公式应包含变量的名称,可能是变量的简单功能。 例如

var1 ~ var2
var1 ~ log(var2)

请注意缺少引号。 如果您未引用,则它不是字符串,而是符号。

因此,请避免在公式中使用原始字符串,奇怪的求值要求(例如Data[1]$任何用法)。 要根据字符串构造公式,请将其粘贴在一起,然后在生成的字符串上调用as.formula

请记住,公式的全部要点是您已经提供了模型的符号表示形式,然后R将继续在提供的数据框中查找您命名的特定列。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM