版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 下載APP 35丨AdaBoost(下):如何使用AdaBoost對房價進(jìn)行預(yù)測?2019-03-04 陳旸數(shù)據(jù)分析實戰(zhàn)45講進(jìn)入課程 講述:陳旸時長 08:37 大小 7.90M今天我?guī)阌?AdaBoost 算法做一個實戰(zhàn)項目。AdaBoost 不僅可以用于分類問題,還可以用于回歸分析。我們先做個簡單回憶,什么是分類,什么是回歸呢?實際上分類和回歸的本質(zhì)是一樣的,都是對未知事物做預(yù)測。不同之處在于輸出結(jié)果的類型,分類輸出的是一個離散值,因為物體的分類數(shù)有限的,而回歸輸出的是連續(xù)值,也就是在一個區(qū)間范圍內(nèi)任何取值都有可能。這次我們的主要目標(biāo)是使用 AdaBoost 預(yù)測房價,這是一個回歸問
2、題。除了對項目進(jìn)行編碼實戰(zhàn)外,我希望你能掌握:1. AdaBoost 工具的使用,包括使用 AdaBoost 進(jìn)行分類,以及回歸分析。2. 使用其他的回歸工具,比如決策樹回歸,對比 AdaBoost 回歸和決策樹回歸的結(jié)果。如何使用 AdaBoost 工具我們可以直接在 sklearn 中使用 AdaBoost。如果我們要用 AdaBoost 進(jìn)行分類,需要在使用前引用代碼: 復(fù)制代碼 1 from sklearn.ensemble import AdaBoostClassifier我們之前講到過,如果你看到了 Classifier 這個類,一般都會對應(yīng)著 Regressor 類。AdaBoo
3、st 也不例外,回歸工具包的引用代碼如下: 復(fù)制代碼 1 from sklearn.ensemble import AdaBoostRegressor我們先看下如何在 sklearn 中創(chuàng)建 AdaBoost 分類器。我 們 需 要 使 用 AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=SAMME.R, random_state=None) 這個函數(shù),其中有幾個比較主要的參數(shù),我分別來講解下:1. base_estimator:代表的是弱分類器。在 AdaBoost 的
4、分類器和回歸器中都有這個參數(shù), 在 AdaBoost 中默認(rèn)使用的是決策樹,一般我們不需要修改這個參數(shù),當(dāng)然你也可以指定具體的分類器。2. n_estimators:算法的最大迭代次數(shù),也是分類器的個數(shù),每一次迭代都會引入一個新 的弱分類器來增加原有的分類器的組合能力。默認(rèn)是 50。3. learning_rate:代表學(xué)習(xí)率,取值在 0-1 之間,默認(rèn)是 1.0。如果學(xué)習(xí)率較小,就需要比較多的迭代次數(shù)才能收斂,也就是說學(xué)習(xí)率和迭代次數(shù)是有相關(guān)性的。當(dāng)你調(diào)整learning_rate 的時候,往往也需要調(diào)整 n_estimators 這個參數(shù)。4. algorithm:代表我們要采用哪種 bo
5、osting 算法,一共有兩種選擇:SAMME 和SAMME.R。默認(rèn)是 SAMME.R。這兩者之間的區(qū)別在于對弱分類權(quán)重的計算方式不同。5. random_state:代表隨機(jī)數(shù)種子的設(shè)置,默認(rèn)是 None。隨機(jī)種子是用來控制隨機(jī)模式的,當(dāng)隨機(jī)種子取了一個值,也就確定了一種隨機(jī)規(guī)則,其他人取這個值可以得到同樣的結(jié)果。如果不設(shè)置隨機(jī)種子,每次得到的隨機(jī)數(shù)也就不同。那么如何創(chuàng)建 AdaBoost 回歸呢?我們可以使用 AdaBoostRegressor(base_estimator=None, n_estimators=50,learning_rate=1.0, loss=linear, ran
6、dom_state=None) 這個函數(shù)。你能看出來回歸和分類的參數(shù)基本是一致的,不同點在于回歸算法里沒有 algorithm 這個參數(shù),但多了一個 loss 參數(shù)。loss 代表損失函數(shù)的設(shè)置,一共有 3 種選擇,分別為 linear、square 和 exponential,它們的含義分別是線性、平方和指數(shù)。默認(rèn)是線性。一般采用線性就可以得到不錯的效果。創(chuàng)建好 AdaBoost 分類器或回歸器之后,我們就可以輸入訓(xùn)練集對它進(jìn)行訓(xùn)練。我們使用fit 函數(shù),傳入訓(xùn)練集中的樣本特征值 train_X 和結(jié)果 train_y,模型會自動擬合。使用predict 函數(shù)進(jìn)行預(yù)測,傳入測試集中的樣本特征
7、值 test_X,然后就可以得到預(yù)測結(jié)果。如何用 AdaBoost 對房價進(jìn)行預(yù)測了解了 AdaBoost 工具包之后,我們看下 sklearn 中自帶的波士頓房價數(shù)據(jù)集。這個數(shù)據(jù)集一共包括了 506 條房屋信息數(shù)據(jù),每一條數(shù)據(jù)都包括了 13 個指標(biāo),以及一個房屋價位。13 個指標(biāo)的含義,可以參考下面的表格:這些指標(biāo)分析得還是挺細(xì)的,但實際上,我們不用關(guān)心具體的含義,要做的就是如何通過這13 個指標(biāo)推導(dǎo)出最終的房價結(jié)果。如果你學(xué)習(xí)了之前的算法實戰(zhàn),這個數(shù)據(jù)集的預(yù)測并不復(fù)雜。首先加載數(shù)據(jù),將數(shù)據(jù)分割成訓(xùn)練集和測試集,然后創(chuàng)建 AdaBoost 回歸模型,傳入訓(xùn)練集數(shù)據(jù)進(jìn)行擬合,再傳入測試集數(shù)據(jù)進(jìn)
8、行預(yù)測,就可以得到預(yù)測結(jié)果。最后將預(yù)測的結(jié)果與實際結(jié)果進(jìn)行對比,得到兩者之間的誤差。具體代碼如下: 復(fù)制代碼 1 from sklearn.model_selection import train_test_split2 from sklearn.metrics import mean_squared_error3 from sklearn.datasets import load_boston4 from sklearn.ensemble import AdaBoostRegressor5 # 加載數(shù)據(jù) 6 data=load_boston()7 # 分割數(shù)據(jù) 8 train_x, test
9、_x, train_y, test_y = train_test_split(data.data, data.target, test_size=09 # 使用 AdaBoost 回歸模型 10 regressor=AdaBoostRegressor()11 regressor.fit(train_x,train_y)12 pred_y = regressor.predict(test_x)13 mse = mean_squared_error(test_y, pred_y)14 print( 房價預(yù)測結(jié)果 , pred_y)15 print( 均方誤差 = ,round(mse,2)運行結(jié)果
10、: 復(fù)制代碼 1 房價預(yù)測結(jié)果 20.210.413793114.63820225 17.80322581 24.58931298 21.25076923227.52222222 17.8372093 31.79642857 20.86428571 27.87431694 31.09142857312.81666667 24.13131313 12.81666667 24.58931298 17.80322581 17.66333333427.8324.58931298 17.66333333 20.90823529 20.10555556 20.90823529528.20877193 20
11、.10555556 21.16882129 24.58931298 13.27619048 31.09142857617.08095238 26.19217391 9.97521.03404255 26.74583333 31.09142857725.83960396 11.85937513.38235294 24.58931298 14.97931034 14.46699029830.12777778 17.66333333 26.19217391 20.10206186 17.70540541 18.45909091926.19217391 20.10555556 17.66333333
12、33.31025641 14.97931034 17.705405411024.64421053 20.90823529 25.83960396 17.08095238 24.58931298 21.435714291119.31617647 16.33733333 46.04888889 21.25076923 17.08095238 25.839603961224.64421053 11.81470588 17.80322581 27.63636364 23.59731183 17.944444441317.66333333 27.7253886 20.21465517 46.048888
13、89 14.97931034 9.9751417.08095238 24.13131313 21.03404255 13.411.85937526.192142861521.25076923 21.03404255 47.11395349 16.33733333 43.21111111 31.657303371630.12777778 20.10555556 17.8372093 18.40833333 14.97931034 33.310256411724.58931298 22.88813559 18.27179487 17.80322581 14.63820225 21.16882129
14、1826.91538462 24.64421053 13.0514.97931034 9.97526.192173911912.81666667 26.19214286 49.46511628 13.27619048 17.70540541 25.839603962031.09142857 24.13131313 21.25076923 21.03404255 26.91538462 21.034042552121.16882129 17.8372093 12.81666667 21.03404255 21.03404255 17.080952382245.1666666723 均方誤差 =1
15、8.05這個數(shù)據(jù)集是比較規(guī)范的,我們并不需要在數(shù)據(jù)清洗,數(shù)據(jù)規(guī)范化上花太多精力,代碼編寫起來比較簡單。同樣,我們可以使用不同的回歸分析模型分析這個數(shù)據(jù)集,比如使用決策樹回歸和 KNN 回歸。編寫代碼如下: 復(fù)制代碼 1 # 使用決策樹回歸模型 2 dec_regressor=DecisionTreeRegressor()3 dec_regressor.fit(train_x,train_y)4 pred_y = dec_regressor.predict(test_x)5 mse = mean_squared_error(test_y, pred_y)6 print( 決策樹均方誤差 = ,r
16、ound(mse,2)7 # 使用 KNN 回歸模型 8 knn_regressor=KNeighborsRegressor()9 knn_regressor.fit(train_x,train_y)10 pred_y = knn_regressor.predict(test_x)11 mse = mean_squared_error(test_y, pred_y)12 print(KNN 均方誤差 = ,round(mse,2)運行結(jié)果: 復(fù)制代碼 1 決策樹均方誤差 =23.842 KNN 均方誤差 =27.87你能看到相比之下,AdaBoost 的均方誤差更小,也就是結(jié)果更優(yōu)。雖然 Ad
17、aBoost 使用了弱分類器,但是通過 50 個甚至更多的弱分類器組合起來而形成的強分類器,在很多情況下結(jié)果都優(yōu)于其他算法。因此 AdaBoost 也是常用的分類和回歸算法之一。AdaBoost 與決策樹模型的比較在 sklearn 中 AdaBoost 默認(rèn)采用的是決策樹模型,我們可以隨機(jī)生成一些數(shù)據(jù),然后對比下 AdaBoost 中的弱分類器(也就是決策樹弱分類器)、決策樹分類器和 AdaBoost 模型在分類準(zhǔn)確率上的表現(xiàn)。如果想要隨機(jī)生成數(shù)據(jù),我們可以使用 sklearn 中的 make_hastie_10_2 函數(shù)生成二分類數(shù)據(jù)。假設(shè)我們生成 12000 個數(shù)據(jù),取前 2000 個作
18、為測試集,其余作為訓(xùn)練集。有了數(shù)據(jù)和訓(xùn)練模型后,我們就可以編寫代碼。我設(shè)置了 AdaBoost 的迭代次數(shù)為 200, 代表 AdaBoost 由 200 個弱分類器組成。針對訓(xùn)練集,我們用三種模型分別進(jìn)行訓(xùn)練,然后用測試集進(jìn)行預(yù)測,并將三個分類器的錯誤率進(jìn)行可視化對比,可以看到這三者之間的區(qū)別:1 import numpy as np2 import matplotlib.pyplot as plt3 from sklearn import datasets4 from sklearn.metrics import zero_one_loss5 from sklearn.tree impor
19、t DecisionTreeClassifier6 from sklearn.ensemble import AdaBoostClassifier7 # 設(shè)置 AdaBoost 迭代次數(shù) 8 n_estimators=2009 # 使用 10 X,y=datasets.make_hastie_10_2(n_samples=12000,random_state=1)11 # 從 12000 個數(shù)據(jù)中取前 2000 行作為測試集,其余作為訓(xùn)練集 12 test_x, test_y = X2000:,y2000:13 train_x, train_y = X:2000,y:200014 # 弱分類器
20、 15 dt_stump = DecisionTreeClassifier(max_depth=1,min_samples_leaf=1)16 dt_stump.fit(train_x, train_y)17 dt_stump_err = 1.0-dt_stump.score(test_x, test_y)18 # 決策樹分類器 19 dt = DecisionTreeClassifier()20 dt.fit(train_x, train_y)21 dt_err = 1.0-dt.score(test_x, test_y)22 # AdaBoost 分類器 23 ada = AdaBoost
21、Classifier(base_estimator=dt_stump,n_estimators=n_estimators)24 ada.fit(train_x, train_y)25 # 三個分類器的錯誤率可視化 26 fig = plt.figure()27 # 設(shè)置 plt 正確顯示中文 28 plt.rcParamsfont.sans-serif = SimHei29 ax = fig.add_subplot(111)30 ax.plot(1,n_estimators,dt_stump_err*2, k-, label=u決策樹弱分類器 錯誤率)31 ax.plot(1,n_estima
22、tors,dt_err*2,k-, label=u決策樹模型 錯誤率)32 ada_err = np.zeros(n_estimators,)33 # 遍歷每次迭代的結(jié)果 i 為迭代次數(shù), pred_y 為預(yù)測結(jié)果 34 for i,pred_y in enumerate(ada.staged_predict(test_x):35 # 統(tǒng)計錯誤率 36 ada_erri=zero_one_loss(pred_y, test_y)37 # 繪制每次迭代的 AdaBoost 錯誤率 復(fù)制代碼 38 ax.plot(np.arange(n_estimators)+1, ada_err, label=
23、AdaBoost Test 錯誤率, color=orange39 ax.set_xlabel(迭代次數(shù))40 ax.set_ylabel(錯誤率)41 leg=ax.legend(loc=upper right,fancybox=True)42 plt.show()運行結(jié)果:從圖中你能看出來,弱分類器的錯誤率最高,只比隨機(jī)分類結(jié)果略好,準(zhǔn)確率稍微大于50%。決策樹模型的錯誤率明顯要低很多。而 AdaBoost 模型在迭代次數(shù)超過 25 次之后,錯誤率有了明顯下降,經(jīng)過 125 次迭代之后錯誤率的變化形勢趨于平緩。因此我們能看出,雖然單獨的一個決策樹弱分類器效果不好,但是多個決策樹弱分類器組合
24、起來形成的 AdaBoost 分類器,分類效果要好于決策樹模型??偨Y(jié)今天我?guī)阌?AdaBoost 回歸分析對波士頓房價進(jìn)行了預(yù)測。因為這是個回歸分析的問題,我們直接使用 sklearn 中的 AdaBoostRegressor 即可。如果是分類,我們使用AdaBoostClassifier。另外我們將 AdaBoost 分類器、弱分類器和決策樹分類器做了對比,可以看出經(jīng)過多個弱分類器組合形成的 AdaBoost 強分類器,準(zhǔn)確率要明顯高于決策樹算法。所以 AdaBoost 的優(yōu)勢在于框架本身,它通過一種迭代機(jī)制讓原本性能不強的分類器組合起來,形成一個強分類器。其實在現(xiàn)實工作中,我們也能找到類
25、似的案例。IBM服務(wù)器追求的是單個服務(wù)器性能的強大, 比如打造超級服務(wù)器。而 Google 在創(chuàng)建集群的時候,利用了很多 PC 級的服務(wù)器,將它們組成集群,整體性能遠(yuǎn)比一個超級服務(wù)器的性能強大。再比如我們講的“三個臭皮匠,頂個諸葛亮”,也就是 AdaBoost 的價值所在。今天我們用 AdaBoost 分類器與決策樹分類做對比的時候,使用到了 sklearn 中的make_hastie_10_2 函數(shù)生成數(shù)據(jù)。實際上在第 19 篇,我們對泰坦尼的乘客做生存預(yù)測的時候,也講到了決策樹工具的使用。你能不能編寫代碼,使用 AdaBoost 算法對泰坦尼 乘客的生存做預(yù)測,看看它和決策樹模型,誰的準(zhǔn)確
26、率更高?你也可以把這篇文章分享給你的朋友或者同事,一起切磋一下。 版權(quán)歸極客邦科技所有,未經(jīng)許可不得傳播售賣。 頁面已增加防盜追蹤,如有侵權(quán)極客邦將依法追究其法律責(zé)任。上一篇34丨AdaBoost(上):如何使用AdaBoost提升分類器性能?下一篇36丨數(shù)據(jù)分析算法篇答疑 寫留言精選留言 (11)Destroy、 72019-03-05源代碼中:# 從 12000 個數(shù)據(jù)中取前 2000 行作為測試集,其余作為訓(xùn)練集test_x, test_y = X2000:,y2000: train_x, train_y = X:2000,y:2000展開 third 22019-03-04結(jié)果仍然為AdaBoost算法最優(yōu)。個人發(fā)現(xiàn),前兩個分類器出結(jié)果很快分析最優(yōu):1. AdaBoost算法經(jīng)過了更多運算,特別是在迭代弱分類器和組合上2. 良好組合起來的個體,能夠創(chuàng)造更大的價值。展開 王彬成 12019-03-04由于乘客測試集
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年滬科新版九年級歷史上冊階段測試試卷含答案
- 2025年新世紀(jì)版必修二歷史上冊月考試卷
- 2025年青島版六三制新必修2地理下冊月考試卷含答案
- 2025年外研版2024高三生物上冊階段測試試卷
- 2025年浙教版選擇性必修3生物上冊月考試卷含答案
- 2025年度木材貿(mào)易代理服務(wù)合同范本2篇
- 2025賓館洗浴中心客戶滿意度提升與忠誠度維護(hù)合同3篇
- 2025版農(nóng)業(yè)科技園區(qū)基礎(chǔ)設(shè)施建設(shè)合同7篇
- 2025年度店面多媒體展示系統(tǒng)設(shè)計與安裝承包合同4篇
- 2025年度擬上公司與會計事務(wù)所財務(wù)數(shù)據(jù)共享保密合同4篇
- 2025-2030年中國草莓市場競爭格局及發(fā)展趨勢分析報告
- 第二章《有理數(shù)的運算》單元備課教學(xué)實錄2024-2025學(xué)年人教版數(shù)學(xué)七年級上冊
- 華為智慧園區(qū)解決方案介紹
- 奕成玻璃基板先進(jìn)封裝中試線項目環(huán)評報告表
- 廣西壯族自治區(qū)房屋建筑和市政基礎(chǔ)設(shè)施全過程工程咨詢服務(wù)招標(biāo)文件范本(2020年版)修訂版
- 人教版八年級英語上冊期末專項復(fù)習(xí)-完形填空和閱讀理解(含答案)
- 2024新版有限空間作業(yè)安全大培訓(xùn)
- GB/T 44304-2024精細(xì)陶瓷室溫斷裂阻力試驗方法壓痕(IF)法
- 年度董事會工作計劃
- 《退休不褪色余熱亦生輝》學(xué)校退休教師歡送會
- 02R112拱頂油罐圖集
評論
0/150
提交評論