Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Pridobite pomembnosti funkcij za naključne gozdove s Pythonom in Scikit-Learn

Predstavitev

O Naključni gozd algoritem je drevesni nadzorovani učni algoritem, ki uporablja niz napovedi številnih odločitvenih dreves bodisi za razvrščanje podatkovne točke bodisi za določanje njene približne vrednosti. To pomeni, da se lahko uporablja za klasifikacijo ali regresijo.

Pri prijavi za razvrstitev je razred podatkovne točke izbran na podlagi razreda, za katerega so drevesa glasovala največ; in ko se uporablja za regresijo, je vrednost podatkovne točke povprečje vseh vrednosti, ki jih izpišejo drevesa.

Pri uporabi naključnih gozdov si morate zapomniti, da je število dreves hiperparameter in bo definirano pred zagonom modela.

Pri delu v znanosti o podatkih je eden od razlogov, zakaj je bil model Random Forest izbran za določen projekt, morda povezan z zmožnostjo ogleda sestavljenih dreves in razumevanja zakaj je bila narejena klasifikacija, oz zakaj podana je bila vrednost – to se imenuje razložljivost.

Če upoštevamo algoritme, ki temeljijo na drevesih, lahko poskušamo razložiti model na več načinov, s prikazom in ogledom vsakega drevesa (lahko je težko, če ima model 200 dreves ali več), z uporabo Shapleyeve (ali SHAP) vrednosti, ob upoštevanju značilnosti, ki jih je model najbolj upošteval, z uporabo LIME za raziskovanje odnosov med vhodom in izhodom modela itd. Običajno se uporablja kombinacija vseh metod.

V tem hitrem vodniku se bomo osredotočili na ustvarjanje grafikona lastnosti, ki so bile pomembne za model pri odločanju pri razvrščanju pingvinov. To je znano kot preiskovanje pomembnost lastnosti, in ga je mogoče posredovati drugim članom ekipe (tehničnim in netehničnim), da ponudijo vpogled v sprejemanje odločitev.

Da bi to naredili, uvozimo potrebne knjižnice, naložimo nabor podatkov Palmer Penguins, razdelimo podatke, ustvarimo model, pridobimo pomembnosti funkcij in uporabimo Seaborn, da jih narišemo! Ne bomo se veliko poglabljali v podatke, EDA ali sam model – to je tema namenskega vodnika.

Opomba: Nabor podatkov lahko prenesete iz GitHub ali neposredno iz kode.

Uvoz knjižnic

Začnimo z uvozom nekaj knjižnic, ki jih bomo uporabljali:


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier


raw_data_url = "https://gist.githubusercontent.com/cassiasamp/197b4e070f5f4da890ca4d226d088d1f/raw/38c9d4906ed121481b4dc201fa2004f2b3d0065f/penguins.csv"
df = pd.read_csv(raw_data_url)

Razdelitev podatkov

Razdelimo podatke za usposabljanje in testiranje:


df = df.dropna().drop("rowid", axis=1)


y = df["species"]
X = df[["bill_length_mm", "bill_depth_mm", "flipper_length_mm"]]


X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

Pridobivanje pomembnosti funkcij

Končno – lahko usposobimo model in izvozimo pomembnosti funkcij z:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

To ustvari:

array([0.41267633, 0.30107056, 0.28625311])

To so vrednosti funkcij, če si želite ogledati imena funkcij, zaženite:


rf.feature_names_in_

Posledica tega je ustrezno ime vsake funkcije:

array(['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm'],
      dtype=object)

To pomeni, da je bila najpomembnejša značilnost za določanje razredov peguin za ta določen model bill_length_mm!

Pomembnost je relativna glede na to, kako dobro so podatki ločeni v vsaki razdelitvi vozlišča – v tem primeru je ukrep podana z Ginijev indeks – vrednost gini se nato ponderira glede na to, koliko vrstic je bilo razdeljenih pri uporabi bill_length_mm značilnost in v povprečju za 100 dreves v skupini. Upoštevajo se rezultati teh korakov 0.41267633, oziroma v tem primeru več kot 40 %.

Vizualizacija pomembnosti značilnosti

Pogost način predstavljanja vrednot pomembnosti je uporaba klepetalnic. Najprej ustvarimo podatkovni okvir z imeni funkcij in njihovimi ustreznimi pomembnostmi, nato pa jih vizualizirajmo z uporabo Seabornovega barplot():


