2017-04-04 9 views
1

私は現在、100の異なる変数に基づいて構築されているランダムなフォレストを持っています。ランダムフォレストを構築してパフォーマンスを向上させるために「最も重要な」変数のみを選択できるようにしたいが、rf $重要度から重要性を得る以外にどこから始めるべきかわからない。ランダムフォレスト変数の選択

私のデータは、すべてがスケーリングされた数値変数で構成されています。以下は

私のRFコードです:

rf.2 = randomForest(x~., data=train,importance=TRUE, ntree=1501) 

#train 
rf_prob_train = data.frame(predict(rf.2, newdata=train, type="prob")) 
rf_prob_train <-data.frame(rf_prob_train$X0) 
val_rf_train<-cbind(rf_prob_train,train$x) 
names(val_rf_train)<-c("Probs","x") 

##Run accuracy ratio 
x<-data.frame(rcorr.cens(-val_rf_train$Probs, val_rf_train$x)) 
rf_train_AR<-x[2,1] 
rf_train_AR 

#test 
rf_prob_test = data.frame(predict(rf.2, test, type="prob")) 
rf_prob_test <-data.frame(rf_prob_test$X0) 
val_rf_test<-cbind(rf_prob_test,test$x) 
names(val_rf_test)<-c("Probs","x") 

##Run accuracy ratio 
x<-data.frame(rcorr.cens(-val_rf_test$Probs, val_rf_test$x)) 
rf_test_AR<-x[2,1] 
rf_test_AR 
+0

多変数である可能性のある変数を知っているか考えていますか?私は、マルチライン変数の数を減らすことが助けになることを発見しました。また、連続変数を正規化していますか?それも私にとってパフォーマンスの向上をもたらしました。しかし、ええ、ちょうどそれらを$重要性で呼び出すことは基本的にどのように行われます。あなたは説明した%分散を見ることもできますが、多かれ少なかれ同じことを言います。 – SeldomSeenSlim

+0

これはありがとう、私は実際に正確に何かを知っていないが、私は教育的な推測を持つことができます。一度私がそれらを$重要と呼んだら、もっと重要なものだけを含む次のステップを行う方法を知っていますか?現在私はちょうど私の変数とMeanDecreaseGiniのリストを持っています – user2902494

+0

あなたはあなたが保持したいものと拒否したいものを自分で決定しなければなりません。 MeanDecreaseGiniを見ると、漸近的に見えますか?あなたは変曲点について上記のすべてをつかみ、残りを残すかもしれません。あなたが分散のようなものに基づいてヘルプのサブ設定が必要な場合は、コメントを書き留めておきます。 – SeldomSeenSlim

答えて

3

忙しい一日、私はすぐにあなたにこれを取得することができませんでした。これは一般的なデータセットを使用して一般的なアイデアを提供します。

library(randomForest) 
library(datasets) 

head(iris) 
#To make our formula for RF easier to manipulate 

var.predict<-paste(names(iris)[-5],collapse="+") 
rf.form <- as.formula(paste(names(iris)[5], var.predict, sep = " ~ ")) 

print(rf.form) 
#This is our current itteration of the formula we're using in RF 

iris.rf<-randomForest(rf.form,data=iris,importance=TRUE,ntree=100) 

varImpPlot(iris.rf) 
#Examine our Variable importance plot 

to.remove<-c(which(data.frame(iris.rf$importance)$MeanDecreaseAccuracy==min(data.frame(iris.rf$importance)$MeanDecreaseAccuracy))) 
#Remove the variable with the lowest decrease in Accuracy (Least relevant variable) 

#Rinse, wash hands, repeat 

var.predict<-paste(names(iris)[-c(5,to.remove)],collapse="+") 
rf.form <- as.formula(paste(names(iris)[5], var.predict, sep = " ~ ")) 

iris.rf<-randomForest(rf.form,data=iris,importance=TRUE,ntree=100) 

varImpPlot(iris.rf) 
#Examine our Variable importance plot 

to.remove<-c(to.remove, which(data.frame(iris.rf$importance)$MeanDecreaseAccuracy==min(data.frame(iris.rf$importance)$MeanDecreaseAccuracy))) 

#And so on... 
関連する問題