天天看點

R語言使用随機森林方法對資料分類

說明

随機森林是另一類可用的內建學習方法,該算法在訓練過程中将産生多棵決策樹,每棵決策樹會根據輸入資料集産生相應的預測輸出,算法采用投票機制選擇類别衆數做為預測結果。

操作

導入随機森林包:

library(randomForest)

           

使用随機森林分類器處理訓練資料:

churn.rf = randomForest(churn ~ .,data = trainset,importance = T)
churn.rf

Call:
 randomForest(formula = churn ~ ., data = trainset, importance = T) 
               Type of random forest: classification
                     Number of trees: 
No. of variables tried at each split: 

        OOB estimate of  error rate: %
Confusion matrix:
    yes   no class.error
yes      
no      
           

利用訓練好的模型對測試集進行分類預測:

churn.prediction = predict(churn.rf,testset)
           

類似其它分類處理,産生分類表:

table(churn.prediction,testset$churn)

churn.prediction yes  no
             yes    
             no    
           

調用plot函數繪制森林對象均方差:

R語言使用随機森林方法對資料分類

随機森林的均方差

根據建立好的模型評估各屬性的重要度:

importance(churn.rf)
                                     yes        no MeanDecreaseAccuracy MeanDecreaseGini
international_plan                                  
voice_mail_plan                                     
number_vmail_messages                               
total_day_minutes                                   
total_day_calls                 -            -         
total_day_charge                                    
total_eve_minutes                                   
total_eve_calls               - -            -         
total_eve_charge                                    
total_night_minutes                                  
total_night_calls             -                        
total_night_charge                                   
total_intl_minutes                                  
total_intl_calls                                    
total_intl_charge                                   
number_customer_service_calls                       
           

調用varlmPlot函數繪制變量重要性曲線

R語言使用随機森林方法對資料分類

變量重要性示例

調用margin及plot函數并繪制邊緣累計分布圖:

margins.rf = margin(churn.rf,trainset)
plot(margins.rf)
           
R語言使用随機森林方法對資料分類

随機森林算法邊緣累積分布圖

還可以用直方圖來繪制随機森林的邊緣分布:

R語言使用随機森林方法對資料分類

邊緣分布直方圖

調用boxplot繪制随機森林各類别邊緣的箱線圖

boxplot(margins.rf ~ trainset$churn,main = "Margines of Random Forest for churn dataset by class")
           
R語言使用随機森林方法對資料分類

随機森林類别邊緣箱圖

原理:

随機森林算法目标是通過将多個弱學習機(如單棵決策樹)組合得到一個強學習機,算法的處理過程與bagging方法非常相似,假設當擁有N個特征數為M的樣例,首先采用bootstrap對資料集進行采樣,每次随機采樣N個樣本作為單個決策樹的訓練資料集。在每個節點,算法首先随機選取m(m << M)個變量,從它們中間找到能夠提供最佳分割效果的預測屬性。

然後,算法在不剪枝的前提下生成單顆決策樹,最後從每個決策樹都得到一個分類預測結果。

如果是回歸分析,算法将取所有預測的平均值或者權重平均值作為最後剛出,如果是分類問題,則選擇類别預測衆數做為最終預測輸出。

随機森林包括兩個參數,ntree(決策樹個數)和mtry(可用來尋找最佳特征的特征個數),而bagging算法隻使用了一個ntree參數,是以,如果将mtry設定成與訓練資料集特征值一樣大時,随機森林算法就等同于bagging算法。

本例利用randomForest包提供的随機森林算法建立了分類模型,将importance值設定為“T”,以確定對預測器的重要性進行評估。

與bagging和boosting方法類似,一旦随機森林的模型建構完成,我們就能利用其對測試資料集進行預測,并得到相應的分類表。

randomForest包還提供了importance和varlmpPlot函數則可以通過繪制平均精确度下降或者平均基尼下降曲線實作屬性重要性的可視化。

繼續閱讀