一、概述
??AdaBoost(Adaptive Boosting,自適應提升)是一種迭代式的集成學習算法,通過不斷調整樣本權重,提升弱學習器性能,最終集成為一個強學習器。它繼承了 Boosting 的基本思想和關鍵機制,但在具體的實現中有著顯著特點,成為具有一定特定性能和適用場景的集成學習算法。
二、算法過程
(1)設置初始樣本權重
??在算法開始時,為訓練數據集中的每一個樣本設定一個相同的權重。如對于樣本集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D=\left\{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \right\} D={(x1?,y1?),(x2?,y2?),...,(xn?,yn?)},初始權重為 w ( 1 ) = ( w 1 ( 1 ) , w 2 ( 1 ) , . . . , w n ( 1 ) ) w^{(1)}=\left( w_{1}^{(1)} ,w_{2}^{(1)},...,w_{n}^{(1)} \right) w(1)=(w1(1)?,w2(1)?,...,wn(1)?) ,其中 w i ( 1 ) = 1 n w_{i}^{(1)}=\frac{1}{n} wi(1)?=n1?,即在第一輪訓練時,每個樣本在模型訓練中的重要度是相同的。
(2)訓練弱學習器?
??基于當前的權重分布,訓練一個弱學習器。基于當前的權重分布,訓練一個弱學習器。弱學習器是指一個性能僅略優于隨機猜測的學習算法,例如決策樹樁(一種簡單的決策樹,通常只有一層)。在訓練過程中,弱學習器會根據樣本的權重來調整學習的重點,更關注那些權重較高的樣本。
(3) 計算弱學習器的權重
??根據弱學習器在訓練集上的分類錯誤率,計算該弱學習器的權重。錯誤率越低,說明該弱學習器的性能越好,其權重也就越大;反之,錯誤率越高的弱學習器權重越小。通常使用的計算公式為
α = 1 2 l n ( 1 ? ε ε ) \alpha=\frac{1}{2}ln\left( \frac{1-\varepsilon}{\varepsilon} \right) α=21?ln(ε1?ε?)
??其中 ε \varepsilon ε是該弱學習器的錯誤率。
(4) 更新訓練數據的權重分布
??根據當前數據的權重和弱學習器的權重,更新訓練數據的權重分布。具體的更新規則是,對于被正確分類的樣本,降低其權重;對于被錯誤分類的樣本,提高其權重。這樣,在下一輪訓練中,弱學習器會更加關注那些之前被錯誤分類的樣本,從而有針對性地進行學習。公式為
w i ( t + 1 ) = w i ( t ) Z t ? { e ? α t , i f h t ( x i ) = y i e α t , i f h t ( x i ) ≠ y i \begin{equation} w_{i}^{(t+1)}=\frac{w_{i}^{(t)}}{Z_t}\cdot \begin{cases} e^{-\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)=y_i \\ e^{\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)\ne y_i \end{cases} \end{equation} wi(t+1)?=Zt?wi(t)???{e?αt?,ifht?(xi?)=yi?eαt?,ifht?(xi?)=yi????
??其中, w i ( t ) w_{i}^{(t)} wi(t)?是第 t t t 輪中第 i i i個樣本的權重, Z t Z_t Zt?是歸一化因子,確保更新后的樣本權重之和為 1, h t ( x i ) h_t(x_i) ht?(xi?)是第 t t t個弱學習器對第 i i i個樣本的預測結果。
(5) 重復以上步驟
??不斷重復訓練弱學習器、計算弱學習器權重、更新數據權重分布的過程,直到達到預設的停止條件,如訓練的弱學習器數量達到指定的上限,或者集成模型在驗證集上的性能不再提升等。
(6)構建集成模型
??將訓練好的所有弱學習器按照其權重進行組合,得到最終的集成模型。如訓練得到一系列弱學習器 h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1?,h2?,...,hT?及其對應的權重 α 1 , α 2 , . . . , α T \alpha_1,\alpha_2,...,\alpha_T α1?,α2?,...,αT?,最終的強學習器 H ( X ) H(X) H(X)通過對這些弱學習器進行加權組合得到。對于分類問題,通常采用符號函數 H ( X ) = s i g n ( ∑ t = 1 T α t h t ( X ) ) H\left( X \right)=sign\left( \sum_{t=1}^{T}{\alpha_th_t(X)} \right) H(X)=sign(∑t=1T?αt?ht?(X))輸出;對于回歸問題,則可采用加權平均的方式輸出。
過程圖示如下
三、算法特性與應用場景
優勢:算法通過不斷調整樣本權重和組合多個弱學習器,能夠有效提高預測的準確性;可以自適應地調整樣本的學習重點,對于不同分布的數據集有較好的適應性;對數據的分布沒有嚴格的假設,不需要事先知道關于數據的一些先驗知識。
不足:如果訓練數據中存在噪聲或異常值,可能會過度擬合這些數據,導致在測試集上的泛化能力下降;每次迭代都需要重新計算樣本權重和訓練弱分類器,當訓練數據量較大或迭代次數較多時,計算成本較高。
應用場景:在圖像識別、語音識別、目標檢測、文本分類、生物信息等方面有著廣泛的應用。
四、Python實現
(環境:Python 3.11,scikit-learn 1.6.1)
分類情形
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score# 生成一個二分類的數據集
X, y = make_classification(n_samples=1000, n_features=10,n_informative=5, n_redundant=0,random_state=42,n_classes=2)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 創建AdaBoost分類器實例
ada_classifier = AdaBoostClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 訓練模型
ada_classifier.fit(X_train, y_train)# 進行預測
y_pred = ada_classifier.predict(X_test)# 評估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
回歸情形
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error# 生成模擬回歸數據
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, noise=0.5, random_state=42)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創建 AdaBoost 回歸器
ada_reg = AdaBoostRegressor(n_estimators=100, random_state=42)# 訓練模型
ada_reg.fit(X_train, y_train)# 在測試集上進行預測
y_pred = ada_reg.predict(X_test)# 計算均方誤差評估模型性能
mse = mean_squared_error(y_test, y_pred)
print(f"均方誤差: {mse}")
End.
下載