Lär Er AI med Python · Lektion

Random Forest och bagging

Ensembleprincipen, RandomForestClassifier, n_estimators, feature-importance och OOB-score.

Lektion 2 av 413 steg

Random Forest och bagging är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.

Problemet med enskilda träd

Ett enskilt beslutsträd har hög varians: om Ni tränar om det på något annorlunda data kan Ni få ett helt annat träd. Ensemblemetoder löser detta genom att kombinera många träd.

Bagging (bootstrap-aggregering)

Bagging tränar många modeller på olika bootstrapurval (slumpmässigt urval med återläggning) från data och beräknar sedan medelvärdet av deras förutsägelser.

Genom att beräkna medelvärdet av många modeller med hög varians minskar den totala variansen utan att bias ökar särskilt mycket.

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

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

Från bagging till random forest-modeller

En random forest kombinerar bagging av träd med ett extra knep: vid varje uppdelning beaktas endast en slumpmässig delmängd av egenskaperna.

Detta gör träden mindre korrelerade, så att deras fel tar ut varandra bättre och ensemblemodellen förbättras.

Grunderna i RandomForestClassifier

Använd RandomForestClassifier. Den viktiga parametern n_estimators anger hur många träd som ska byggas. Fler träd ger en stabilare modell men tar längre tid.

from sklearn.ensemble import RandomForestClassifier

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

Parallell träning med n_jobs

Träden i en forest är oberoende av varandra och kan därför tränas parallellt. Ange n_jobs=-1 för att använda alla processorkärnor och avsevärt snabba upp träningen.

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-poäng (OOB)

Varje träd lämnar ungefär en tredjedel av observationerna utanför eftersom bootstrapurvalet inte valde dem. Dessa out-of-bag-observationer bildar ett inbyggt valideringsset.

Ange oob_score=True för att få en kostnadsfri uppskattning av generaliseringsfelet utan en separat uppdelning.

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_)

Styra trädens djup i skogen

Samma trädparametrar gäller: max_depth, min_samples_leaf och max_features (hur många egenskaper som ska provas per uppdelning).

max_features="sqrt" är det vanliga standardvärdet för klassificering.

from sklearn.ensemble import RandomForestClassifier

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

Inbyggd egenskapsbetydelse

Precis som enskilda träd tillhandahåller forests feature_importances_, beräknad som medelvärdet över alla träd. Den här orenhetsbaserade betydelsen går snabbt att beräkna men kan vara snedvriden till fördel för egenskaper med hög kardinalitet.

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])

Permutationsbaserad egenskapsbetydelse

Permutationsbaserad egenskapsbetydelse är mer tillförlitlig: blanda om en egenskapskolumn och mät hur mycket poängen sjunker. En stor minskning innebär att egenskapen var viktig.

Metoden är modelloberoende och undviker orenhetsbaserad snedvridning.

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)

Tolka permutationsresultat

permutation_importance returnerar importances_mean och importances_std över upprepningarna. Beräkna detta på ett avskilt dataset så att Ni mäter påverkan på generaliseringen, inte hur väl modellen passar träningsdata.

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}")

När ska random forest-modeller användas

Random forest-modeller är ett bra standardval: de är robusta, kräver lite finjustering, hanterar icke-linjäriteter och samspel mellan egenskaper samt står emot överanpassning. Nackdelarna är större minnesåtgång, långsammare förutsägelser än med ett enskilt träd och sämre tolkningsbarhet.

Snabbtest

Kontrollera Er förståelse av bagging och random forest-modeller.

Sammanfattning

Sammanfattning: Bagging tränar modeller på bootstrapurval och beräknar deras medelvärde för att minska variansen. Random forest-modeller lägger till slumpmässiga delmängder av egenskaper vid varje uppdelning. Justera med n_estimators, använd n_jobs=-1 för högre hastighet, få kostnadsfri validering via oob_score och föredra permutation_importance framför orenhetsbaserad betydelse för tillförlitliga rangordningar.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
53
Lektioner
225

Vanliga frågor

Är lektionen ”Random Forest och bagging” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Random Forest och bagging”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.

Vad lär jag mig i ”Random Forest och bagging”?

Ensembleprincipen, RandomForestClassifier, n_estimators, feature-importance och OOB-score. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?

Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Random Forest och bagging”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?

Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Beslutsträd: teori och implementation
  2. Random Forest och bagging
  3. Gradient boosting: GBM och XGBoost
  4. LightGBM och CatBoost
← Tillbaka till Lär Er AI med Python