Andmeteaduses on tänapäeval kasutamiseks saadaval palju algoritme. Seetõttu on üheks kasulikuks meetodiks nende kombineerimine üheks mudeliks, et saada igaühest parim, mille tulemuseks on täpsem mudel.
Scikit-Learni abil leiate Random Foresti algoritmi, mis on komplekti tüüpi ansamblimudel. Teisest küljest leiate ka Boosting-mudeleid, mis treenivad hindajaid järjestikku, kus ühe mudeli tulemus edastatakse järgmisele, mis proovivad ennustusi parandada, kuni jõuavad optimaalse tulemuseni.
Gradiendi võimendamise hinnangut luues leiate selle hüperparameetri n_estimator=100
vaikeväärtusega 100 puud, mis luuakse tulemuseni jõudmiseks. Mitu korda määrame selle lihtsalt vaikeseadeks või suurendame vastavalt vajadusele, isegi kasutades ruudustikuotsingu tehnikaid.
Sellest postitusest leiame lihtsa viisi, kuidas jõuda ühe numbrini, mida kasutada oma modelli koolitamiseks.
Gradient Boostingi saab laadida Scikit-Learnist selle klassi abil from sklearn.ensemble import GradientBoostingRegressor
. Gradient Boosting algoritmi saab kasutada kas klassifitseerimiseks või regressioonimudelite jaoks. See on puupõhine hindaja – see tähendab, et see koosneb paljudest otsustuspuudest.
Tulemused Puu 1 tekitab vigu. Neid vigu kasutatakse ja sisendit Puu 2. Taas kasutatakse viimase mudeli vigu ja järgmise sisendit, kuni see jõuab n_estimators
väärtus.
Kuna iga hindaja sobib eelmise veaga, siis eeldatakse, et ennustuste kombinatsioon on parem kui ükski hindaja üksi. Pärast iga iteratsiooni muudame mudeli keerukamaks, vähendades kõrvalekaldeid, kuid suurendades kõrvalekaldeid. Seega peame teadma, millal peatuda.
Vaatame nüüd, kuidas seda teha.
Selle harjutuse kood on lihtne. Peame tegema ainult tsükli pärast iga iteratsiooni ja kontrollima, millisel viga oli kõige väiksem.
Alustame andmekogumi valimisega. Me kasutame auto_avariid andmestik, pärit merel sündinud raamatukogust (seega BDS-litsentsi alusel avatud andmed).
# Andmekogum
df = sns.load_dataset('car_crashes')
Siin on andmete kiire ülevaade. Püüame hinnata total
kasutades teisi funktsioone ennustajatena. Kuna see on reaalarvu väljund, räägime regressioonimudelist.
Kiirelt korrelatsioone vaadates.
# Korrelatsioonid
df.corr().style.background_gradient(cmap='coolwarm')
Ok, suurt multikollineaarsust pole. Me näeme seda ins_premium
ja ins_losses
ei korreleeru väga hästi total
, seega me neid mudelis ei arvesta.
Kui kontrollime puuduvaid andmeid, siis neid pole
# Puudub
df.isnull().sum()
0
Tore, nii et jagame andmed nüüd pooleks.
# X ja y
X = df.drop(['ins_premium', 'ins_losses', 'lühend', "kokku"], axis=1)
y = df['kokku']# Rongikatse
X_train, X_test, y_train, y_test = rongi_testi_jaotus(X, y, testi_suurus=0.3, juhuslik_olek=22)
Saame luua konveieri andmete skaleerimiseks ja modelleerimiseks (neid andmeid pole tõesti vaja skaleerida, kuna need on juba samas skaalas, kümnete baasil). Järgmiseks sobitame andmed mudeliga ja ennustame tulemusi.
Ma kasutan 500 hindajat koos a learning_rate
kohta 0.3.
Õppimismäär on selle sammu suurus, mille me teeme minimaalse veani jõudmiseks. Kui kasutame liiga kõrget väärtust, võime ületada miinimumi. Kui kasutame liiga väikest numbrit, ei pruugi me sellele ligilähedalegi jõuda. Niisiis, rusikareegel, mida võite kaaluda, on järgmine: kui teil on palju hinnanguid, võite kasutada õppimiskiiruse madalamaid väärtusi. Kui teil on vaid paar hindajat, eelistage kasutada õppimiskiiruse kõrgemaid väärtusi.
sammud = [('skaala', StandardScaler()),
('GBR', GradientBoostingRegressor(n_estimators=500, learning_rate=0.03)) ]# Instance Pipeline and fit
toru = torujuhe(sammud).sobib(X_rong, y_rong)# Ennusta
preds = pipe.predict(X_test)
Nüüd hindab.
# RMSE ennustustest
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds)),1 )}')[VÄLJAS]: RMSE: 1.1# Tegelike Y väärtuste keskmine
print(f'Andmed y mean: {round( y.mean(),1 )}')[OUT]: andmed y keskmised: 15.8
Hea. Meie RMSE on umbes 6.9% keskmisest. Nii et me oleme keskmiselt nii palju maha jäänud.
Nüüd kontrollime viisi, kuidas oma mudelit häälestada, valides treenitavate hinnangute optimaalse arvu, mis annab meile madalaima veamäära.
Nagu ma ütlesin, ei pea me tegelikult neid andmeid skaleerima, sest need on juba samas proportsioonis. Nii et sobitame mudelit.
#Mudel
gbr = GradientBoostingRegressor(n_estimators=500, learning_rate=0.3).fit(X_train, y_train)
Nüüd on see hea kraam. Gradient Boostingis on meetod, mis võimaldab meil korrata iga koolitatud hindaja ennustusi vahemikus 1 kuni 500. Seega loome tsükli, mis läbib 500 hindajat. gbr
mudel, ennustab meetodi abil tulemusi staged_predict()
, arvutab keskmise ruudu vea ja salvestab tulemuse loendisse errors
.
# Looge parim number
errors = [ mean_squared_error(y_test, preds) preds jaoks gbr.staged_predict(X_test)]# Optimaalne hinnangute arv
optimaalne_hinnangute_arv = np.argmin(errors) + 1
Järgmisena saame tulemuse joonistada.
#Süžee
g=sns.lineplot(x=vahemik(500), y=vead)
g.set_title(f'Parim hinnangute arv juures {parim_n_estimators}', size=15);
Näeme, et madalaim veamäär on 34 hinnanguga. Niisiis, õpetame oma mudelit ümber 34 hinnanguga ja võrdleme torujuhtmega treenitud mudeli tulemusega.
# Õppige ümber
gbr = GradientBoostingRegressor(n_estimators=34, learning_rate=0.3).fit(X_train, y_train)# Ennustused
preds2 = gbr.predict(X_test)
Hinnatakse…
# RMSE ennustustest
print(f'RMSE: { round(np.sqrt(mean_squared_error(y_test, preds2)),1 )}')
[VÄLJAS]: RMSE: 1.0# Andmed Y tähendab
print(f'Andmed y mean: {round( y.mean(),1 )}')[OUT]: andmed y keskmised: 15.8
Nüüd langesime 6.9%-lt 6.3%-le. u. 9% parem. Vaatame mõnda ennustust.
Huvitavad tulemused. Mõned teise mudeli ennustused on paremad kui esimesed.
Õppisime, kuidas määrata a näpistamiseks parimat hinnangute arvu GradientBoostingRegressor
Scikit-Learnist. See on hüperparameeter, mis võib seda tüüpi ansamblimudelis muuta, mis koolitab hinnanguid järjest.
Mõnikord võib mudel pärast paari iteratsiooni hakata üle sobituma, mistõttu hakkab see dispersioon liiga palju suurendama, mõjutades ennustusi.
Nägime, et lihtne silmus aitab meil sel juhul optimaalse lahenduse leida. Kuid kindlasti võib suurte andmekogumite arvutamine olla kulukas, seega oleks mõte proovida madalamat n_estimators
alguses ja vaadake, kas jõuate piisavalt kiiresti minimaalse veani.
Siin on täielik kood GitHubis.
Kui teile see sisu meeldis, jälgige minu blogi.
Leidke mind LinkedIn.
See harjutus põhines viites oleval suurepärasel Aurélien Géroni õpikul.
Allikast https://towardsdatascience.com/how-to-choose-the-number-of-estimators-for-gradient-boosting-8d06920ab891?source=rss—-7f60cf5620c9— uuesti avaldatud gradiendi võimendamise hinnangute arvu valimine. 4 https://towardsdatascience.com/feed kaudu
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- plokiahela vastavus
- blockchain konverents
- Blockchaini konsultandid
- coinbase
- coingenius
- üksmeel
- krüptokonverents
- krüpto mineerimine
- cryptocurrency
- Detsentraliseeritud
- Defi
- Digitaalsed varad
- ethereum
- masinõpe
- mitte vahetatav märk
- Platon
- plato ai
- Platoni andmete intelligentsus
- Platvormplokk
- PlatoData
- platogaming
- hulknurk
- tõend osaluse kohta
- W3
- sephyrnet