importances_df = pd.DataFrame({"feature_names" : rf.feature_names_in_, 
                               "importances" : rf.feature_importances_})
                             

g = sns.barplot(x=importances_df["feature_names"], 
                y=importances_df["importances"])
g.set_title("Feature importances", fontsize=14);                          

Nasvet: Dobra praksa pri predstavljanju informacij je razvrščanje vrednosti v naraščajočem ali padajočem vrstnem redu. V tem primeru so podatki že urejeni, pri čemer je prva vrednost prva, ki jo želimo izvedeti. Če temu ni tako, lahko podatkovni okvir naročite z sort_values. To lahko storite v katerem koli stolpcu v naraščajočem ali padajočem vrstnem redu: importances_df.sort_values(by="importances", ascending=False).

Ko pogledamo ta prvi izris, je težje razlagati vrednost pomembnosti posamezne lastnosti. Očitno je, da je dolžina bankovca večja od drugih dveh palic, vendar ne ravno to bill_depth_mm ustreza 0.30107056in da je flipper_length_mm je 0.28625311. Torej, ta prvi grafikon je mogoče izboljšati s prikazom vrednosti vsakega stolpca. To lahko storite z dostopom do Seaborn's containers predmet. Shranjuje informacije o vsaki vrstici in posreduje vrednosti kot oznake vrstice:

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Zdaj lahko vsako vrednost pomembnosti vidimo jasno ali skoraj jasno, ker bill_length_mm vrednost reže navpična črta, ki je del zunanje obrobe grafikona. Obrobe se uporabljajo za omejevanje območja, da se nanj osredotoči več pozornosti, vendar nam v tem primeru ni treba okleniti, ker obstaja samo en graf. Odstranimo obrobo in izboljšamo berljivost številk:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
                

sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Grafikon se zdi lažje berljiv, vendar se zdi, da kljukice na osi X lebdijo in že imamo vrednosti skupaj s stolpci, tako da lahko odstranimo xticks:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)


g.set(xticks=[])
g.set_title("Feature importances", fontsize=14)
for value in g.containers:
    g.bar_label(value)

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Opazite, kako sta po odstranitvi kljukic oznake Y in X nekoliko težko berljive. Y-oznaka, feature_names, je navpičen in v osi X so le importances. Ker že naslov pove, da je grafikon od Pomen lastnosti, lahko odstranimo tudi oznake osi:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])


g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value)

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Vidite lahko, kako je ta grafikon čistejši, enostaven za branje in razumevanje, če ga primerjate s prvim. Nekaj ​​stvari še lahko naredimo. Upoštevajte, da so številke res blizu črt, lažje bi jih prebrali, če bi bilo med njimi malo več prostora.

Drug element v tej ploskvi so barve, ko so uporabljene kontrastne barve, prenašajo idejo o ločenosti, nasprotno, ko so uporabljene podobne barve, sporočajo idejo enotnosti ali delov celote. Ker so vse funkcije del pingvinov, lahko uporabimo barve, ki poskrbijo, da se vsaka vrstica razlikuje, hkrati pa ohranja enotnost:

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names",
                
                
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("Feature importances", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, 
                padding=2) 

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Če želite, da so rezultati še bolj neposredni, lahko spremenite naslov in dodate zaključek. Kar je znano, je, da je dolžina računa veljala za najpomembnejšo lastnost glede na merila, ki smo jih prej obravnavali. To je lahko prva informacija za nekoga, ki si ogleda parcelo, lahko bi rekli dolžina kljuna pingvina je bila najpomembnejša značilnost za klasifikacijo vrst v osnovnem modelu Random Forest (RF). :

g = sns.barplot(data=importances_df, 
                x="importances", 
                y="feature_names", 
                palette="mako")
sns.despine(bottom=True, left=True)
g.set_title("The penguin's bill length was the most important feature for species classification (RF base model)", fontsize=14)
g.set(xticks=[])
g.set(xlabel=None)
g.set(ylabel=None)
for value in g.containers:
    g.bar_label(value, padding=2)

To je končni rezultat tabele pomembnosti funkcij:

Pridobite pomembnost funkcij za naključne gozdove s Pythonom in Scikit-Learn PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

zaključek

V tem priročniku – zgradili smo naključni gozdni klasifikator – in pregledali pomembnosti funkcij, ki so bile uporabljene za usposabljanje modela v poskusu razložiti kaj se je model naučil in kaj vpliva na njegovo razmišljanje.

Časovni žig:

Več od Stackabuse