机器学习-集成之AdaBoost算法原理及实战
生活随笔
收集整理的這篇文章主要介紹了
机器学习-集成之AdaBoost算法原理及实战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Boosting和AdaBoost
- 簡介
- Bagging采用的是一種多個分類器簡單評分的方式。而Boosting是和Bagging對應的一種將弱分類器組合成為強分類器的算法框架,它根據分類器學習誤差率來更新訓練樣本的權重。AdaBoost算法就是Boosting算法的一種。它建立在多個若分類器的基礎上,為分類器進行權重賦值,性能好的分類器能獲得更多權重,從而使評分效果更理想。
- 原理
- AdaBoost算法的基本步驟有以下三步。
- 初始化樣本權重,一般進行等權重處理。
- 訓練弱分類器,根據每個分類器的結果更新權重,再進行訓練,直到符合條件。
- 將弱分類器集合成為強分類器,一般是分類器誤差小的權重大。
- 以二元分類問題為例分析AdaBoost算法的原理,對于多元問題和回歸問題可以進行類似推理。
- 假設訓練集樣本是:T={(x1,y1),(x2,y2),...,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} T={(x1?,y1?),(x2?,y2?),...,(xm?,ym?)}
- 訓練集第k個弱學習器的輸出權重為:D(k)=(wk1,wk2,...wkn);w1i=1/m;i=1,2,...mD(k)=(w_{k1},w_{k2},...w_{kn}); w_{1i}=1/m;i=1,2,...m D(k)=(wk1?,wk2?,...wkn?);w1i?=1/m;i=1,2,...m
- 假設二元分類問題的輸出為{?1,1}\{-1,1\}{?1,1},則第k個弱分類器Gk(x)G_k(x)Gk?(x)在訓練集上的加權誤差率為ek=p(Gk(xi)?=yi)=∑i=1mWki∣(Gk(xi)?=yi)e_k=p(G_k(x_i) \not= y_i)=\sum_{i=1}^m W_{ki}|(G_k(x_i) \not= y_i) ek?=p(Gk?(xi?)??=yi?)=i=1∑m?Wki?∣(Gk?(xi?)??=yi?)
- 第k個弱分類器Gk(x)G_k(x)Gk?(x)的權重系數為:αk=12log?1?ekek\alpha_k={1 \over 2}\log {1-e_k \over e_k} αk?=21?logek?1?ek??
- 從上式可以看出,如果分類誤差率eke_kek?越大,則對應的弱分類器權重系數αk\alpha_kαk?越小。也就是說,誤差率小的弱分類器權重系數越大。
- 樣本權重的更新過程如下,假設第k個弱分類器的樣本集權重系數為D(k)=(wk1,wk2,...wkm)D(k)=(w_{k1},w_{k2},...w_{km})D(k)=(wk1?,wk2?,...wkm?),則對應的第k+1個弱分類器的樣本集權重系數為:wk+1,i=wkiZKexp(?αkyiGk(xi))w_{k+1,i}={w_{ki} \over Z_K}exp(-\alpha_ky_iG_k(x_i)) wk+1,i?=ZK?wki??exp(?αk?yi?Gk?(xi?)),這里ZKZ_KZK?是規范因子。
- 從上面的wk+1,iw_{k+1,i}wk+1,i?的計算公式可以看出,如果第i個樣本分類錯誤,則yiGk(xi)y_iG_k(x_i)yi?Gk?(xi?)導致樣本的權重在第k+1個弱分類器中增大;如果分類正確,則權重在第k+1個弱分類器中減小。
- AdaBoost算法采用加權平均方法進行融合,最終的強分類器為:f(x)=sign(∑k=1kαkGk(x))f(x)=sign(\sum_{k=1}^k \alpha_kG_k(x)) f(x)=sign(k=1∑k?αk?Gk?(x))
- AdaBoost具有原理簡單、分類精度高、能使用各種分類模型來構建弱學習器、不容易過擬合等特點,在實際中得到了廣泛應用。
- AdaBoost算法的基本步驟有以下三步。
- 實戰
- 使用AdaBoost進行二元分類
- 分類器使用sklearn模型(默認使用CART決策樹作為弱分類器)
- 數據集隨機生成
- 代碼
- # -*-coding:utf-8-*-import numpy as npimport matplotlib.pyplot as pltfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import make_gaussian_quantiles# 生成隨機數據集X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500,n_features=2,n_classes=2,random_state=1)X2, y2 = make_gaussian_quantiles(mean=(3, 3),cov=1.5,n_samples=400,n_features=2,n_classes=2,random_state=1)X = np.concatenate((X1, X2))y = np.concatenate((y1, -y2+1))# 繪制散點圖,將數據可視化plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 該參數準確率最高bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm='SAMME',n_estimators=600,learning_rate=0.7)# 訓練bdt.fit(X, y)# 生成網格圖查看擬合區域x_min, x_max = X[:, 0].min()-1, X[:, 0].max()+1y_min, y_max = X[:, 1].min()-1, X[:, 1].max()+1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contour(xx, yy, Z, cmap=plt.cm.Paired)plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 查看AdaBoost方法的分類精度print(bdt.score(X, y))
- 運行效果
- 補充說明
- 參考書為《Python3數據分析與機器學習實戰》,對部分錯誤修改
- 具體數據集和代碼見我的Github,歡迎Star或者Fork
總結
以上是生活随笔為你收集整理的机器学习-集成之AdaBoost算法原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-集成之随机森林算法原理及实战
- 下一篇: 机器学习-降维之主成分分析PCA算法原理