一、集成算法分為三類:
幾大算法之間的關(guān)系:https://blog.csdn.net/shange19/article/details/103000575
目前的集成學(xué)習(xí)方法大致分為兩大類:即個(gè)體學(xué)習(xí)器之間存在強(qiáng)依賴關(guān)系、必須串行生成的序列化方法,以及個(gè)體學(xué)習(xí)器間不存在強(qiáng)依賴關(guān)系、可同時(shí)生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“隨機(jī)森林”(Random Forest)。
1、隨機(jī)森林
2、GBDT
3、XGBOOST
隨機(jī)森林
自助抽樣,特征采樣,無剪枝,投票,減小方差
1,原理:
提到隨機(jī)森林,就不得不提Bagging,Bagging可以簡單的理解為:放回抽樣,多數(shù)表決(分類)或簡單平均(回歸),同時(shí)Bagging的基學(xué)習(xí)器之間屬于并列生成,不存在強(qiáng)依賴關(guān)系。Random Forest(隨機(jī)森林)是Bagging的擴(kuò)展變體,它在以決策樹 為基學(xué)習(xí)器構(gòu)建Bagging集成的基礎(chǔ)上,進(jìn)一步在決策樹的訓(xùn)練過程中引入了隨機(jī)特征選擇,因此可以概括RF包括四個(gè)部分:
1,隨機(jī)選擇樣本(放回抽樣);
2,隨機(jī)選擇特征;
3,構(gòu)建決策樹;
4,隨機(jī)森林投票(平均)。
方差減小,而且方差的減小補(bǔ)償了偏差的增大,因此總體而言是更好的模型。
在構(gòu)建決策樹的時(shí)候,RF的每棵決策樹都最大可能的進(jìn)行生長而不進(jìn)行剪枝;在對預(yù)測輸出進(jìn)行結(jié)合時(shí),RF通常對分類問題使用簡單投票法,回歸任務(wù)使用簡單平均法。
2,特征重要性度量
RF的重要特性是不用對其進(jìn)行交叉驗(yàn)證或者使用一個(gè)獨(dú)立的測試集獲得無偏估計(jì),它可以在內(nèi)部進(jìn)行評估,也就是說在生成的過程中可以對誤差進(jìn)行無偏估計(jì),由于每個(gè)基學(xué)習(xí)器只使用了訓(xùn)練集中約63.2%的樣本,剩下約36.8%的樣本可用做驗(yàn)證集來對其泛化性能進(jìn)行“包外估計(jì)”。
3,RF和Bagging對比
RF的起始性能較差,特別當(dāng)只有一個(gè)基學(xué)習(xí)器時(shí),隨著學(xué)習(xí)器數(shù)目增多,隨機(jī)森林通常會(huì)收斂到更低的泛化誤差。隨機(jī)森林的訓(xùn)練效率也會(huì)高于Bagging,因?yàn)樵趩蝹€(gè)決策樹的構(gòu)建中,Bagging使用的是‘確定性’決策樹,在選擇特征劃分結(jié)點(diǎn)時(shí),要對所有的特征進(jìn)行考慮,而隨機(jī)森林使用的是‘隨機(jī)性’特征數(shù),只需考慮特征的子集。
4,優(yōu)點(diǎn):
1,在數(shù)據(jù)集上表現(xiàn)良好,相對于其他算法有較大的優(yōu)勢(訓(xùn)練速度、預(yù)測準(zhǔn)確度);
2,能夠處理很高維的數(shù)據(jù),并且不用特征選擇,而且在訓(xùn)練完后,給出特征的重要性;
3,容易做成并行化方法。
5,缺點(diǎn)
在噪聲較大的分類或者回歸問題上會(huì)過擬合。
6,離群點(diǎn)敏感性
噪聲點(diǎn)影響:Adaboost > SVM > RF
7,參數(shù)
bagging參數(shù)
n_estimators : integer, optional (default=10),樹的棵樹
criterion : string, optional (default="gini"),分裂標(biāo)準(zhǔn),不同分裂標(biāo)準(zhǔn)對應(yīng)不同基模型
樹參數(shù)
max_features : int, float, string or None, optional (default="auto",log,none),尋找最佳分裂點(diǎn)時(shí)要考慮的樣本數(shù)目,默認(rèn)為開方,log(nfeatures,2),none=nfeatures
max_depth : integer or None, optional (default=None),樹的最大深度,如果沒有則節(jié)點(diǎn)被擴(kuò)展到完全純凈
min_samples_split : int, float, optional (default=2),分裂時(shí)所需最少樣本數(shù)目
min_samples_leaf : int, float, optional (default=1),葉子節(jié)點(diǎn)上最少樣本數(shù),預(yù)剪枝相關(guān)
min_weight_fraction_leaf : float, optional (default=0.)
GBDT
串行,回歸樹,容易過擬合,減小偏差,等概率提升錯(cuò)誤樣本,異常值敏感
Boosting與Bagging不太一樣,Bagging中的分類器權(quán)值是一樣的,而Boosting中的分類器權(quán)重并不相等,每個(gè)權(quán)重代表對應(yīng)的分類器在上一輪迭代中的成功度。
1,原理
GBDT與傳統(tǒng)的Boosting區(qū)別較大,它的每一次計(jì)算都是為了減少上一次的殘差,而為了消除殘差,我們可以在殘差減小的梯度方向上建立模型,所以說,在GradientBoost中,每個(gè)新的模型的建立是為了使得之前的模型的殘差往梯度下降的方法,與傳統(tǒng)的Boosting中關(guān)注正確錯(cuò)誤的樣本加權(quán)有著很大的區(qū)別。
在GradientBoosting算法中,關(guān)鍵就是利用損失函數(shù)的負(fù)梯度方向在當(dāng)前模型的值作為殘差的近似值,進(jìn)而擬合一棵CART回歸樹。
GBDT的會(huì)累加所有樹的結(jié)果,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調(diào)整后也可以用于分類但不代表GBDT的樹為分類樹)。
2,優(yōu)缺點(diǎn):
1,它能靈活的處理各種類型的數(shù)據(jù);
2,在相對較少的調(diào)參時(shí)間下,預(yù)測的準(zhǔn)確度較高。
3,當(dāng)然由于它是Boosting,因此基學(xué)習(xí)器之前存在串行關(guān)系,難以并行訓(xùn)練數(shù)據(jù)。
3, 注意點(diǎn)
GBDT做分類時(shí),每一次迭代需要有k棵樹,k是類別數(shù)目,每棵樹對一個(gè)類別進(jìn)行預(yù)測。每個(gè)葉子節(jié)點(diǎn)也只是輸出一個(gè)值,可把這顆樹看作一個(gè)函數(shù)f,f將輸入樣本的特征映射為該值。(注意,該值并不是類別的概率,概率還需要一個(gè)logistic轉(zhuǎn)化,logistic regression是:特征x先轉(zhuǎn)化成實(shí)值z,然后z經(jīng)過logistic regression轉(zhuǎn)化成概率p(x),這里葉子節(jié)點(diǎn)的值相當(dāng)于z)。
4, GBDT和隨機(jī)森林的相同點(diǎn):
1、都是由多棵樹組成
2、最終的結(jié)果都是由多棵樹一起決定
5,GBDT和隨機(jī)森林的不同點(diǎn):
1、組成隨機(jī)森林的樹可以是分類樹,也可以是回歸樹;而GBDT只由回歸樹組成
2、組成隨機(jī)森林的樹可以并行生成;而GBDT只能是串行生成
3、對于最終的輸出結(jié)果而言,隨機(jī)森林采用多數(shù)投票等;而GBDT則是將所有結(jié)果累加起來,或者加權(quán)累加起來
4、隨機(jī)森林對異常值不敏感,GBDT對異常值非常敏感
5、隨機(jī)森林對訓(xùn)練集一視同仁,GBDT是基于權(quán)值的弱分類器的集成
6、隨機(jī)森林是通過減少模型方差提高性能,GBDT是通過減少模型偏差提高性能
6,GBDT參數(shù)
Boosting參數(shù)
loss : {'deviance 對數(shù)損失 - sum(log(pipi))', 'exponential 指數(shù)損失 e(-y*f(x))'},(默認(rèn)='deviance')
learning_rate : float, optional (default=0.1),每棵按照學(xué)習(xí)率做縮減
n_estimators : int (default=100),迭代次數(shù)
樹參數(shù)
max_depth : integer, optional (default=3),樹的最大深度,限制了每棵樹的葉子節(jié)點(diǎn)數(shù)目
criterion : string, optional (default="friedman_mse"),分裂標(biāo)準(zhǔn),默認(rèn)為均方誤差
min_samples_split : int, float, optional (default=2),節(jié)點(diǎn)分裂時(shí)需要的最小樣本數(shù)目
min_samples_leaf : int, float, optional (default=1),葉子節(jié)點(diǎn)最小樣本數(shù)目,預(yù)剪枝
subsample : float, optional (default=1.0),樣本采樣率
max_features : int, float, string or None, optional (default=None),尋找最優(yōu)分裂特征時(shí)需要的特征數(shù)量
min_impurity_split : float,停止生長閾值,預(yù)剪枝
max_leaf_nodes : int or None, optional (default=None),葉子節(jié)點(diǎn)最大數(shù)目
min_impurity_decrease : float, optional (default=0.),節(jié)點(diǎn)分裂閾值
模型參數(shù)
feature_importances_ : array, shape = [n_features],特征重要性
oob_improvement_ : array, shape = [n_estimators],損失變化列表
train_score_ : array, shape = [n_estimators],訓(xùn)練樣本得分
loss_ : LossFunction,損失函數(shù)
XGBoost
1,GBDT和XGBoost區(qū)別
1,傳統(tǒng)的GBDT以CART樹作為基學(xué)習(xí)器,XGBoost還支持線性分類器,這個(gè)時(shí)候XGBoost相當(dāng)于L1和L2正則化的邏輯斯蒂回歸(分類)或者線性回歸(回歸);
2,傳統(tǒng)的GBDT在優(yōu)化的時(shí)候只用到一階導(dǎo)數(shù)信息,XGBoost則對代價(jià)函數(shù)進(jìn)行了二階泰勒展開,得到一階和二階導(dǎo)數(shù);
3,XGBoost在代價(jià)函數(shù)中加入了正則項(xiàng),用于控制模型的復(fù)雜度。從權(quán)衡方差偏差來看,它降低了模型的方差,使學(xué)習(xí)出來的模型更加簡單,放置過擬合,這也是XGBoost優(yōu)于傳統(tǒng)GBDT的一個(gè)特性;
4,shrinkage(縮減),相當(dāng)于學(xué)習(xí)速率(XGBoost中的eta)。XGBoost在進(jìn)行完一次迭代時(shí),會(huì)將葉子節(jié)點(diǎn)的權(quán)值乘上該系數(shù),主要是為了削弱每棵樹的影響,讓后面有更大的學(xué)習(xí)空間。(GBDT也有學(xué)習(xí)速率);
5,列抽樣。XGBoost借鑒了隨機(jī)森林的做法,支持列抽樣,不僅防止過 擬合,還能減少計(jì)算;
6,對缺失值的處理。對于特征的值有缺失的樣本,XGBoost還可以自動(dòng) 學(xué)習(xí)出它的分裂方向;
7,XGBoost工具支持并行。Boosting不是一種串行的結(jié)構(gòu)嗎?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價(jià)函數(shù)里包含了前面t-1次迭代的預(yù)測值)。XGBoost的并行是在特征粒度上的。我們知道,決策樹的學(xué)習(xí)最耗時(shí)的一個(gè)步驟就是對特征的值進(jìn)行排序(因?yàn)橐_定最佳分割點(diǎn)),XGBoost在訓(xùn)練之前,預(yù)先對數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代 中重復(fù)地使用這個(gè)結(jié)構(gòu),大大減小計(jì)算量。這個(gè)block結(jié)構(gòu)也使得并行成為了可能,在進(jìn)行節(jié)點(diǎn)的分裂時(shí),需要計(jì)算每個(gè)特征的增益,最終選增益最大的那個(gè)特征去做分裂,那么各個(gè)特征的增益計(jì)算就可以開多線程進(jìn)行。
8,可并行的近似直方圖算法。樹節(jié)點(diǎn)在進(jìn)行分裂時(shí),我們需要計(jì)算每個(gè)特征的每個(gè)分割點(diǎn)對應(yīng)的增益,即用貪心法枚舉所有可能的分割點(diǎn)。當(dāng)數(shù)據(jù)無法一次載入內(nèi)存或者在分布式情況下,貪心算法效率就會(huì)變得很低,所以xgboost還提出了一種可并行的近似直方圖算法,用于高效地生成候選的分割點(diǎn)。
2,xgboost參數(shù)
性能參數(shù):
1,booster:所使用的模型,gbtree或gblinear
2,silent:1則不打印提示信息,0則打印,默認(rèn)為0
3,nthread:所使用的線程數(shù)量,默認(rèn)為最大可用數(shù)量
樹參數(shù):
1,eta:學(xué)習(xí)率,默認(rèn)初始化為0.3,經(jīng)多輪迭代后一般衰減到0.01至0.2
2,min_child_weight:每個(gè)子節(jié)點(diǎn)所需的最小權(quán)重和,默認(rèn)為1
3,max_depth:樹的最大深度,默認(rèn)為6,一般為3至10
4,max_leaf_nodes:葉結(jié)點(diǎn)最大數(shù)量,默認(rèn)為2^6
5,gamma:拆分節(jié)點(diǎn)時(shí)所需的最小損失衰減,默認(rèn)為0
6,max_delta_step:默認(rèn)為0
7,subsample:每棵樹采樣的樣本數(shù)量比例,默認(rèn)為1,一般取0.5至1
8,colsample_bytree:每棵樹采樣的特征數(shù)量比例,默認(rèn)為1,一般取0.5至1
9,colsample_bylevel:默認(rèn)為1
10,lambda:L2正則化項(xiàng),默認(rèn)為1
11,alpha:L1正則化項(xiàng),默認(rèn)為1
12,scale_pos_weight:加快收斂速度,默認(rèn)為1
任務(wù)參數(shù):
1,objective:目標(biāo)函數(shù),默認(rèn)為reg:linear,還可取binary:logistic、multi:softmax、multi:softprob
2,eval_metric:誤差函數(shù),回歸默認(rèn)為rmse,分類默認(rèn)為error,其他可取值包括rmse、mae、logloss、merror、mlogloss、auc
3,seed:隨機(jī)數(shù)種子,默認(rèn)為0
原文鏈接:https://blog.csdn.net/u012155582/article/details/79866245