最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

拓端tecdat:Python集成機(jī)器學(xué)習(xí):用AdaBoost、決策樹(shù)、邏輯回歸集成模型分類和回歸和

2021-12-14 22:32 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=24231?

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

Boosting 是一類集成機(jī)器學(xué)習(xí)算法,涉及結(jié)合許多弱學(xué)習(xí)器的預(yù)測(cè)。

弱學(xué)習(xí)器是一個(gè)非常簡(jiǎn)單的模型,盡管在數(shù)據(jù)集上有一些技巧。在開(kāi)發(fā)實(shí)用算法之前很久,Boosting 就是一個(gè)理論概念,而 AdaBoost(自適應(yīng)提升)算法是該想法的第一個(gè)成功方法。

AdaBoost算法包括使用非常短的(一級(jí))決策樹(shù)作為弱學(xué)習(xí)者,依次添加到集合中。每一個(gè)后續(xù)的模型都試圖糾正它之前的模型在序列中做出的預(yù)測(cè)。這是通過(guò)對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行權(quán)衡來(lái)實(shí)現(xiàn)的,將更多的注意力放在先前模型出現(xiàn)預(yù)測(cè)錯(cuò)誤的訓(xùn)練實(shí)例上。

在本教程中,您將了解如何開(kāi)發(fā)用于分類和回歸的 AdaBoost 集成。

完成本教程后,您將了解:

  • AdaBoost集成是一個(gè)由決策樹(shù)依次添加到模型中而形成的合集。

  • 如何使用 AdaBoost 集成通過(guò) scikit-learn 進(jìn)行分類和回歸。

  • 如何探索 AdaBoost 模型超參數(shù)對(duì)模型性能的影響。

  • 添加了網(wǎng)格搜索模型超參數(shù)的示例。

教程概述

本教程分為四個(gè)部分;他們是:

  1. AdaBoost 集成算法

  2. AdaBoost? API

    1. 用于分類的 AdaBoost

    2. 用于回歸的 AdaBoost

  3. AdaBoost 超參數(shù)

    1. 探索樹(shù)的數(shù)量

    2. 探索弱學(xué)習(xí)

    3. 探索學(xué)習(xí)率

    4. 探索替代算法

  4. 網(wǎng)格搜索 AdaBoost 超參數(shù)

AdaBoost 集成算法

Boosting?是指一類機(jī)器學(xué)習(xí)集成算法,其中模型按順序添加,序列中較晚的模型糾正序列中較早模型所做的預(yù)測(cè)。

AdaBoost是“?Adaptive Boosting?”的縮寫,是一種提升集成機(jī)器學(xué)習(xí)算法,并且是最早成功的提升方法之一。

我們稱該算法為 AdaBoost 是因?yàn)榕c以前的算法不同,它可以自適應(yīng)地調(diào)整弱假設(shè)的錯(cuò)誤

—?A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting, 1996.

AdaBoost 結(jié)合了來(lái)自短的一級(jí)決策樹(shù)的預(yù)測(cè),稱為決策樹(shù)樁,盡管也可以使用其他算法。決策樹(shù)樁算法被用作 AdaBoost 算法,使用許多弱模型并通過(guò)添加額外的弱模型來(lái)糾正它們的預(yù)測(cè)。

訓(xùn)練算法涉及從一個(gè)決策樹(shù)開(kāi)始,在訓(xùn)練數(shù)據(jù)集中找到那些被錯(cuò)誤分類的例子,并為這些例子增加更多的權(quán)重。另一棵樹(shù)在相同的數(shù)據(jù)上訓(xùn)練,盡管現(xiàn)在由誤分類錯(cuò)誤加權(quán)。重復(fù)此過(guò)程,直到添加了所需數(shù)量的樹(shù)。

如果訓(xùn)練數(shù)據(jù)點(diǎn)被錯(cuò)誤分類,則該訓(xùn)練數(shù)據(jù)點(diǎn)的權(quán)重會(huì)增加(提升)。使用新的權(quán)重構(gòu)建第二個(gè)分類器,這些權(quán)重不再相等。同樣,錯(cuò)誤分類的訓(xùn)練數(shù)據(jù)的權(quán)重增加,并重復(fù)該過(guò)程。

—?Multi-class AdaBoost, 2009.

