說明
随機森林是另一類可用的內建學習方法,該算法在訓練過程中将産生多棵決策樹,每棵決策樹會根據輸入資料集産生相應的預測輸出,算法采用投票機制選擇類别衆數做為預測結果。
操作
導入随機森林包:
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函數繪制森林對象均方差:
随機森林的均方差
根據建立好的模型評估各屬性的重要度:
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函數繪制變量重要性曲線
變量重要性示例
調用margin及plot函數并繪制邊緣累計分布圖:
margins.rf = margin(churn.rf,trainset)
plot(margins.rf)
随機森林算法邊緣累積分布圖
還可以用直方圖來繪制随機森林的邊緣分布:
邊緣分布直方圖
調用boxplot繪制随機森林各類别邊緣的箱線圖
boxplot(margins.rf ~ trainset$churn,main = "Margines of Random Forest for churn dataset by class")
随機森林類别邊緣箱圖
原理:
随機森林算法目标是通過将多個弱學習機(如單棵決策樹)組合得到一個強學習機,算法的處理過程與bagging方法非常相似,假設當擁有N個特征數為M的樣例,首先采用bootstrap對資料集進行采樣,每次随機采樣N個樣本作為單個決策樹的訓練資料集。在每個節點,算法首先随機選取m(m << M)個變量,從它們中間找到能夠提供最佳分割效果的預測屬性。
然後,算法在不剪枝的前提下生成單顆決策樹,最後從每個決策樹都得到一個分類預測結果。
如果是回歸分析,算法将取所有預測的平均值或者權重平均值作為最後剛出,如果是分類問題,則選擇類别預測衆數做為最終預測輸出。
随機森林包括兩個參數,ntree(決策樹個數)和mtry(可用來尋找最佳特征的特征個數),而bagging算法隻使用了一個ntree參數,是以,如果将mtry設定成與訓練資料集特征值一樣大時,随機森林算法就等同于bagging算法。
本例利用randomForest包提供的随機森林算法建立了分類模型,将importance值設定為“T”,以確定對預測器的重要性進行評估。
與bagging和boosting方法類似,一旦随機森林的模型建構完成,我們就能利用其對測試資料集進行預測,并得到相應的分類表。
randomForest包還提供了importance和varlmpPlot函數則可以通過繪制平均精确度下降或者平均基尼下降曲線實作屬性重要性的可視化。