集成方法的目的是通過結(jié)合很多基學(xué)習(xí)器來增強(qiáng)泛化和魯棒性。
兩種集成方法:
- averaging methods,主要原則是獨(dú)立地建立很多基學(xué)習(xí)器,然后取預(yù)測結(jié)果的平均值;聯(lián)合估計(jì)通常比任一單一估計(jì)有表現(xiàn)的更好,因?yàn)榉讲顪p小了。例如:Bagging methods, Forests of randomized trees, ...
- boosting methods,建立一系列基學(xué)習(xí)器,每一個(gè)都試圖去減小聯(lián)合估計(jì)的偏倚;通過結(jié)合許多弱模型而產(chǎn)生一個(gè)強(qiáng)集合。例如: AdaBoost, Gradient Tree Boosting, ...
Bagging meta-estimator
在集成算法中,bagging方法形成了這樣一類算法:在原始訓(xùn)練集中生成隨機(jī)子集,建立很多黑盒學(xué)習(xí)器,然后匯總每個(gè)學(xué)習(xí)器的預(yù)測結(jié)果形成最終的結(jié)果。
Bagging 方法有很多種,主要區(qū)別在于從訓(xùn)練集中提取隨機(jī)子集的方法:
1.樣本的隨機(jī)子集,被稱作Pasting;
2.有放回的抽樣,稱作Bagging;
3.特征的隨機(jī)子集,稱作Random Subspaces;
4.樣本和特征的子集,稱作Random Patches。
隨機(jī)森林
基于隨機(jī)決策樹有兩種集成方法:隨機(jī)森林和Extra樹,這兩種算法都是 perturb-and-combine 技術(shù),意味著在分類器構(gòu)建過程中引進(jìn)了隨機(jī)性產(chǎn)生了一套不同的分類器集合。
在隨機(jī)森林中,每棵樹都是建立在訓(xùn)練集有放回抽樣基礎(chǔ)上的,并且,在節(jié)點(diǎn)分裂的過程中,最優(yōu)分裂也不再基于全部特征,而是特征的隨機(jī)子集。隨機(jī)性也導(dǎo)致隨機(jī)森林的偏倚有所上升,但是通過平均化,方差是下降的,更多地補(bǔ)償了偏倚的增加,得到更好的模型。
相比原著,sklearn使用了各個(gè)分類器預(yù)測概率的平均值,代替投票法。
Extremely Randomized Trees
在Extremely Randomized Trees中,隨機(jī)性在計(jì)算分裂的過程中更前進(jìn)了一步。如在隨機(jī)森林中一樣,使用候選特征的隨機(jī)子集,但不是尋找最優(yōu)閾值,而是從每個(gè)候選特征中隨機(jī)抽取閾值,這些閾值中最好的被當(dāng)作分裂規(guī)則。
參數(shù)
兩個(gè)主要參數(shù):n_estimators 和max_features,前者是森林中樹的數(shù)量,樹越多越好,但計(jì)算量也越大。另外也要注意到,超出樹的數(shù)量臨界值,結(jié)果并沒有顯著變好。后者是節(jié)點(diǎn)分裂的時(shí)候需要考慮的隨機(jī)特征的數(shù)量,特征數(shù)越少,方差越小,但偏倚越大。
根據(jù)經(jīng)驗(yàn),在回歸問題中,max_features=n_features,在分類中,max_features=sqrt(n_features) 。當(dāng)設(shè)置max_depth=None 和min_samples_split=1 時(shí),通常會(huì)得到好的結(jié)果,雖然并不是最優(yōu)結(jié)果,而且將耗費(fèi)很大的內(nèi)存。
最優(yōu)的參數(shù)來源于交叉驗(yàn)證。
在隨機(jī)森林中,默認(rèn)使用有放回抽樣(bootstrap=True),但是extra-trees 默認(rèn)使用全部數(shù)據(jù) (bootstrap=False)。
在使用有放回抽樣的時(shí)候,模型的準(zhǔn)確率可以通過未被抽樣的樣本來計(jì)算,可以通過設(shè)置 oob_score=True 來實(shí)現(xiàn),默認(rèn) False。
*Feature importance evaluation
*Totally Random Trees Embedding
Adaboost
AdaBoost的核心原則是用一系列弱學(xué)習(xí)器去擬合數(shù)據(jù),然后對(duì)它們的預(yù)測結(jié)果加權(quán)投票(求和)形成最終結(jié)果。在每次boosting迭代過程中,通過給訓(xùn)練樣本賦予權(quán)重來改變數(shù)據(jù)。樣本初始化權(quán)重都設(shè)為1/N,因此第一步是在原始數(shù)據(jù)上訓(xùn)練弱學(xué)習(xí)器。在每次迭代中,樣本權(quán)重獨(dú)立變化,使用重新賦權(quán)的數(shù)據(jù)訓(xùn)練新的算法。在給定的步驟中,用前一步的訓(xùn)練模型預(yù)測錯(cuò)誤的樣本將得到更高的權(quán)重,而預(yù)測正確的樣本權(quán)重將下降。在迭代過程中,那些很難預(yù)測的樣本將不斷提高影響。因此,每個(gè)后續(xù)的弱學(xué)習(xí)器都將被專注于那些在前一步預(yù)測錯(cuò)誤的樣本。
Gradient Tree Boosting
Gradient Tree Boosting或者 Gradient Boosted Regression Trees (GBRT)是一種利用任意可微損失函數(shù)(arbitrary differentiable loss functions)的泛化提升方法。GBRT是一種現(xiàn)成準(zhǔn)確有效的方法,用來解決回歸和分類問題。Gradient Tree Boosting被用在包括網(wǎng)絡(luò)搜索排名與生態(tài)等的很多領(lǐng)域。
GBRT的優(yōu)點(diǎn):
1.自然處理混合類型的數(shù)據(jù)(各種特征);
2.預(yù)測能力強(qiáng);
3.異常值的魯棒性(通過損失函數(shù))。
GBRT的不足:
不能并行計(jì)算。
分類
GradientBoostingClassifier支持兩類及多類分類。
當(dāng)分類數(shù)超過兩類時(shí),每次迭代需要 n_classes 回歸樹,導(dǎo)致最終的樹的數(shù)量為n_classes * n_estimators。如果數(shù)據(jù)集有很多類,建議使用 RandomForestClassifier 代替 GradientBoostingClassifier。
回歸
GradientBoostingClassifier支持各種回歸中使用的損失函數(shù),默認(rèn)使用最小平方(least squares)。
控制樹的規(guī)模
回歸樹基學(xué)習(xí)器的數(shù)量反映了通過Gradient Tree Boosting能獲得的變量之間交互水平。一般來說,樹的深度 h 能捕獲秩 h 的交互。有兩種方法能控制回歸樹的數(shù)量:
設(shè)置max_depth=h,則最終形成深為h 的二叉樹,這樣的樹最多有2h 個(gè)葉子節(jié)點(diǎn)以及 2h-1 個(gè)分裂節(jié)點(diǎn)。
設(shè)置max_leaf_nodes 指定葉子節(jié)點(diǎn)的數(shù)量, 在這種情況下,樹將使用最佳優(yōu)先搜索(best-first search )那些能顯著改善不純度的節(jié)點(diǎn)將優(yōu)先生長。
我們發(fā)現(xiàn),設(shè)置 max_leaf_nodes=k 相比 max_depth=k-1 的結(jié)果,訓(xùn)練速度顯著提高,而訓(xùn)練誤差只有輕微上升。在 R 的gbm包中,
max_leaf_nodes == interaction.depth + 1。
損失函數(shù)
可以通過參數(shù) loss 來設(shè)置損失函數(shù):
*回歸:
1.Least squares ('ls'),初始模型給出目標(biāo)值的均值;
2.Least absolute deviation ('lad'):初始模型給出目標(biāo)值的中位數(shù);
3.Huber ('huber'):結(jié)合 ls 和 lad,用alpha 去控制對(duì)異常值的敏感度;
4.Quantile ('quantile'):分位數(shù)回歸使用的損失函數(shù),用0 < alpha < 1 指定分位數(shù),這個(gè)損失函數(shù)被用來生成預(yù)測區(qū)間。
*分類:
1.Binomial deviance ('deviance');
2.Multinomial deviance ('deviance');
3.Exponential loss ('exponential')。
正則化
參數(shù) learning_rate 與參數(shù) n_estimators 有很強(qiáng)的關(guān)系。學(xué)習(xí)率越小,同樣的訓(xùn)練誤差情況下需要的弱學(xué)習(xí)器越多。經(jīng)驗(yàn)表明,學(xué)習(xí)率越小,越有利于減小測試誤差。建議設(shè)置小的學(xué)習(xí)率(<= 0.1)和選擇提前終止n_estimators。
解釋性
特征重要性
Partial dependence
投票分類器
*Hard Voting
每個(gè)分類器給出類標(biāo)簽,最多的類標(biāo)簽即為結(jié)果。
*Soft Voting
每個(gè)分類器給出預(yù)測的類的概率,乘以每個(gè)分類器的權(quán)重,然后取均值。加權(quán)平均概率最高的類標(biāo)簽即為結(jié)果。