該算法是為分類而開(kāi)發(fā)的,涉及組合集成中所有決策樹(shù)所做的預(yù)測(cè)。還為回歸問(wèn)題開(kāi)發(fā)了一種類似的方法,其中使用決策樹(shù)的平均值進(jìn)行預(yù)測(cè)。每個(gè)模型對(duì)集成預(yù)測(cè)的貢獻(xiàn)根據(jù)模型在訓(xùn)練數(shù)據(jù)集上的性能進(jìn)行加權(quán)。

新算法不需要弱假設(shè)準(zhǔn)確性的先驗(yàn)知識(shí)。相反,它適應(yīng)這些準(zhǔn)確性并生成加權(quán)多數(shù)假設(shè),其中每個(gè)弱假設(shè)的權(quán)重是其準(zhǔn)確性的函數(shù)。

—?A Decision-Theoretic Generalization of on-Line Learning and an Application to Boosting, 1996.

現(xiàn)在我們熟悉了 AdaBoost 算法,讓我們看看如何在?Python?中擬合 AdaBoost 模型。

AdaBoost Scikit-Learn API

scikit-learn Python 機(jī)器學(xué)習(xí)庫(kù)為機(jī)器學(xué)習(xí)提供了 AdaBoost 集成的實(shí)現(xiàn)。

首先,通過(guò)運(yùn)行以下腳本確認(rèn)您使用的版本:

  1. # 檢查scikit-learn版本


  2. import sklearn


  3. print(sklearn.__version__)

運(yùn)行該腳本將輸出的 scikit-learn 版本。? ?

在構(gòu)建模型的過(guò)程中使用了隨機(jī)性。這意味著每次在相同的數(shù)據(jù)上運(yùn)行該算法時(shí),都會(huì)產(chǎn)生一個(gè)略有不同的模型。

當(dāng)使用具有隨機(jī)學(xué)習(xí)算法的機(jī)器學(xué)習(xí)算法時(shí),通過(guò)在多次運(yùn)行或重復(fù)交叉驗(yàn)證中平均其性能來(lái)評(píng)估它們是很好的做法。在擬合最終模型時(shí),最好是增加樹(shù)的數(shù)量,直到模型的方差在重復(fù)評(píng)估中減少,或者擬合多個(gè)最終模型并平均其預(yù)測(cè)值。

讓我們來(lái)看看如何為分類和回歸開(kāi)發(fā) AdaBoost 集成。

用于分類的 AdaBoost

在本節(jié)中,我們將研究使用 AdaBoost 解決分類問(wèn)題。

首先,我們可以創(chuàng)建一個(gè)包含 1,000 個(gè)示例和 20 個(gè)輸入特征的合成二元分類問(wèn)題。

下面列出了關(guān)鍵代碼片段示例。

  1. # 測(cè)試分類數(shù)據(jù)集


  2. from skar.dtasts imprt me_clssificaton



  3. # 對(duì)數(shù)據(jù)集進(jìn)行總結(jié)


  4. pin(X.shp y.hae)

運(yùn)行示例創(chuàng)建數(shù)據(jù)集并總結(jié)輸入和輸出的維度。

接下來(lái),我們可以在這個(gè)數(shù)據(jù)集上評(píng)估 AdaBoost 算法。

我們將使用重復(fù)的分層k-折交叉驗(yàn)證來(lái)評(píng)估該模型,有三個(gè)重復(fù)和10個(gè)折。我們將報(bào)告該模型在所有重復(fù)和折中的準(zhǔn)確性的平均值和標(biāo)準(zhǔn)偏差。

  1. # 評(píng)估adaboost算法的分類


  2. from numpy import mean



  3. # 定義模型


  4. mdl = ABster()


  5. # 評(píng)估該模型


  6. cv = Reeio(n_is=10, n_pe=3, rn_tt=1)

  7. s=-1, rr_se='raise')


  8. # 報(bào)告性能


  9. prt('ccrac %.3f (%.f)' % (ean(scoes),std(n_ces)))

運(yùn)行示例報(bào)告模型的均值和標(biāo)準(zhǔn)偏差準(zhǔn)確度。

注意:您的結(jié)果考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異??紤]多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到具有默認(rèn)超參數(shù)的 AdaBoost 集成在此測(cè)試數(shù)據(jù)集上實(shí)現(xiàn)了約 80% 的分類準(zhǔn)確率。

我們也可以使用AdaBoost模型作為最終模型,并進(jìn)行預(yù)測(cè)分類。

