0

R でランダム フォレスト法を使用しようとしています。txt ファイル (トレーニング セット) を読み取る必要があります。

dataset<- read.table(path1,header=TRUE,sep=",")

列名は数値 (つまり 1005_at) であるため、R によって X を追加して自動的に変換されます (つまり X1005_at)。この問題を解決するために、私は次のことを行いました。

colnames(dataset)<-gsub("^[X](.*)","\\1",colnames(dataset)) 

名前は問題ありませんが、ランダム フォレストを実行すると、次のようになります。

model.rf <- randomForest(class ~ ., data=dataset, importance=TRUE,keep.forest=T, ntree=5, do.trace=T) 

このエラーがあります:

Error in eval(expr, envir, enclos) : object '1005_at' not found

元のデータセットでランダム フォレストを実行すると (名前を変更せずに X1005_at を使用)、このエラーは発生しません。なんで?どうすれば修正できますか?

4

1 に答える 1

0

およびread.csvの適切なデフォルトがすでにあるので使用し、引数を使用して名前のマングリングを回避します。 headersepcheck.names=FALSE

formulaメソッドはrandomForest、入力データ フレームで非構文名を受け入れません。代わりにデフォルトの方法を使用してください。

したがって、次のようになります。

> # dataset <- read.csv(path1, check.names = FALSE)
> 
> # next few lines are to make example similar to the one in the question
> dataset <- CO2
> names(dataset) <- c(paste(1:4, names(dataset[1:4]), sep = "_"), "class")
> names(dataset)
[1] "1_Plant"     "2_Type"      "3_Treatment" "4_conc"      "class"      
> 
> i <- match("class", names(dataset)) # i is index of class column
> fm <- randomForest(dataset[-i], dataset[[i]]
+    # other arguments - in this example none
+ )
> fm

Call:
 randomForest(x = dataset[-i], y = dataset[[i]]) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 26.43385
                    % Var explained: 77.13
> fm$importance
            IncNodePurity
1_Plant          2105.779
2_Type           1529.527
3_Treatment       557.300
4_conc           2265.724
于 2013-05-14T11:40:27.710 に答える