集成學習
學習目標
- 瞭解集成學習中主要解決的兩個核心任務
- 知道bagging集成原理
- 知道隨機森林決策樹的建立過程
- 知道爲什麼需要隨機有放回(Bootstrap)的抽樣
- 應用RandomForestClassifie實現隨機森林算法
- 知道boosting集成原理
- 知道bagging和boosting的區別
- 瞭解gbdt實現過程
5.2 Bagging
1 Bagging集成原理
目標:把下面的圈和方塊進行分類
實現過程:
1.採樣不同數據集
2.訓練分類器
3.平權投票,獲取最終結果
4.主要實現過程小結
2 隨機森林構造過程
在機器學習中,隨機森林是一個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的衆數而定。
隨機森林 = Bagging + 決策樹
例如, 如果你訓練了5個樹, 其中有4個樹的結果是True, 1個樹的結果是False, 那麼最終投票結果就是True
隨機森林夠造過程中的關鍵步驟(用N來表示訓練用例(樣本)的個數,M表示特徵數目):
1)一次隨機選出一個樣本,有放回的抽樣,重複N次(有可能出現重複的樣本)
2) 隨機去選出m個特徵, m <<M,建立決策樹
-
思考
-
1.爲什麼要隨機抽樣訓練集?
如果不進行隨機抽樣,每棵樹的訓練集都一樣,那麼最終訓練出的樹分類結果也是完全一樣的
-
2.爲什麼要有放回地抽樣?
如果不是有放回的抽樣,那麼每棵樹的訓練樣本都是不同的,都是沒有交集的,這樣每棵樹都是“有偏的”,都是絕對“片面的”(當然這樣說可能不對),也就是說每棵樹訓練出來都是有很大的差異的;而隨機森林最後分類取決於多棵樹(弱分類器)的投票表決。
-
3 隨機森林api介紹
- sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)
- n_estimators:integer,optional(default = 10)森林裏的樹木數量120,200,300,500,800,1200
- Criterion:string,可選(default =“gini”)分割特徵的測量方法
- max_depth:integer或None,可選(默認=無)樹的最大深度 5,8,15,25,30
- max_features="auto”,每個決策樹的最大特徵數量
- If “auto”, then
max_features=sqrt(n_features)
. - If “sqrt”, then
max_features=sqrt(n_features)
(same as “auto”). - If “log2”, then
max_features=log2(n_features)
. - If None, then
max_features=n_features
.
- If “auto”, then
- bootstrap:boolean,optional(default = True)是否在構建樹時使用放回抽樣
- min_samples_split:節點劃分最少樣本數
- min_samples_leaf:葉子節點的最小樣本數
- 超參數:n_estimator, max_depth, min_samples_split,min_samples_leaf
4 隨機森林預測案例
- 實例化隨機森林
# 隨機森林去進行預測
rf = RandomForestClassifier()
- 定義超參數的選擇列表
param = {"n_estimators": [120,200,300,500,800,1200], "max_depth": [5, 8, 15, 25, 30]}
- 使用GridSearchCV進行網格搜索
# 超參數調優
gc = GridSearchCV(rf, param_grid=param, cv=2)
gc.fit(x_train, y_train)
print("隨機森林預測的準確率爲:", gc.score(x_test, y_test))
注意
- 隨機森林的建立過程
- 樹的深度、樹的個數等需要進行超參數調優
5 bagging集成優點
Bagging + 決策樹/線性迴歸/邏輯迴歸/深度學習… = bagging集成學習方法
經過上面方式組成的集成學習方法:
- 均可在原有算法上提高約2%左右的泛化正確率
- 簡單, 方便, 通用