首先,AdaBoost集合在所有可用的數(shù)據(jù)上進(jìn)行擬合,然后可以調(diào)用predict()函數(shù)對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。

下面的例子在我們的二元分類數(shù)據(jù)集上演示了這一點(diǎn)。
?

  1. # 使用adaboost進(jìn)行分類預(yù)測(cè)


  2. from sldat ?s imprt mke_lassicain


  3. #定義模型


  4. moel = AdBoser()


  5. # 在整個(gè)數(shù)據(jù)集上擬合模型


  6. mdl.t(X, y)


  7. # 進(jìn)行一次預(yù)測(cè)




  8. yhat = mdepreict(ow)


  9. prnt('Preicte Clas: %d' ?yht[0])

運(yùn)行示例在整個(gè)數(shù)據(jù)集上擬合 AdaBoost 集成模型,然后用于對(duì)新數(shù)據(jù)行進(jìn)行預(yù)測(cè),就像我們?cè)趹?yīng)用程序中使用模型時(shí)一樣。

現(xiàn)在我們熟悉了使用 AdaBoost 進(jìn)行分類,讓我們看一下用于回歸的 API。

用于回歸的 AdaBoost

在本節(jié)中,我們將研究使用 AdaBoost 解決回歸問(wèn)題。

首先,我們可以創(chuàng)建一個(gè)具有 1,000 個(gè)示例和 20 個(gè)輸入特征的綜合回歸問(wèn)題。

下面列出了完整的示例。

  1. # 測(cè)試回歸數(shù)據(jù)集

  2. fromrn.se impr mkergrsion


  3. # 定義數(shù)據(jù)集

  4. X, y = mkresion(naps=1000,n_eaes=20, nom=15, nse=0.1,ramtae=6)


  5. # 對(duì)數(shù)據(jù)集進(jìn)行總結(jié)


  6. prntX.she, y.hae)

運(yùn)行示例創(chuàng)建數(shù)據(jù)集并總結(jié)輸入和輸出的維度。

接下來(lái),我們可以在這個(gè)數(shù)據(jù)集上評(píng)估 AdaBoost 算法。

正如我們?cè)谏弦还?jié)所做的那樣,我們將使用重復(fù)的 k 折交叉驗(yàn)證來(lái)評(píng)估模型,重復(fù) 3 次和 10 次。我們將報(bào)告模型在所有重復(fù)和折中的平均絕對(duì)誤差 (MAE)。使 MAE 為負(fù)值,使其最大化而不是最小化。這意味著負(fù) MAE 越大越好,完美模型的 MAE 為 0。

下面列出了完整的示例。

  1. # 評(píng)估adaboost集合的回歸效果


  2. from numpy import mean





  3. # 定義模型


  4. mel = Aar()


  5. # 評(píng)估該模型


  6. KFld(n_lit=10, n_pes=3, rndstt=1)


  7. crss(mde, X, y, sorng='n_mea_aoluteeror', cv=cv, nobs=-1, ercr='raise')


  8. # 報(bào)告性能


  9. rit('MAE: %.3f (%.3f)' % (mean(sc), std(_cres)))

運(yùn)行示例報(bào)告模型的均值和標(biāo)準(zhǔn)偏差準(zhǔn)確度。

注意:您考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異。考慮多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到具有默認(rèn)超參數(shù)的 AdaBoost 集成實(shí)現(xiàn)了大約 100 的 MAE。

我們還可以使用 AdaBoost 模型作為最終模型并對(duì)回歸進(jìn)行預(yù)測(cè)。

首先,AdaBoost 集成擬合所有可用數(shù)據(jù),然后??可以調(diào)用predict()函數(shù)對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。

下面的示例在我們的回歸數(shù)據(jù)集上演示了這一點(diǎn)。

  1. # 用于預(yù)測(cè)回歸的adaboost集成


  2. import maeon






  3. # 定義模型


  4. moel = Botsor()


  5. # 在整個(gè)數(shù)據(jù)集上擬合該模型


  6. fit(X, y)


  7. # 做一個(gè)單一的預(yù)測(cè)



  8. peict(row)


  9. pit('Peon: %d' % ht[0])

運(yùn)行示例在整個(gè)數(shù)據(jù)集上擬合 AdaBoost 集成模型,然后用于對(duì)新數(shù)據(jù)行進(jìn)行預(yù)測(cè),就像我們?cè)趹?yīng)用程序中使用模型時(shí)一樣。

