一、随機森林算法預測簡介
随機森林 (random forest) 是一種基于分類樹 (classification tree) 的算法 (Breiman, 2001) 。這個算法需要模拟和疊代, 被歸類為機器學習中的一種方法。經典的機器學習模型是神經網絡 (Hopfield, 1982) , 有半個多世紀的曆史了。神經網絡預測精确, 但是計算量很大。20世紀80年代Breiman等人 (1984) 發明了分類和回歸樹 (Classification And Regression Tree, 簡稱CART) 的算法, 通過反複二分資料進行分類或回歸, 計算量大大降低。
RF是由一系列樹型分類器{h (x, Θ) }k, 其中k=1, …, 組合成的分類器, 其中Θk是獨立同分布随機向量, 且每棵樹對輸入向量x所屬的最受歡迎類投一票[6]。RF生成步驟如圖1所示: (1) 從總訓練樣本集D中用Bootstrap采樣選取k個子訓練樣本集D1, D2, …, Dk, 并預建k棵分類樹; (2) 在分類樹的每個節點上随機地從n個名額中選取m個, 選取最優分割名額進行分割; (3) 重複步驟 (2) 周遊預建的k棵分類樹; (4) 由k棵分類樹形成随機森林。
Bootstrap随機抽樣得到輸入訓練集和節點随機選取名額進行分割, 使得RF對噪聲有很好的容忍性, 且降低了分類樹之間的相關性。單棵樹不剪枝任意生長的特點可獲得低偏差分類樹, 且能夠保證對新測試資料分類的正确率。
RF的生成和單棵風險分類樹如圖1和圖2所示。

圖1 RF生成步驟
圖2 單棵風險分類樹
二、部分源代碼
%% 清空環境變量
warning off % 關閉報警資訊
close all % 關閉開啟的圖窗
clear % 清空變量
clc % 清空指令行%% 導入資料
res = xlsread(‘資料集.xlsx’);%% 劃分訓練集和測試集
temp = randperm(357);P_train = res(temp(1: 240), 1: 12)‘;
T_train = res(temp(1: 240), 13)’;
M = size(P_train, 2);P_test = res(temp(241: end), 1: 12)‘;
T_test = res(temp(241: end), 13)’;
N = size(P_test, 2);%% 資料歸一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax(‘apply’, P_test, ps_input );
t_train = T_train;
t_test = T_test ;%% 轉置以适應模型
p_train = p_train’; p_test = p_test’;
t_train = t_train’; t_test = t_test’;%% 訓練模型
trees = 50; % 決策樹數目
leaf = 1; % 最小葉子數
OOBPrediction = ‘on’; % 打開誤差圖
OOBPredictorImportance = ‘on’; % 計算特征重要性
Method = ‘classification’; % 分類還是回歸
net = TreeBagger(trees, p_train, t_train, ‘OOBPredictorImportance’, OOBPredictorImportance, …
‘Method’, Method, ‘OOBPrediction’, OOBPrediction, ‘minleaf’, leaf);
importance = net.OOBPermutedPredictorDeltaError; % 重要性
三、運作結果
四、matlab版本及參考文獻
1 matlab版本
2014a