[英]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.