現(xiàn)在我們已經(jīng)熟悉了使用 scikit-learn API 來(lái)評(píng)估和使用 AdaBoost 集成,讓我們看一下配置模型。

AdaBoost 超參數(shù)

在本節(jié)中,我們將仔細(xì)研究一些您應(yīng)該考慮調(diào)整 AdaBoost 集成的超參數(shù)及其對(duì)模型性能的影響。

探索樹(shù)的數(shù)量

AdaBoost 算法的一個(gè)重要超參數(shù)是集成中使用的決策樹(shù)的數(shù)量。

回想一下,集成中使用的每個(gè)決策樹(shù)都被設(shè)計(jì)為弱學(xué)習(xí)器。也就是說(shuō),它比隨機(jī)預(yù)測(cè)有技巧,但技巧不高。因此,使用一級(jí)決策樹(shù),稱為決策樹(shù)樁。

添加到模型中的樹(shù)的數(shù)量必須很高,模型才能正常工作,通常是數(shù)百甚至數(shù)千。

樹(shù)的數(shù)量可以通過(guò)“?n?”參數(shù)設(shè)置,默認(rèn)為 50。

下面的示例探討了值在 10 到 5,000 之間的樹(shù)數(shù)量的影響。

  1. # 探索adaboost集成的樹(shù)數(shù)對(duì)性能的影響


  2. from numpy import mean





  3. # 獲取數(shù)據(jù)集


  4. def gdet():


  5. X, y = ae_scon(n_spes=1000, nftus=20, inve=15, n_rant=5, ram_ae=6)


  6. retrn X, y




  7. # 獲得要評(píng)估的模型列表


  8. def gemls():


  9. mels = dct()


  10. # 定義要考慮的樹(shù)的數(shù)量



  11. for n in n_res:

  12. mols[str(n)] = AaBstsfern_titos=n)


  13. etrn moel




  14. # 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型


  15. def evat_oe(odl, X, y):


  16. # 定義評(píng)估程序


  17. cv = RpdStfKFol(n_pis=10, nrpt=3, andoste=1)


  18. # 評(píng)估模型并收集結(jié)果

  19. scs = cs_vore(moel, X, y, scng='ccrcy', cv=cv, n_jobs=-1)

  20. return sces



  21. # 定義數(shù)據(jù)集


  22. X, y = gedast()


  23. # 獲得要評(píng)估的模型


  24. odls = emols()


  25. # 評(píng)估模型并存儲(chǔ)結(jié)果


  26. rslt, nmes = lst(), lst()


  27. for nae, moel in odels.ims():


  28. # 評(píng)估模型


  29. scor = eateel(mdel, X, y)


  30. # 存儲(chǔ)結(jié)果


  31. ruls.aped(scrs)


  32. na ? e.aped(nae)


  33. # 總結(jié)表現(xiàn)


  34. prnt('>%s %.3f (%3f)' % (nme, man(scrs), std(soes)))


  35. # 繪制模型的性能,進(jìn)行比較



  36. p.shw()


運(yùn)行示例首先報(bào)告每個(gè)數(shù)量的決策樹(shù)的平均準(zhǔn)確度。

注意:考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異。考慮多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到該數(shù)據(jù)集的性能在大約 50 棵樹(shù)之前有所提高,然后下降。這可能是在添加額外的樹(shù)后集成過(guò)度擬合訓(xùn)練數(shù)據(jù)集的問(wèn)題。

為每個(gè)配置數(shù)量的樹(shù)的準(zhǔn)確度分?jǐn)?shù)分布創(chuàng)建了一個(gè)箱線圖。

我們可以看到模型性能和集成大小的總體趨勢(shì)。

AdaBoost 集成大小與分類精度的箱線圖

探索弱學(xué)習(xí)者

默認(rèn)情況下,只有一個(gè)層次的決策樹(shù)被用作弱學(xué)習(xí)器。

我們可以通過(guò)增加決策樹(shù)的深度,使合集中使用的模型不那么弱(更有技巧)。

