隨機森林算法
隨機森林(Random Forest)是一種集成學習方法,特別用于分類、回歸和其他任務,它通過構建多個決策樹(Decision Trees)在訓練時進行預測,并采用平均或多數投票的方式來提高整體模型的準確性和魯棒性。隨機森林是由Leo Breiman和Adele Cutler提出的,它結合了Bagging(Bootstrap Aggregating)的思想和隨機特征選擇來構建決策樹的集合。
工作原理
隨機森林的工作過程可以概括為以下幾個步驟:
-
自助采樣(Bootstrap sampling):從原始數據集中使用有放回的抽樣方式隨機選擇N個樣本,形成一個訓練集。這個過程重復進行多次,每次生成的訓練集都用來構建一個新的決策樹。
-
隨機選擇特征:在構建決策樹的每個分裂節點時,不是查看所有特征來選擇最佳分裂特征,而是隨機選擇一部分特征候選集,并從中選擇最佳分裂特征。這一步增加了模型的隨機性,有助于提高模型的泛化能力。
-
構建決策樹:對于每個訓練集,構建一個決策樹。決策樹在訓練過程中不進行剪枝,允許它們盡可能地生長到最大深度。
-
匯總結果:
- 對于分類任務,隨機森林通過多數投票的方式確定最終的類別輸出。
- 對于回歸任務,隨機森林將所有決策樹的預測結果取平均值作為最終的預測輸出。
特點和優勢
- 準確性高:通過集成多個決策樹,隨機森林通常能夠達到很高的準確率,并且相比單個決策樹,它更不容易過擬合。
- 魯棒性強:隨機森林能夠處理大量數據集,即使數據具有高維特征并且存在少量的缺失數據也能很好地工作。
- 變量重要性評估:隨機森林能夠提供關于特征重要性的估計,這對于理解數據集中哪些特征對預測變量貢獻最大非常有用。
- 適用范圍廣:隨機森林可以用于分類和回歸任務,也被用于異常點檢測等其他機器學習任務中。
應用場景
隨機森林因其出色的準確性、魯棒性和易用性,在各種領域得到了廣泛的應用,包括但不限于:
- 醫療診斷
- 金融風險評估
- 股票市場分析
- 客戶行為預測
- 圖像分類和識別
- 生物信息學和基因分類
#coding=utf-8
#RandomForestClassifier.py
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier# 加載數據
filename="./glass.data"
glass_data = pd.read_csv(filename,index_col=0,header=None)
# 先從DataFrame中取出數組值(.value),只是為了方便后面顯示
X,y = glass_data.iloc[:,:-1].values, glass_data.iloc[:,-1].values
#X,y = glass_data.iloc[:,:-1], glass_data.iloc[:,-1]
# 劃分訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, shuffle=True, stratify=y, random_state=1)# 建立模型
rfc = RandomForestClassifier(max_depth=4,bootstrap=True,random_state=0)
rfc.fit(X_train, y_train)
print("訓練集準確率:",rfc.score(X_train,y_train))
print("測試集準確率:",rfc.score(X_test,y_test))
print("測試集前2個樣本的預測分類標簽:",rfc.predict(X_test[:2]))
print("測試集前2個樣本的真實分類標簽:",y_test[:2])
print("測試集前2個樣本所屬標簽概率的預測值:\n",rfc.predict_proba(X_test[:2]),sep="")