Seuraava artikkeli auttaa sinua: Opas ominaisuuksien tärkeyden selittämiseen neuroverkoissa SHAP:n avulla
SHAP-arvot (SHapley Additive ExPlanations) on mahtava työkalu monimutkaisten hermoverkkomallien ja muiden koneoppimismallien, kuten päätöspuiden ja satunnaisten metsien ymmärtämiseen. Pohjimmiltaan se näyttää visuaalisesti, mikä ominaisuus on tärkeä ennustamisen kannalta. Tässä artikkelissa ymmärrämme SHAP-arvot, miksi se on tärkeä työkalu hermoverkkomallien tulkinnassa, ja lopuksi toteutamme SHAPS-arvot neuroverkkojen tulkitsemiseen. Tärkeimmät tässä artikkelissa käsiteltävät kohdat on lueteltu alla.
Sisällysluettelo
- Johdatus SHAP-arvoon
- SHAP-arvojen merkitys
- Neuroverkkojen SHAP-arvojen laskeminen.
Ymmärretään ensin SHAPin ominaisuudet.
Johdatus SHAP-arvoon
SHAP-arvo on todellinen läpimurtotyökalu koneoppimisen tulkinnassa. SHAP-arvo voi toimia sekä regressio- että luokitteluongelmissa. Toimii myös erilaisissa koneoppimismalleissa, kuten logistinen regressio, SVM, puupohjaiset mallit ja syväoppimismallit, kuten neuroverkot.
Regressioongelmassa, vaikka ominaisuudet korreloisivatkin, SHAP-arvo voi määrittää ominaisuuden tärkeyden oikein. Siksi jokaisella ML-kehittäjällä pitäisi olla tämä työkalu osaamisvalikoimassaan edustamaan mallin tuloksia.
Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.
SHAP-arvojen merkitys
Koneoppimismallien käyttöönoton jälkeen seuraava askel on mallin analysointi. SHAP-arvo auttaa valitsemaan, mikä ominaisuus on tärkeä ja mikä hyödytön piirtämällä kaavioita. SHAP-arvosta tuli kuuluisa työkalu hyvin lyhyessä ajassa, koska ennen tulkintaa oli vain taulukkomuodossa, joten tuloksen saaminen oli hankalaa, mutta ominaisuuden tärkeyden visuaalisessa esityksessä saamme tuloksen ensisilmäyksellä.
Neuroverkkojen SHAP-arvojen laskeminen
Tässä osiossa toteutamme hermoverkon ja laskemme sitten SHAP-arvon.
Ensinnäkin asenna shap value -paketti ympäristöösi.
(Huomaa: käyttöönotto tehty google colabissa)
!pip install shap
Lataa tärkeitä kirjastoja, jotka auttavat meitä toteuttamaan neuroverkkoja, piirtämään kaavioita ja laskelmia.
#load libraries tuonti tensorflow muodossa tf kohteesta sklearn.model_selection tuonti train_test_split tuonti matplotlib.pyplot muodossa plt plt.style.use(‘fivethirtyeight’) tuonti seaborn as sns tuonti matplotlib.pyplot muodossa plt tuonti pandat pd tuonti numpy as np tuonti sklearn tuonti lifelines import shap # Tämä asettaa yhteisen koon kaikille piirtämillemme hahmoille. plt.rcParams[‘figure.figsize’] = [10, 7]
Nyt tuomme MachineHackin Weekend-hackathonista otetut tietomme panda DataFrameen. Tavoitemuuttujamme on ”IsUnderRisk”, jossa 1 tarkoittaa riskin alaista, 0 tarkoittaa, ettei riski ole.
df = pd.read_csv(‘/content/Train.csv’) df
Tiedoilla ei ole ongelmaa, valitsen tietoisesti nämä tiedot, koska esikäsittely ei ole motiivimme. Joten muunnan tietokehyksen suoraan taulukoksi, jotta se voi siirtyä hermoverkkoon.
#muuntaa tiedot taulukkotietojoukoksi = df.values -tietojoukko
Valitse X- ja y-arvot
X = tietojoukko[:, 0:7]
y = tietojoukko[:, 7]
Tallenna kaikki ominaisuuksien nimet taulukkoon ja tallenna ne “ominaisuudet”-muuttujaan
ominaisuudet = [‘City’, ‘Location_Score’, ‘Internal_Audit_Score’,
‘External_Audit_Score’, ‘Fin_Score’, ‘Loss_score’, ‘Past_Results’
]
Muunna arvot vakiomuotoon
#prosessoi sklearnin tiedot.preprocessing tuonti StandardScaler scaler = StandardScaler() X_scale = scaler.fit_transform(X) X_scale
Tietojen jakaminen harjoitteluun ja testaukseen suhteessa 80 : 20
#jaa tiedot 80 % harjoittelusta ja 20 % testauksesta X_train, X_test, y_train, y_test = train_test_split(X_scale, y, test_size=0,2, random_state = 4)
Mallin rakentaminen ja kokoaminen
#Rakenna mallimalli = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation=’relu’),
tf.keras.layers.Dense(256, activation=’relu’),
tf.keras.layers.Dense(256, activation=’relu’),
tf.keras.layers.Dense(1, activation=’sigmoid’) # 1 because its a binary classification
]) #Käännä malli malli.compile(häviö = tf.keras.losses.binary_crossentropy, optimoija = tf.keras.optimizers.Adam(lr = 0.02), metrics = [
tf.keras.metrics.BinaryAccuracy(name=”accuracy”),
tf.keras.metrics.Precision(name=”precision”),
tf.keras.metrics.Recall(name=”recall”)
]
) hist = malli.fit(X_train, y_train, epochs=100)
Nyt alamme laskea muotoarvoja. Aloita määrittämällä selittäjä, ja toisella rivillä olemme laskeneet shap-arvot. Huomaa, että shap-arvon laskenta on erittäin hidasta, joten varmista ennen sen käyttöönottoa, että se vie paljon aikaa, testitiedoissani on vain 109 riviä, joten minun ei tarvitse huolehtia. Kun olet suorittanut alla olevan koodin, näet edistymispalkin.
e = muoto.KernelExplainer(malli, X_train) shap_values = e.shap_values(X_test)