下面的例子探討了增加DecisionTreeClassifier弱學(xué)習(xí)器的深度對(duì)AdBoost組合的影響。

  1. # 探索adaboost集成樹(shù)深度對(duì)性能的影響


  2. from numpy import mean






  3. # 獲得數(shù)據(jù)集


  4. def ettst():



  5. rtrn X, y




  6. # 獲得一個(gè)要評(píng)估的模型列表


  7. def gtodes():

  8. modls = di()


  9. # 探索從1到10的深度


  10. for i in rane(1,11):


  11. # 定義基本模型


  12. bae = DisioTer(mxdph=i)

  13. # 定義集合模型


  14. modls[tr(i)] = Bost(bseimaor=bse)


  15. rtun moes




  16. # 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型


  17. def elaeel(moel, X, y):


  18. # 定義評(píng)估程序


  19. cv = RpaedSifdKod(n_pis=10, nepts=3, rndoste=1)

  20. # 評(píng)估模型并收集結(jié)果


  21. soes = cro_acoe(moel, X, y,scorng='ccray', cv=cv, _obs=-1)


  22. return scos




  23. # 定義數(shù)據(jù)集


  24. X, y = edatet()


  25. # 獲得要評(píng)估的模型


  26. mols = etels()


  27. # 評(píng)估模型并存儲(chǔ)結(jié)果


  28. rsults, nes = lst(), lst()


  29. for ame, odel in mdelsts():


  30. # 評(píng)估模型


  31. scrs = evlel(moel, X, y)


  32. # 存儲(chǔ)結(jié)果


  33. rsls.aped(scos)


  34. naes.apend(nme)


  35. # 總結(jié)表現(xiàn)


  36. pit('>%s %.3f (%.3f)' % (nae, man(scors), std(scres)))


  37. # 繪制模型的性能,以便進(jìn)行比較



  38. p.hw()


運(yùn)行示例首先報(bào)告每個(gè)配置的弱學(xué)習(xí)器樹(shù)深度的平均準(zhǔn)確度。

注意:考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異。考慮多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到隨著決策樹(shù)深度的增加,集成在該數(shù)據(jù)集上的性能也有所提高。

為每個(gè)配置的弱學(xué)習(xí)器深度的準(zhǔn)確度分?jǐn)?shù)分布創(chuàng)建了一個(gè)盒須圖。

我們可以看到模型性能和弱學(xué)習(xí)器深度的總體趨勢(shì)。

AdaBoost Ensemble 弱學(xué)習(xí)器深度與分類精度的箱線圖

探索學(xué)習(xí)率

AdaBoost 還支持控制每個(gè)模型對(duì)集成預(yù)測(cè)的貢獻(xiàn)的學(xué)習(xí)率。

這由“?learning_rate?”參數(shù)控制,默認(rèn)情況下設(shè)置為 1.0 或全部貢獻(xiàn)。根據(jù)集成中使用的模型數(shù)量,更小或更大的值可能是合適的。模型的貢獻(xiàn)與集成中的樹(shù)數(shù)量之間存在平衡。

更多的樹(shù)可能需要更小的學(xué)習(xí)率;更少的樹(shù)可能需要更大的學(xué)習(xí)率。通常使用 0 到 1 之間的值,有時(shí)使用非常小的值以避免過(guò)度擬合,例如 0.1、0.01 或 0.001。

下面的示例以 0.1 的增量探索了 0.1 和 2.0 之間的學(xué)習(xí)率值。


  1. # 探索adaboost集合學(xué)習(xí)率對(duì)性能的影響


  2. from numpy import mean


  3. from numpy import std






  4. # 獲取數(shù)據(jù)集


  5. def ge_taet()




  6. # 獲得要評(píng)估的模型列表


  7. def e_moels():


  8. mods = dct()


  9. # 探索從0.1到2的學(xué)習(xí)率,增量為0.1


  10. for i in ane(0.1, 2.1, 0.1):


  11. key = '%.3f' % i


  12. mdls[key] = AdaBoo(leag_te=i)






  13. # 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型


  14. def vaatodl(moel, X, y):


  15. # 定義評(píng)估程序


  16. cv = RepeSatiKFld(n_slts=10, n_epts=3, ado_tae=1)


  17. # 評(píng)估模型并收集結(jié)果


  18. sces = csslsre(mel, X, y, soing='cacy', cv=cv, njs=-)





  19. # 定義數(shù)據(jù)集


  20. X, y = ge_dtet()


  21. # 獲得要評(píng)估的模型


  22. model= et_oels()


  23. # 評(píng)估模型并存儲(chǔ)結(jié)果



  24. for ne, moel in mode.itms():


  25. # 評(píng)估模型


  26. scos =valueoel(, X, y)


  27. # 存儲(chǔ)結(jié)果


  28. reslt.pped(scors)


  29. naeppend(ame)


  30. # 總結(jié)表現(xiàn)



  31. # 繪制模型的性能,以便進(jìn)行比較




  32. ot.ow()


