Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn segítségével

Bevezetés

A Véletlen Erdő Az algoritmus egy fa alapú felügyelt tanulási algoritmus, amely számos döntési fa előrejelzéseinek együttesét használja egy adatpont osztályozására vagy hozzávetőleges értékének meghatározására. Ez azt jelenti, hogy használható osztályozásra vagy regresszióra.

A besorolásra való jelentkezéskor az adatpont osztályát a fák által legtöbb szavazatot kapott osztály alapján választják ki; és ha regresszióra alkalmazzuk, az adatpont értéke a fák által kiadott összes érték átlaga.

A Random Forests használatakor fontos megjegyezni, hogy a fák száma hiperparaméter, és a modell futtatása előtt kerül meghatározásra.

Amikor az adattudományban dolgozunk, az egyik oka annak, hogy egy adott projekthez a Random Forest modellt választották, az lehet, hogy az egyesített fákra nézni és megérteni. miért osztályozás történt, ill miért értéket adtak meg – ezt hívják magyarázhatóság.

Ha figyelembe vesszük a fa alapú algoritmusokat, egy modell magyarázatát többféleképpen is meg lehet próbálni, minden egyes fát megjelenítve és megnézve (nehéz lehet, ha a modellben 200 vagy több fa van), Shapley (vagy SHAP) értékek, megvizsgálva azokat a funkciókat, amelyeket a modell a leginkább figyelembe vett, a használatával LIME a modell bemenete és kimenete közötti kapcsolatok vizsgálata stb. Általában az összes módszer kombinációját alkalmazzák.

Ebben a rövid útmutatóban arra összpontosítunk, hogy készítsünk egy diagramot azokról a jellemzőkről, amelyeket fontosnak tartottak a modell számára a pingvinek osztályozása során történő döntéshozatalhoz. Ezt vizsgálják a jellemző fontossága, és átadható a csapat többi tagjának (technikai és nem technikai), hogy bepillantást nyújtson a döntések meghozatalába.

Ehhez importáljuk a szükséges könyvtárakat, töltsük be a Palmer Penguins adatkészletet, osszuk fel az adatokat, hozzuk létre a modellt, szerezzük be a jellemzők fontosságait, és a Seaborn segítségével ábrázoljuk azokat! Nem fogunk sokat foglalkozni az adatokkal, az EDA-val vagy magával a modellel – ez a téma a dedikált útmutatóban.

Jegyzet: Az adatkészletet innen töltheti le GitHub vagy közvetlenül a kódból.

Könyvtárak importálása

Kezdjük azzal, hogy importálunk néhány könyvtárat, amelyeket használni fogunk:


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)

Az adatok felosztása

Osszuk fel az adatokat edzéshez és teszteléshez:


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)

A funkció fontosságának megszerzése

Végül – betaníthatunk egy modellt, és exportálhatjuk a jellemzők fontosságát:


rf = RandomForestClassifier()


rf.fit(X_train, y_train)


rf.feature_importances_

Ez a következő kimenetet adja:

array([0.41267633, 0.30107056, 0.28625311])

Ezek a jellemzőértékek, a jellemzők nevének megtekintéséhez futtassa:


rf.feature_names_in_

Ennek eredményeként az egyes funkciók megfelelő neve jön létre:

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

Ez azt jelenti, hogy a peguin osztályok kiválasztásának legfontosabb jellemzője ehhez a modellhez az volt bill_length_mm!

A fontosság annak mértékéhez viszonyítva van, hogy mennyire jól vannak szétválasztva az adatok az egyes csomópont-felosztásokban – ebben az esetben a mértéket a Gini Index – a gini értéket ezután azzal súlyozzuk, hogy hány sort osztottunk fel a használata során bill_length_mm jellemzője, és az együttes 100 fára átlagolva. Ezeknek a lépéseknek az eredménye 0.41267633, vagy ebben az esetben több mint 40%.

A szolgáltatás fontosságának megjelenítése

