2015-09-17 331 views
0

我有一個隨機森林與重要性/ varImPlot函數的問題,我希望有人可以幫助我?R-隨機森林 - 重要性/ varImPlot

我試圖代碼版本,但我感到困惑的(不同的)結果:

1)

rffit = randomForest(price~.,data=train,mtry=x,ntree=500) 
rfvalpred = predict(rffit,newdata=test) 
varImpPlot(rffit) 
importance(rffit) 

顯示的情節和「重要性」的數據,但只有「IncNodePurity」 。而數據不同的情節和數據,我嘗試與「規模」,但沒有奏效。

2.)

rf.analyzed_data = randomForest(price~.,data=train,mtry=x,ntree=500,importance=TRUE) 
yhat.rf = predict(rf.analyzed_data,newdata=test) 
varImpPlot(rf.analyzed_data) 
importance(rf.analyzed_data) 

在這種情況下它不產生任何了情節和重要性數據表示「%IncMSE」和「IncNodePurity」數據但「IncNodePurity」數據是第一碼不同? 問題: 1.)任何想法爲什麼數據與「IncNodePurity」不同? 2.)任何想法爲什麼沒有在第一個版本中顯示「%IncMSE」? 3.)爲什麼在第二個版本中沒有顯示劇情?

非常感謝! Ed

回答

2

1)IncNodePurity來自損失函數,只需通過訓練模型即可免費獲得該度量。不利方面,這是一個更不穩定的估計,因爲結果可能因每個模型運行而不同。它也更偏向於有利於多層次變量。我想你發現的差異是由於隨機性。

2)VI,%IncMSE需要一些額外的時間來計算,因此是可選的。粗略地說,數據集中的所有值都需要進行混洗,並且每個OOB樣本需要爲每個變量的每個樹時間預測一次。隨着randomForest包的設計,您必須在訓練期間計算VI。重要性必須設置爲TRUE。 varImpPlot無法繪製它,因爲它尚未計算。

3)不確定。在這個代碼示例中,我至少看到了兩個圖。

library(randomForest) 

#data 
X = data.frame(replicate(6,rnorm(1000))) 
y = with(X, X1^2 + sin(X2*pi) + X3*X4) 
train = data.frame(y=y,X=X) 
#training 
rf1=randomForest(y~.,data=train,importance=F) 
rf2=randomForest(y~.,data=train, importance=T) 
#plotting importnace 
varImpPlot(rf1) #plot only with IncNodePurity 

enter image description here

varImpPlot(rf2) #bi-plot also with %IncMSE 

enter image description here