Voimme käyttää muotoiltuja arvoja mallimme tulkitsemiseen.
shap.initjs() # visualisoi ensimmäisen ennusteen selityksen voimakaaviolla shap.force_plot(e.expected_value[0]muoto_arvot[0][0]ominaisuudet = ominaisuudet)
Voimme käyttää muotoiltuja arvoja mallimme tulkitsemiseen. ‘force_plot’ näyttää, kuinka kukin ominaisuus vaikuttaa ulostuloon. ‘External_Audit_Score’, ‘Internal_Audit_Score’ ja ‘Fin_Score’ ovat eniten vaikuttaneet ennusteiden tekemiseen.
shap.summary_plot(shap_values[0]X_test, feature_names=features)
Sivuväripalkki korkeasta matalaan ilmaisee ominaisuuden arvon, ja x-akselilla kertoo riskin, positiivinen puoli kertoo riskin olemassaolosta ja negatiivinen puoli kertoo, että riskiä ei ole. Itse asiassa negatiivinen puoli on 0 ja positiivinen puoli on 1.
Joten alhainen arvo “internal_audit_score” määrittää, ettei riskiä ole, ja korkeampi arvo määrittää, että riski on olemassa. Mutta katso, että “Location_Score” korkea arvo määrittää, ettei riskiä ole, ja pieni arvo määrittää, ettei riskiä ole. Ominaisuudet on lajiteltu niiden merkityksen mukaan tiedoissa. Voimme nähdä sen “internal_audit_score” on tärkein ominaisuus.
Viimeiset sanat
Aloitamme arvon muokkaamisen johdannosta ja ymmärrämme, miksi tämä työkalu on erittäin tärkeä ML-mallien tulkinnassa. Sitten lopuksi näimme käytännössä kuinka muotoarvo tekee elämästä niin helppoa ML-mallien tulkinnassa.
Viitteet
- Luokittele jäsenneltyä dataa ominaisuussarakkeiden avulla
- SHAP:n virallinen Git-Hub-arkisto
- Linkki yllä oleviin koodeihin