Oppikaa tekoälyä Pythonilla · Oppitunti

Random Forest -menetelmät ja bagging

Ensemble-menetelmän periaate, RandomForestClassifier, n_estimators, piirteiden tärkeys ja OOB-pistemäärä.

Oppitunti 2/413 vaihetta

Random Forest -menetelmät ja bagging on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Yksittäisten puiden ongelma

Yksittäisellä päätöspuulla on suuri varianssi: hieman erilaisella datalla uudelleen kouluttaminen voi tuottaa hyvin erilaisen puun. Ensemble-menetelmät ratkaisevat tämän yhdistämällä useita puita.

Bagging eli bootstrap-aggregointi

Bagging kouluttaa useita malleja datan erilaisilla bootstrap-otoksilla (palauttaen tehdyillä satunnaisotoksilla) ja laskee sitten niiden ennusteiden keskiarvon.

Useiden suuren varianssin mallien keskiarvo pienentää kokonaisvarianssia kasvattamatta harhaa merkittävästi.

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

bag = BaggingClassifier(
    estimator=DecisionTreeClassifier(),
    n_estimators=100,
    random_state=0,
)
bag.fit(Xtr, ytr)

Baggingista satunnaismetsiin

Satunnaismetsä on puiden bagging-menetelmä, johon liittyy yksi lisätemppu: jokaisessa jaossa tarkastellaan vain piirteiden satunnaista osajoukkoa.

Tämä vähentää puiden välistä korrelaatiota, jolloin niiden virheet kumoavat toisensa paremmin ja ensemble toimii paremmin.

RandomForestClassifierin perusteet

Käyttäkää luokkaa RandomForestClassifier. Keskeinen parametri n_estimators määrittää rakennettavien puiden määrän. Useammat puut tekevät mallista vakaamman mutta hidastavat suoritusta.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=200, random_state=0)
rf.fit(Xtr, ytr)
print("Accuracy:", rf.score(Xte, yte))

Rinnakkainen koulutus n_jobs-parametrilla

Metsän puut ovat toisistaan riippumattomia, joten ne voidaan kouluttaa rinnakkain. Asettakaa n_jobs=-1, jotta kaikki suorittimen ytimet otetaan käyttöön ja sovittaminen nopeutuu huomattavasti.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=500,
    n_jobs=-1,        # use all cores
    random_state=0,
)
rf.fit(Xtr, ytr)

Out-of-Bag (OOB) -tulos

Jokainen puu jättää noin kolmanneksen otoksista käyttämättä, koska bootstrap-otos ei valinnut niitä. Nämä out-of-bag-otokset muodostavat sisäänrakennetun validointijoukon.

Asettakaa oob_score=True, jotta saatte ilmaisen arvion yleistysvirheestä ilman erillistä jakoa.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=300,
    oob_score=True,
    random_state=0,
)
rf.fit(Xtr, ytr)
print("OOB score:", rf.oob_score_)

Puun syvyyden hallinta metsässä

Samat puuparametrit ovat käytettävissä: max_depth, min_samples_leaf ja max_features (kokeiltavien piirteiden määrä kussakin jaossa).

max_features="sqrt" on luokituksessa yleinen oletusarvo.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(
    n_estimators=300,
    max_depth=12,
    max_features="sqrt",
    random_state=0,
)

Sisäänrakennetut piirteiden tärkeydet

Yksittäisten puiden tavoin metsät tarjoavat feature_importances_-attribuutin, joka on laskettu kaikkien puiden keskiarvona. Tämä epäpuhtauteen perustuva tärkeys on nopea laskea, mutta se voi suosia piirteitä, joilla on paljon eri arvoja.

from sklearn.ensemble import RandomForestClassifier
import numpy as np

rf = RandomForestClassifier(n_estimators=200, random_state=0).fit(Xtr, ytr)
order = np.argsort(rf.feature_importances_)[::-1]
for i in order[:5]:
    print(i, rf.feature_importances_[i])

Permutaatioihin perustuva tärkeys

Permutaatioihin perustuva tärkeys on luotettavampi: yksi piirresarake sekoitetaan ja mitataan, kuinka paljon tulos heikkenee. Suuri pudotus tarkoittaa, että piirre oli tärkeä.

Menetelmä ei riipu mallista ja välttää epäpuhtauteen perustuvan harhan.

from sklearn.inspection import permutation_importance

result = permutation_importance(
    rf, Xte, yte, n_repeats=10, random_state=0, n_jobs=-1
)
print(result.importances_mean)

Permutaatiotulosten tulkinta

permutation_importance palauttaa toistojen perusteella arvot importances_mean ja importances_std. Laskekaa se erillään pidetystä joukosta, jotta mittaatte vaikutusta yleistämiseen ettekä koulutusdatan sovitukseen.

import numpy as np

means = result.importances_mean
stds = result.importances_std
for i in np.argsort(means)[::-1]:
    print(f"feature {i}: {means[i]:.3f} +/- {stds[i]:.3f}")

Milloin satunnaismetsiä kannattaa käyttää

Satunnaismetsät ovat hyvä oletusvalinta: ne ovat vankkoja, vaativat vähän säätämistä, käsittelevät epälineaarisuuksia ja vuorovaikutuksia ja vastustavat ylisovittamista. Haittoina ovat yksittäiseen puuhun verrattuna suurempi muistinkulutus ja hitaampi ennustaminen sekä heikompi tulkittavuus.

Pikatarkistus

Testatkaa ymmärrystänne bagging-menetelmästä ja satunnaismetsistä.

Kertaus

Kertaus: Bagging kouluttaa mallit bootstrap-otoksilla ja laskee niiden keskiarvon varianssin pienentämiseksi. Satunnaismetsät lisäävät satunnaiset piirteiden osajoukot jokaiseen jakoon. Säätäkää parametrilla n_estimators, käyttäkää nopeuttamiseen asetusta n_jobs=-1, saakaa sisäänrakennettu validointi parametrilla oob_score ja suosikaa luotettavissa järjestyksissä permutation_importance-funktiota epäpuhtauteen perustuvan tärkeyden sijaan.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Random Forest -menetelmät ja bagging” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Random Forest -menetelmät ja bagging”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Random Forest -menetelmät ja bagging”?

Ensemble-menetelmän periaate, RandomForestClassifier, n_estimators, piirteiden tärkeys ja OOB-pistemäärä. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Random Forest -menetelmät ja bagging”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Päätöspuut: teoria ja toteutus
  2. Random Forest -menetelmät ja bagging
  3. Gradient boosting: GBM ja XGBoost
  4. LightGBM ja CatBoost
← Takaisin: Oppikaa tekoälyä Pythonilla