隨機森林算法:
在Bagging策略的基礎上進行修改后的一種算法
從樣本集中用Bootstrap采樣選出n個樣本;
從所有屬性中隨機選擇K個屬性,選擇出最佳分割屬性作為節點創建決策樹;
重復以上兩步m次,即建立m棵決策樹;
這m個決策樹形成隨機森林,通過投票表決結果決定數據屬於那一類
RF算法在實際應用中具有比較好的特性,應用也比較廣泛,主要應用在:分類、
回歸、特征轉換、異常點檢測等。常見的RF變種算法如下:
Extra Tree
Totally Random Trees Embedding(TRTE)
Isolation Forest
#Import Lib
From sklearn.ensemble import RandomForestClassifier
#use RandomForestRegressor for regression problem
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier(n_estimators=1000)
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
RF的主要優點:
-
訓練可以並行化,對於大規模樣本的訓練具有速度的優勢;
-
由於進行隨機選擇決策樹划分特征列表,這樣在樣本維度比較高的時候,仍然具有比較高的訓練性能;
-
給以給出各個特征的重要性列表;
-
由於存在隨機抽樣,訓練出來的模型方差小,泛化能力強;
-
RF實現簡單;
-
對於部分特征的缺失不敏感。
RF的主要缺點:
-
在某些噪音比較大的特征上,RF模型容易陷入過擬合;
-
取值比較多的划分特征對RF的決策會產生更大的影響,從而有可能影響模型的效果
==隨機森林參數==
Adaboost 是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)
Adaboost 算法本身是通過改變數據分布來實現的,它根據每次訓練集中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權值。將修改過權值的新數據送給下層分類器進行訓練,最后將每次得到的分類器融合起來,作為最后的決策分類器
-
Adaptive Boosting是一種迭代算法。每輪迭代中會在新訓練集上產生一個新的學習器,然后使用該學習器對所有樣本進行預測,以評估每個樣本的重要性 (Informative)。換句話來講就是,算法會為每個樣本賦予一個權重,每次用訓練好的學習器標注/預測各個樣本,如果某個樣本點被預測的越正確,則將其權重降低;否則提高樣本的權重。權重越高的樣本在下一個迭代訓練中所占的比重就越大,也就是說越難區分的樣本在訓練過程中會變得越重要;
-
整個迭代過程直到錯誤率足夠小或者達到一定的迭代次數為止
-
Adaboost算法將基分類器的線性組合作為強分類器,同時給分類誤差率較小的基分類器以更大的權值,給分類誤差率較大的基分類器以小的權重值。
Adaboost 算法核心思想
“關注”被錯分的樣本,“器重”性能好的弱分類器實現:
-
不同的訓練集:調整樣本權重
-
“關注”:增加錯分樣本權重
-
“器重”:好的分類器權重大
-
樣本權重間接影響分類器權重:樣本權重-分類器-性能(錯誤率)-分類器的權重
adaboost算法構造過程
-
假設訓練數據集
-
初始化訓練數據權重分布
-
使用具有權值分布Dm的訓練數據集學習,得到基本分類器
-
計算Gm(x)在訓練集上的分類誤差
-
計算Gm(x)模型的權重系數αm
-
權重訓練數據集的權值分布
-
權重歸一化
-
構建基本分類器的線性組合
-
adaboost參數
Adaboost 算法優缺點
優點:
1)Adaboost 是一種有很高精度的分類器
2)可以使用各種方法構建子分類器,Adaboost 算法提供的是框架
3)當使用簡單分類器時,計算出的結果是可以理解的,而弱分類器構造極其簡單
4)簡單,不用做特征篩選
AdaBoost的優點如下:
-
可以處理連續值和離散值;
-
解釋強,結構簡單。
AdaBoost的缺點如下:
-
對異常樣本敏感,異常樣本可能會在迭代過程中獲得較高的權重值,最終影響模型效果。
Adaboost 算法應用場景
1)用於二分類應用場景
2)用於做分類任務的 baseline--無腦化,簡單,不用調分類器
3)Boosting 框架用於對 badcase 的修正--只需要增加新的分類器,不需要變動原有分類器
-