0

機能を応答変数として使用して 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
> 
4

1 に答える 1

3

式の仕組みを誤解しているだけです。基本的に、最初の試みはうまくいかないはずです。

数式は、変数の名前で構成されている必要があり、それらの単純な関数である可能性があります。例えば

var1 ~ var2
var1 ~ log(var2)

引用符がないことに注意してください。引用しなかった場合、それは文字列ではなく、シンボルです。

したがって、生の文字列、変な評価要求 ( Data[1]、または の使用など$) を数式で使用しないでください。文字列から数式を作成as.formulaするには、数式を貼り付けてから、結果の文字列を呼び出します。

式の要点は、モデルのシンボリック表現を提供したことであり、R は提供されたデータ フレームで名前を付けた特定の列を探しに行くことに注意してください。

一部の関数は数式の文字列表現の強制を行うと思いますが(例:"var1 ~ var2")、私はそれを期待したり期待したりしません。

于 2013-07-25T22:21:13.303 に答える