A fontossági értékek megjelenítésének általános módja a sávos csevegés. Először hozzunk létre egy adatkeretet a jellemzők neveivel és a hozzájuk tartozó fontosságokkal, majd vizualizáljuk őket a Seaborn segítségével 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);                          

Útmutatás: Az információk bemutatásakor bevált gyakorlat az értékek növekvő vagy csökkenő sorrendbe állítása. Ebben az esetben az adatok már rendezve vannak, az első érték az első, amelyet tudni szeretnénk. Ha nem ez a helyzet, megrendelheti az adatkeretet a következővel sort_values. Ezt bármelyik oszlopban megteheti növekvő vagy csökkenő sorrendben: importances_df.sort_values(by="importances", ascending=False).

Ha ezt az első cselekményt nézzük, nehezebb értelmezni az egyes jellemzők fontosságának értékét. Nyilvánvaló, hogy a számla hossza nagyobb, mint a másik két rúd, de nem pontosan az bill_depth_mm egyenértékű 0.30107056, és hogy a flipper_length_mm 0.28625311. Tehát ez az első diagram javítható az egyes sávok értékének megjelenítésével. Ezt megteheti a Seaborn's elérésével containers tárgy. Minden sáv információt tárol, és az értékeket sávcímkeként adja át:

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

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)

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Most már minden fontossági értéket tisztán, vagy majdnem tisztán láthatunk, mert bill_length_mm értéket egy függőleges vonal vágja le, amely a diagram külső szegélyének része. A szegélyek egy terület bezárására szolgálnak, hogy nagyobb figyelmet fordítsunk rá, de ebben az esetben nem kell bekeríteni, mert csak egy gráf van. Távolítsuk el a szegélyt és javítsuk a számok olvashatóságát:

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)

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

A diagram könnyebben olvashatónak tűnik, de az X tengelyen lévő pipák lebegnek, és már megvannak az értékek a sávokkal együtt, így eltávolíthatjuk a 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)

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Figyelje meg, hogy a pipák eltávolítása után az Y és X címkék kissé nehezen olvashatók. Az Y-címke, feature_names, függőleges és az X-tengelyen csak importances. Mivel a cím már azt mondja, hogy a diagram a Funkció fontossága, a tengelycímkéket is eltávolíthatjuk:

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)

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Láthatja, hogy ez a diagram letisztultabb, könnyen olvasható és érthető, ha összehasonlítja az elsővel. Van még néhány dolog, amit tehetünk. Figyeld meg, hogy a számok valóban közel legyenek a sávokhoz, könnyebben olvasható lenne, ha egy kicsit több hely lenne közöttük.

Egy másik elem ebben a cselekményben a színek, kontrasztos színek használatakor az elkülönülés gondolatát közvetíti, míg fordítva, ha hasonló színeket használunk, az egység gondolatát, vagy egy egész egy részét közvetítik. Mivel a jellemzők mindegyike a pingvinek részét képezi, használhatunk olyan színeket, amelyek minden sávot megkülönböztetnek, miközben megtartják az egységet:

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) 

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Ha az eredményeket még közvetlenebbé szeretné tenni, módosíthatja a címet és hozzáadhatja a következtetést. Ismeretes, hogy az általunk korábban tárgyalt kritériumok szerint a számlahosszat tartották a legfontosabb jellemzőnek. Ez lehet az első információ annak, aki megnézi a cselekményt, mondhatnánk A Random Forest (RF) alapmodellben a pingvin csőrének hossza volt a legfontosabb jellemző a fajok besorolásához :

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)

Ez a funkció fontossági táblázatának végeredménye:

Ismerje meg a véletlenszerű erdők funkcióinak fontosságát a Python és a Scikit-Learn PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Következtetés

Ebben az útmutatóban – egy Véletlenszerű erdőosztályozót építettünk –, és megvizsgáltuk azokat a funkciók fontosságát, amelyeket a modell betanításához használtunk, hogy magyarázat mit tanult a modell, és mi befolyásolja az érvelését.

Időbélyeg:

Még több Stackabus