Sklearn参数详解—Adaboost
總第112篇
前言
今天這篇講講集成學習,集成學習就是將多個弱學習器集合成一個強學習器,你可以理解成現在有好多道判斷題(判斷對錯即01),如果讓學霸去做這些題,可能沒啥問題,幾乎全部都能做對,但是現實情況是學霸不常有,學渣倒是很多,怎么樣做才能保證題做對的準確率較高呢?就是讓多個學渣一起做, 每個人隨機挑選一部分題目來做,最后將所有人的結果進行匯總,然后根據將票多者作為最后的結果;另一種方式就是先讓學渣A做一遍,然后再讓學渣B做,且讓B重點關注A做錯的那些題,再讓C做,同樣重點關注B做錯的,依次循環,直到所有的學渣都把題目做了一遍為止。通過上面兩種方式就可以做到學渣也能取得和學霸一樣的成績啦。我們把這種若干個學渣組合達到學霸效果的這種方式稱為集成學習。
注:這里的學渣并無它意,請勿過度解讀。
理解了集成學習的原理以后,我們來看看關于集成學習的一些理論知識。
理論知識
集成學習,就是將多個弱學習器集合成一個強學習器,那么我們如何來選取弱學習器呢,主要有兩種方式。
第一種是所有的弱學習器都是一個種類的,比如都是決策樹模型。
另一種是所有的弱學習器并不完全一樣,你可以用LR預測一個結果,然后再用貝葉斯預測一個,再用SVM預測一個,然后對三個模型的預測結果進行投票,票數多者做為最后的結果。
我們實際業務中用的比較多的都是用同一種類的弱學習器去集合成一個強學習器。
我們找到了弱學習器以后就可以對弱學習器進行組合,組合的方式也有兩種,劃分依據主要是看弱學習器之間是否有聯系。
一種是弱學習器之間沒有聯系,每個弱學習器都是隨機從總樣本中抽取部分數據集(有放回抽樣)進行訓練,各個弱學習器之間是并聯關系,這樣就會生成若干個弱學習器,這種集成方式叫做bagging。隨機森林(RF)是bagging中比較有代表的算法。
另一種是弱學習器之間是相互聯系的,先所有訓練集樣本上訓練一個基模型,然后根據基模型的分類效果,把那些分類錯誤的樣本給予較高的權重(默認n個樣本中每個樣本的權重為1/n),再次進行訓練,這樣又會得出一個模型,模型又會有錯分類的,再次提高這些錯分類樣本的權重;如此循環,直到滿足預先設定的弱分類器數目。這種集成方式中各個弱學習器是串聯關系,每個弱學習器是建立在前一個弱學習器的基礎上的,我們把這種方式稱為boosting。Boosting系列算法里主要有AdaBoost算法和提升樹(boosting tree)系列算法。提升樹中應用最廣最普遍的算法就是梯度提升樹(Gradient Boosting Tree)。
Adaboost-模型
講完了集成學習,順便講講Sklearn中Adaboost模型,關于Adaboost模型的原理篇見:提升方法-Adaboost算法。
Adaboost-參數
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)base_estimator:基分類器,默認是決策樹,在該分類器基礎上進行boosting,理論上可以是任意一個分類器,但是如果是其他分類器時需要指明樣本權重。
n_estimators:基分類器提升(循環)次數,默認是50次,這個值過大,模型容易過擬合;值過小,模型容易欠擬合。
learning_rate:學習率,表示梯度收斂速度,默認為1,如果過大,容易錯過最優值,如果過小,則收斂速度會很慢;該值需要和n_estimators進行一個權衡,當分類器迭代次數較少時,學習率可以小一些,當迭代次數較多時,學習率可以適當放大。
algorithm:boosting算法,也就是模型提升準則,有兩種方式SAMME, 和SAMME.R兩種,默認是SAMME.R,兩者的區別主要是弱學習器權重的度量,前者是對樣本集預測錯誤的概率進行劃分的,后者是對樣本集的預測錯誤的比例,即錯分率進行劃分的,默認是用的SAMME.R。
random_state:隨機種子設置。
關于Adaboost模型本身的參數并不多,但是我們在實際中除了調整Adaboost模型參數外,還可以調整基分類器的參數,關于基分類的調參,和單模型的調參是完全一樣的,比如默認的基分類器是決策樹,那么這個分類器的調參和我們之前的Sklearn參數詳解——決策樹是完全一致。
Adaboost-對象
先生成一個分類器
from sklearn.datasets import load_iris from sklearn.ensemble import AdaBoostClassifier iris=load_iris() model=AdaBoostClassifier(n_estimators=100) clf=model.fit(iris.data,iris.target)pythonestimators_:以列表的形式返回所有的分類器。
列表長度
可以看到該對象得到的list的長度為100,剛好是咱們自定義的基分類器個數。
classes_:類別標簽
運行結果
estimator_weights_:每個分類器權重。
estimator_errors_:每個分類器的錯分率,與分類器權重相對應。
feature_importances_:特征重要性,這個參數使用前提是基分類器也支持這個屬性。
Adaboost-方法
decision_function(X):返回決策函數值(比如svm中的決策距離)
fit(X,Y):在數據集(X,Y)上訓練模型。
get_parms():獲取模型參數
predict(X):預測數據集X的結果。
predict_log_proba(X):預測數據集X的對數概率。
predict_proba(X):預測數據集X的概率值。
score(X,Y):輸出數據集(X,Y)在模型上的準確率。
staged_decision_function(X):返回每個基分類器的決策函數值
staged_predict(X):返回每個基分類器的預測數據集X的結果。
staged_predict_proba(X):返回每個基分類器的預測數據集X的概率結果。
staged_score(X, Y):返回每個基分類器的預測準確率。
Adaboost的大部分方法和其他模型基本一致,比其他模型多了幾個staged方法。staged是返回每個基分類的結果。
可以看到,直接運行staged方法,不會直接輸出結果,而是輸出一個生成器,要想得到具體的結果,需要遍歷打印輸出。
還可以看到,共輸出100項,這正好是我們100個基分類器的結果。
總結
以上是生活随笔為你收集整理的Sklearn参数详解—Adaboost的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每年健康成本 770 亿美元,新研究量化
- 下一篇: Sklearn参数详解—GBDT