運(yùn)行示例首先報(bào)告每個(gè)配置的學(xué)習(xí)率的平均準(zhǔn)確度。

注意:考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異??紤]多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到 0.5 到 1.0 之間的相似值,之后模型性能下降。

?

為每個(gè)配置的學(xué)習(xí)率的準(zhǔn)確度分?jǐn)?shù)分布創(chuàng)建了一個(gè)箱線圖。

我們可以看到在這個(gè)數(shù)據(jù)集上學(xué)習(xí)率大于 1.0 時(shí)模型性能下降的總體趨勢(shì)。

AdaBoost 集成學(xué)習(xí)率與分類精度的箱線圖

探索替代算法

集成中使用的默認(rèn)算法是決策樹(shù),但也可以使用其他算法。

目的是使用非常簡(jiǎn)單的模型,稱為弱學(xué)習(xí)器。此外,scikit-learn 實(shí)現(xiàn)要求使用的任何模型還必須支持加權(quán)樣本,因?yàn)樗鼈兪峭ㄟ^(guò)基于訓(xùn)練數(shù)據(jù)集的加權(quán)版本擬合模型來(lái)創(chuàng)建集成的方式。

可以通過(guò)“?base_estimator?”參數(shù)指定基本模型。在分類的情況下,基礎(chǔ)模型還必須支持預(yù)測(cè)概率或類概率分?jǐn)?shù)。如果指定的模型不支持加權(quán)訓(xùn)練數(shù)據(jù)集,您將看到如下錯(cuò)誤信息:

ValueError: KNeighborsClassifier doesn't support sample_weight.

支持加權(quán)訓(xùn)練的模型的一個(gè)示例是邏輯回歸算法。

下面的例子演示了一個(gè) AdaBoost 算法邏輯回歸算法弱學(xué)習(xí)者。


  1. # 評(píng)估 adaboost 算法與邏輯回歸弱學(xué)習(xí)者的分類方法


  2. from numpy import mean






  3. # 定義模型


  4. modl = AdaClass(est=Logi())


  5. # 評(píng)估該模型


  6. cv = ReaeSrfiedKd(nspis=10, neas=3, andm_=1)


  7. sce =crsvlre(del, X, y, scrg='acacy', cv=cv, nos=-1, r_soe='ase')


  8. # 報(bào)告性能



運(yùn)行示例報(bào)告模型的均值和標(biāo)準(zhǔn)偏差準(zhǔn)確度。

注意:考慮到算法或評(píng)估程序的隨機(jī)性,或數(shù)值精度的差異??紤]多次運(yùn)行該示例并比較平均結(jié)果。

在這種情況下,我們可以看到帶有邏輯回歸弱模型的 AdaBoost 集成在這個(gè)測(cè)試數(shù)據(jù)集上實(shí)現(xiàn)了大約 79% 的分類準(zhǔn)確率。

網(wǎng)格搜索 AdaBoost 超參數(shù)

將 AdaBoost 配置為算法可能具有挑戰(zhàn)性,因?yàn)橛绊懩P驮谟?xùn)練數(shù)據(jù)上的行為的許多關(guān)鍵超參數(shù)和超參數(shù)相互交互。

因此,使用搜索過(guò)程來(lái)發(fā)現(xiàn)對(duì)給定的預(yù)測(cè)建模問(wèn)題運(yùn)行良好或最佳的模型超參數(shù)配置是一種很好的做法。流行的搜索過(guò)程包括隨機(jī)搜索和網(wǎng)格搜索。

在本節(jié)中,我們將研究 AdaBoost 算法的關(guān)鍵超參數(shù)的網(wǎng)格搜索通用范圍,您可以將其用作您自己項(xiàng)目的起點(diǎn)。這可以通過(guò)使用GridSearchCV?類并指定一個(gè)字典來(lái)實(shí)現(xiàn)?,該字典將模型超參數(shù)名稱映射到要搜索的值。

在這種情況下,我們將對(duì) AdaBoost 的兩個(gè)關(guān)鍵超參數(shù)進(jìn)行網(wǎng)格搜索:集成中使用的樹(shù)的數(shù)量和學(xué)習(xí)率。我們將為每個(gè)超參數(shù)使用一系列流行的表現(xiàn)良好的值。

