AdaBoost在我看理論課程的時候,以分類為例子來講解的,誰知道sklearn里面基本上都有classifier和regressor兩種。這個倒是我沒想到的!!!
from sklearn.ensemble import AdaBoostRegressor
參數介紹:
base_estimator : object, optional (default=DecisionTreeRegressor)。基估計器,理論上可以選擇任何回歸器,但是這個地方需要支持樣本加權重,as well as proper classes_ and n_classes_ attributes.(這個地方不過會翻譯)。常用的是CART回歸樹和神經網絡,默認CART回歸樹,即AdaBoostRegressor默認使用CART回歸樹DecisionTreeRegressor。
n_estimators : integer, optional (default=50)。基估計器的個數。
learning_rate : float, optional (default=1.)。即每個弱學習器的權重縮減系數νν,在原理篇的正則化章節我們也講到了,加上了正則化項,我們的強學習器的迭代公式為
ν的取值范圍為0<ν≤1。對於同樣的訓練集擬合效果,較小的ν意味着我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。所以這兩個參數n_estimators和learning_rate要一起調參。一般來說,可以從一個小一點的ν開始調參,默認是1。
loss : {‘linear’, ‘square’, ‘exponential’}, optional (default=’linear’)。Adaboost.R2算法需要用到。有線性‘linear’, 平方‘square’和指數 ‘exponential’三種選擇, 默認是線性,一般使用線性就足夠了,除非你懷疑這個參數導致擬合程度不好。這個值的意義,它對應了我們對第k個弱分類器的中第i個樣本的誤差的處理,即:
如果是線性誤差,則
如果是平方誤差,則
如果是指數誤差,則
,Ek為訓練集上的最大誤差Ek=max|yi−Gk(xi)|i=1,2...m
random_state : int, RandomState instance or None, optional (default=None)
屬性介紹:
estimators_ : list of classifiers
estimator_weights_ : array of floats
estimator_errors_ : array of floats
feature_importances_ : array of shape = [n_features]
方法介紹:
from sklearn.ensemble import AdaBoostClassifier
參數介紹:
base_estimator : object, optional (default=DecisionTreeClassifier)。基估計器,理論上可以選擇任何分類器,但是這個地方需要支持樣本加權重,as well as proper classes_ and n_classes_ attributes.(這個地方不過會翻譯)。常用的是CART決策樹和神經網絡,默認CART決策樹,即AdaBoostClassifier默認使用CART決策樹DecisionTreeClassifier。
n_estimators : integer, optional (default=50)。基估計器的個數。
learning_rate : float, optional (default=1.)。通過這個參數縮減每個分類器的貢獻,learning_rate和n_estimators 兩個參數之間存在權衡。
algorithm : {‘SAMME’, ‘SAMME.R’}, optional (default=’SAMME.R’)。如果'SAMME.R'則使用SAMME.R (Real Boosting) 算法。 base_estimator必須支持類概率的計算。 如果'SAMME'則使用SAMME (discrete boosting) 算法。 SAMME.R算法通常收斂速度高於SAMME,通過較少的升壓迭代實現較低的測試誤差。(老哥們有好的翻譯理解記得評論下!)
如果我們選擇的AdaBoostClassifier算法是SAMME.R,則我們的弱分類學習器還需要支持概率預測,也就是在scikit-learn中弱分類學習器對應的預測方法除了predict還需要有predict_proba。
兩者的主要區別是弱學習器權重的度量,SAMME使用了和我們的原理篇里二元分類Adaboost算法的擴展,即用對樣本集分類效果作為弱學習器權重,而SAMME.R使用了對樣本集分類的預測概率大小來作為弱學習器權重。由於SAMME.R使用了概率度量的連續值,迭代一般比SAMME快,因此AdaBoostClassifier的默認算法algorithm的值也是SAMME.R。我們一般使用默認的SAMME.R就夠了,但是要注意的是使用了SAMME.R, 則弱分類學習器參數base_estimator必須限制使用支持概率預測的分類器。SAMME算法則沒有這個限制。
random_state : int, RandomState instance or None, optional (default=None)。如果int,random_state是隨機數生成器使用的種子; 如果RandomState的實例,random_state是隨機數生成器; 如果None,則隨機數生成器是由np.random使用的RandomState實例。
屬性介紹:
estimators_ : list of classifiers 子估計器
classes_ : array of shape = [n_classes] 類別的標簽信息
n_classes_ : int 類別的數量
estimator_weights_ : array of floats 每個基估計器的權重
estimator_errors_ : array of floats 每個基估計器的錯誤率
feature_importances_ : array of shape = [n_features] 如果基估計器支持的話
“具體調參”參考博客
調參還是分為兩部分:AdaBoost框架調參和弱分類器的調參。
框架參數調節:
框架參數就是值上述介紹的那些需要動態調節觀察效果的參數。
弱分類器參數調節:
這里我們僅僅討論默認的決策樹弱學習器的參數。即CART分類樹DecisionTreeClassifier和CART回歸樹DecisionTreeRegressor。