拓端tecdat:Python集成機(jī)器學(xué)習(xí):用AdaBoost、決策樹(shù)、邏輯回歸集成模型分類和回歸和
原文鏈接: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è)部分;他們是:
AdaBoost 集成算法
AdaBoost? API
用于分類的 AdaBoost
用于回歸的 AdaBoost
AdaBoost 超參數(shù)
探索樹(shù)的數(shù)量
探索弱學(xué)習(xí)
探索學(xué)習(xí)率
探索替代算法
網(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)您使用的版本:
# 檢查scikit-learn版本
import sklearn
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)鍵代碼片段示例。
# 測(cè)試分類數(shù)據(jù)集
from skar.dtasts imprt me_clssificaton
# 對(duì)數(shù)據(jù)集進(jìn)行總結(jié)
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)偏差。
# 評(píng)估adaboost算法的分類
from numpy import mean
# 定義模型
mdl = ABster()
# 評(píng)估該模型
cv = Reeio(n_is=10, n_pe=3, rn_tt=1)
s=-1, rr_se='raise')
# 報(bào)告性能
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)。
?
# 使用adaboost進(jìn)行分類預(yù)測(cè)
from sldat ?s imprt mke_lassicain
#定義模型
moel = AdBoser()
# 在整個(gè)數(shù)據(jù)集上擬合模型
mdl.t(X, y)
# 進(jìn)行一次預(yù)測(cè)
yhat = mdepreict(ow)
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)題。
下面列出了完整的示例。
# 測(cè)試回歸數(shù)據(jù)集
fromrn.se impr mkergrsion
# 定義數(shù)據(jù)集
X, y = mkresion(naps=1000,n_eaes=20, nom=15, nse=0.1,ramtae=6)
# 對(duì)數(shù)據(jù)集進(jìn)行總結(jié)
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。
下面列出了完整的示例。
# 評(píng)估adaboost集合的回歸效果
from numpy import mean
# 定義模型
mel = Aar()
# 評(píng)估該模型
KFld(n_lit=10, n_pes=3, rndstt=1)
crss(mde, X, y, sorng='n_mea_aoluteeror', cv=cv, nobs=-1, ercr='raise')
# 報(bào)告性能
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)。
# 用于預(yù)測(cè)回歸的adaboost集成
import maeon
# 定義模型
moel = Botsor()
# 在整個(gè)數(shù)據(jù)集上擬合該模型
fit(X, y)
# 做一個(gè)單一的預(yù)測(cè)
peict(row)
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ù)量的影響。
# 探索adaboost集成的樹(shù)數(shù)對(duì)性能的影響
from numpy import mean
# 獲取數(shù)據(jù)集
def gdet():
X, y = ae_scon(n_spes=1000, nftus=20, inve=15, n_rant=5, ram_ae=6)
retrn X, y
# 獲得要評(píng)估的模型列表
def gemls():
mels = dct()
# 定義要考慮的樹(shù)的數(shù)量
for n in n_res:
mols[str(n)] = AaBstsfern_titos=n)
etrn moel
# 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型
def evat_oe(odl, X, y):
# 定義評(píng)估程序
cv = RpdStfKFol(n_pis=10, nrpt=3, andoste=1)
# 評(píng)估模型并收集結(jié)果
scs = cs_vore(moel, X, y, scng='ccrcy', cv=cv, n_jobs=-1)
return sces
# 定義數(shù)據(jù)集
X, y = gedast()
# 獲得要評(píng)估的模型
odls = emols()
# 評(píng)估模型并存儲(chǔ)結(jié)果
rslt, nmes = lst(), lst()
for nae, moel in odels.ims():
# 評(píng)估模型
scor = eateel(mdel, X, y)
# 存儲(chǔ)結(jié)果
ruls.aped(scrs)
na ? e.aped(nae)
# 總結(jié)表現(xiàn)
prnt('>%s %.3f (%3f)' % (nme, man(scrs), std(soes)))
# 繪制模型的性能,進(jìn)行比較
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組合的影響。
# 探索adaboost集成樹(shù)深度對(duì)性能的影響
from numpy import mean
# 獲得數(shù)據(jù)集
def ettst():
rtrn X, y
# 獲得一個(gè)要評(píng)估的模型列表
def gtodes():
modls = di()
# 探索從1到10的深度
for i in rane(1,11):
# 定義基本模型
bae = DisioTer(mxdph=i)
# 定義集合模型
modls[tr(i)] = Bost(bseimaor=bse)
rtun moes
# 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型
def elaeel(moel, X, y):
# 定義評(píng)估程序
cv = RpaedSifdKod(n_pis=10, nepts=3, rndoste=1)
# 評(píng)估模型并收集結(jié)果
soes = cro_acoe(moel, X, y,scorng='ccray', cv=cv, _obs=-1)
return scos
# 定義數(shù)據(jù)集
X, y = edatet()
# 獲得要評(píng)估的模型
mols = etels()
# 評(píng)估模型并存儲(chǔ)結(jié)果
rsults, nes = lst(), lst()
for ame, odel in mdelsts():
# 評(píng)估模型
scrs = evlel(moel, X, y)
# 存儲(chǔ)結(jié)果
rsls.aped(scos)
naes.apend(nme)
# 總結(jié)表現(xiàn)
pit('>%s %.3f (%.3f)' % (nae, man(scors), std(scres)))
# 繪制模型的性能,以便進(jìn)行比較
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í)率值。
# 探索adaboost集合學(xué)習(xí)率對(duì)性能的影響
from numpy import mean
from numpy import std
# 獲取數(shù)據(jù)集
def ge_taet()
# 獲得要評(píng)估的模型列表
def e_moels():
mods = dct()
# 探索從0.1到2的學(xué)習(xí)率,增量為0.1
for i in ane(0.1, 2.1, 0.1):
key = '%.3f' % i
mdls[key] = AdaBoo(leag_te=i)
# 用交叉驗(yàn)證法評(píng)估一個(gè)給定的模型
def vaatodl(moel, X, y):
# 定義評(píng)估程序
cv = RepeSatiKFld(n_slts=10, n_epts=3, ado_tae=1)
# 評(píng)估模型并收集結(jié)果
sces = csslsre(mel, X, y, soing='cacy', cv=cv, njs=-)
# 定義數(shù)據(jù)集
X, y = ge_dtet()
# 獲得要評(píng)估的模型
model= et_oels()
# 評(píng)估模型并存儲(chǔ)結(jié)果
for ne, moel in mode.itms():
# 評(píng)估模型
scos =valueoel(, X, y)
# 存儲(chǔ)結(jié)果
reslt.pped(scors)
naeppend(ame)
# 總結(jié)表現(xiàn)
# 繪制模型的性能,以便進(jìn)行比較
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í)者。
# 評(píng)估 adaboost 算法與邏輯回歸弱學(xué)習(xí)者的分類方法
from numpy import mean
# 定義模型
modl = AdaClass(est=Logi())
# 評(píng)估該模型
cv = ReaeSrfiedKd(nspis=10, neas=3, andm_=1)
sce =crsvlre(del, X, y, scrg='acacy', cv=cv, nos=-1, r_soe='ase')
# 報(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)格搜索的完整示例。
# 在分類數(shù)據(jù)集上用網(wǎng)格搜索adaboost的關(guān)鍵超參數(shù)的例子
from sklearn.datasets import make_classification
# 定義數(shù)據(jù)集
X, y = mke( neares=0, nnrte=15, nednt=5, rd_sae=6)
# 用默認(rèn)的超參數(shù)定義模型
mdl = AdaosCr()
# 定義要搜索的數(shù)值的網(wǎng)格
rid =ict()
gid['n_estrs'] = [10, 50, 100, 500]
grd['lri_at'] = [0.0001, 0.001, 0.01, 0.1, 1.0]
# 定義評(píng)估程序
cv = RaSteKld(n_lts=10, n_eet=3, rn_te=1)
# 定義網(wǎng)格搜索程序
gri_arh = GiarcCV(ipostor=oel, pram_ri=gid, n_os=-1, cv=cv, srg='auacy')
# 執(zhí)行網(wǎng)格搜索
gr_ru = gr.fit(X, y)
# 總結(jié)最佳得分和配置
# 總結(jié)所有被評(píng)估過(guò)的分?jǐn)?shù)
for man, sev,prm in zip(ansstds, pams):
????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è)銀行客戶流失