將使用重復(fù)的 k 折交叉驗(yàn)證評(píng)估每個(gè)配置組合,并使用平均分?jǐn)?shù)(在本例中為分類精度)比較配置。

下面列出了在我們的合成分類數(shù)據(jù)集上對(duì) AdaBoost 算法的關(guān)鍵超參數(shù)進(jìn)行網(wǎng)格搜索的完整示例。


  1. # 在分類數(shù)據(jù)集上用網(wǎng)格搜索adaboost的關(guān)鍵超參數(shù)的例子


  2. from sklearn.datasets import make_classification




  3. # 定義數(shù)據(jù)集


  4. X, y = mke( neares=0, nnrte=15, nednt=5, rd_sae=6)


  5. # 用默認(rèn)的超參數(shù)定義模型


  6. mdl = AdaosCr()


  7. # 定義要搜索的數(shù)值的網(wǎng)格

  8. rid =ict()


  9. gid['n_estrs'] = [10, 50, 100, 500]


  10. grd['lri_at'] = [0.0001, 0.001, 0.01, 0.1, 1.0]


  11. # 定義評(píng)估程序


  12. cv = RaSteKld(n_lts=10, n_eet=3, rn_te=1)


  13. # 定義網(wǎng)格搜索程序

  14. gri_arh = GiarcCV(ipostor=oel, pram_ri=gid, n_os=-1, cv=cv, srg='auacy')


  15. # 執(zhí)行網(wǎng)格搜索


  16. gr_ru = gr.fit(X, y)


  17. # 總結(jié)最佳得分和配置



  18. # 總結(jié)所有被評(píng)估過(guò)的分?jǐn)?shù)




  19. for man, sev,prm in zip(ansstds, pams):

  20. ????print(")wt:" mantdv, paam))

運(yùn)行該示例可能需要一段時(shí)間。在運(yùn)行結(jié)束時(shí),首先報(bào)告獲得最佳分?jǐn)?shù)的配置,然后是考慮的所有其他配置的分?jǐn)?shù)。

在這種情況下,我們可以看到具有 500 棵樹(shù)和 0.1 學(xué)習(xí)率的配置表現(xiàn)最好,分類準(zhǔn)確率約為 81.3%。

盡管在這種情況下沒(méi)有測(cè)試這些配置以確保網(wǎng)格搜索在合理的時(shí)間內(nèi)完成,但模型可能會(huì)在更多樹(shù)(例如 1,000 或 5,000)下表現(xiàn)得更好。

進(jìn)一步閱讀

如果您想深入了解,可以查看原文或閱讀有關(guān)該話題的更多資源。

最受歡迎的見(jiàn)解

1.從決策樹(shù)模型看員工為什么離職

2.R語(yǔ)言基于樹(shù)的方法:決策樹(shù),隨機(jī)森林

3.python中使用scikit-learn和pandas決策樹(shù)

4.機(jī)器學(xué)習(xí):在SAS中運(yùn)行隨機(jī)森林?jǐn)?shù)據(jù)分析報(bào)告

5.R語(yǔ)言用隨機(jī)森林和文本挖掘提高航空公司客戶滿意度

6.機(jī)器學(xué)習(xí)助推快時(shí)尚精準(zhǔn)銷售時(shí)間序列

7.用機(jī)器學(xué)習(xí)識(shí)別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用

8.python機(jī)器學(xué)習(xí):推薦系統(tǒng)實(shí)現(xiàn)(以矩陣分解來(lái)協(xié)同過(guò)濾)

9.python中用pytorch機(jī)器學(xué)習(xí)分類預(yù)測(cè)銀行客戶流失


拓端tecdat:Python集成機(jī)器學(xué)習(xí):用AdaBoost、決策樹(shù)、邏輯回歸集成模型分類和回歸和的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
峨山| 蒙自县| 买车| 澳门| 三明市| 靖西县| 洛阳市| 天长市| 丘北县| 武穴市| 临泽县| 农安县| 巩留县| 湘阴县| 三亚市| 久治县| 体育| 八宿县| 菏泽市| 德惠市| 徐州市| 阳原县| 宁城县| 京山县| 贡嘎县| 平罗县| 丹寨县| 新民市| 临武县| 辽宁省| 泰宁县| 于都县| 阿坝| 宁陵县| 滦平县| 犍为县| 峨山| 梁平县| 清河县| 乌鲁木齐市| 新邵县|