Teollinen oppitunnit - päätöspuut
- Edellinen Sivu Koulutus/TESTI
- Seuraava Sivu MySQL Perusteet

Päätöspuu (Decision Tree)
Tässä luvussa näytämme sinulle, miten tehdä 'päätöspuun'. Päätöspuu on prosessikuva, joka auttaa sinua tekemään päätöksiä aikaisemman kokemuksen perusteella.
Tässä esimerkissä yksi henkilö yrittää päättää, pitäisikö hän osallistua komediaohjelmaan.
Onneksi, esimerkkimme hahmo rekisteröity aina kun komediaohjelma järjestetään kaupungissa, ja rekisteröi tietoja komediaesiäisistä, ja myös rekisteröi, onko hän/hän ollut paikalla.
Ikä | Kokemus | Rank | Nationality | Go |
---|---|---|---|---|
36 | 10 | 9 | UK | NO |
42 | 12 | 4 | USA | NO |
23 | 4 | 6 | N | NO |
52 | 4 | 4 | USA | NO |
43 | 21 | 8 | USA | YES |
44 | 14 | 5 | UK | NO |
66 | 3 | 7 | N | YES |
35 | 14 | 9 | UK | YES |
52 | 13 | 7 | N | YES |
35 | 5 | 9 | N | YES |
24 | 3 | 5 | USA | NO |
18 | 3 | 7 | UK | YES |
45 | 9 | 9 | UK | YES |
Nyt, tämän tietojoukon perusteella Python voi luoda päätöspuun, jota voidaan käyttää päätöksen tekemiseen siitä, onko uusi esitys kannattavaa osallistua.
Toimintatapa
Ensiksi, tuodaan tarvittavat moduulit ja lue tietojoukko pandasilla:
Esimerkki
Lue ja tulosta tietojoukko:
import pandas from sklearn import tree import pydotplus from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import matplotlib.image as pltimg df = pandas.read_csv("shows.csv") print(df)
Jos haluamme tehdä päätöspuun, kaikki tiedot täytyy olla lukuja.
Meidän täytyy muuntaa ei-numeriset sarakkeet 'Nationality' ja 'Go' lukuiksi.
Pandasilla on map()
Metodi, joka hyväksyy sanakirjan, joka sisältää tiedot arvojen muuntamisesta.
{'UK': 0, 'USA': 1, 'N': 2}
Tämä tarkoittaa, että arvo 'UK' muunnetaan 0:ksi, 'USA' muunnetaan 1:ksi ja 'N' muunnetaan 2:ksi.
Esimerkki
Muunna merkkijonot lukuiksi:
d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) print(df)
Sitten meidän täytyy erottaa ominaisuusvälilehdet kohdeväliltä.
Ominaisuusvälilehdet ovat niitä sarakkeita, joista yritämme ennustaa, ja kohdevälit ovat niitä sarakkeita, joissa on arvoja, joita yritämme ennustaa.
Esimerkki
X on ominaisuusvälilehti, y on kohdeväli:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Nyt voimme luoda todellisen päätöspuun, joka sopii yksityiskohtiimme, ja tallentaa sen tietokoneeseen .png-tiedostona:
Esimerkki
Luo päätöspuu, tallenna se kuvana ja näytä kuva:
dtree = DecisionTreeClassifier() dtree = dtree.fit(X, y) data = tree.export_graphviz(dtree, out_file=None, feature_names=features) graph = pydotplus.graph_from_dot_data(data) graph.write_png('mydecisiontree.png') img=pltimg.imread('mydecisiontree.png') imgplot = plt.imshow(img) plt.show()
Tuloksen selitys
Päätöspuu laskee aikaisemman päätöksesi perusteella, kuinka todennäköistä on, että haluat katsoa koomikkoa.
Lue päätöspuun eri puolet:

Rank
Rank <= 6.5
Tämä osoittaa, että sijoittelu 6.5:n alapuolella olevat koomikot noudattavat True
Nuoli (vasemmalle), ja muut noudattavat False
Nuoli (oikealle).
gini = 0.497
Tämä osoittaa jakamisen laadun, ja se on aina luku 0.0-0.5 välillä, jossa 0.0 tarkoittaa, että kaikki näytteet saavat saman tuloksen, ja 0.5 tarkoittaa, että jakaminen on täysin keskellä.
samples = 13
Tämä osoittaa, että päätöksenteon tässä vaiheessa on vielä 13 koomikkoa, koska tämä on ensimmäinen vaihe, joten he kaikki ovat koomikoita.
value = [6, 7]
Tämä osoittaa, että 13 koomikosta 6 saa "NO" ja 7 saa "GO".
Gini
Näytteiden jakamistapa on monenlaisia, käytämme tässä oppaassa GINI-metodia.
Gini-metodi käyttää seuraavaa kaavaa:
Gini = 1 - (x/n)2 - (y/n)2
Siinä, x on varmasti vastaus määrä ("GO"), n on näytteiden määrä, y on kieltävä vastaus määrä ("NO"), ja lasketaan seuraavalla kaavalla:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Seuraavassa vaiheessa on kaksi laatikkoa, yksi koomikoille, joiden 'Rank' on 6.5 tai alempi, ja muut yksi laatikko.
True - 5 koomikkoa päätyy täällä:
gini = 0.0
Tämä osoittaa, että kaikki näytteet saavat saman tuloksen.
samples = 5
Tämä osoittaa, että tässä haarakkeessa on vielä 5 koomikkoa (5:n luokitus on 6.5 tai alempi koomikko).
value = [5, 0]
Tämä tarkoittaa, että 5 saa "EI" ja 0 saa "KYLLÄ".
False - 8 näyttelijää jatkaa:
Nationality(kansallisuus)
Nationality <= 0.5
Tämä tarkoittaa, että kansallisuusarvo alle 0,5 omaavat komediantit seuravat vasenta nuolta (tämä tarkoittaa kaikkia brittiläisiä), muut oikean.
gini = 0.219
Tämä tarkoittaa, että noin 22% näytteistä siirtyy yhteen suuntaan.
samples = 8
Tämä tarkoittaa, että tässä haarakohdassa on edelleen 8 komediantia (8 komediantia, joiden luokka on yli 6,5).
value = [1, 7]
Tämä tarkoittaa, että näistä kahdeksasta komediasta 1 saa "EI" ja 7 saa "KYLLÄ".

True - 4 näyttelijää jatkaa:
Age(ikä)
Age <= 35.5
Tämä tarkoittaa, että 35,5 vuotta tai nuoremmat komediantit seuravat vasenta nuolta, muut oikean.
gini = 0.375
Tämä tarkoittaa, että noin 37,5% näytteistä siirtyy yhteen suuntaan.
samples = 4
Tämä tarkoittaa, että tässä haarakohdassa on edelleen 4 komediantia (4 brittiläistä komediantia).
value = [1, 3]
Tämä tarkoittaa, että näistä neljästä komediasta 1 saa "EI" ja 3 saa "KYLLÄ".
False - 4 komediantia päätti täällä:
gini = 0.0
Tämä tarkoittaa, että kaikki esimerkit antavat saman tuloksen.
samples = 4
Tämä tarkoittaa, että tässä haarakohdassa on edelleen 4 komediantia (4 brittiläistä komediantia).
value = [0, 4]
Tämä tarkoittaa, että näistä neljästä komediasta 0 saa "EI" ja 4 saa "KYLLÄ".

True - 2 komediantia päätti täällä:
gini = 0.0
Tämä tarkoittaa, että kaikki esimerkit antavat saman tuloksen.
samples = 2
Tämä tarkoittaa, että tässä haarakohdassa on edelleen 2 komediantia (2 alle 35,5-vuotiasta komediantia).
value = [0, 2]
Tämä tarkoittaa, että näistä kahdesta komediasta 0 saa "EI" ja 2 saa "KYLLÄ".
False - 2 näyttelijää jatkaa:
Experience(kokemus)
Experience <= 9.5
Tämä tarkoittaa, että 9,5 vuotta tai enemmän kokemusta omaavat komediantit seuravat vasenta nuolta, muut oikean.
gini = 0.5
Tämä tarkoittaa, että 50% näistä näytteistä siirtyy yhteen suuntaan.
samples = 2
Tämä tarkoittaa, että tässä haarakohdassa on edelleen 2 komediantia (2 yli 35,5-vuotiasta komediantia).
value = [1, 1]
Tämä tarkoittaa, että näistä kahdesta komediasta 1 saa "EI" ja 1 saa "KYLLÄ".

True - 1 niminen komedianti päätti täällä:
gini = 0.0
Tämä tarkoittaa, että kaikki esimerkit antavat saman tuloksen.
samples = 1
Tämä tarkoittaa, että tässä haaroituksessa on vielä yksi komediaesimerkki (jossa on yksi 9,5 vuotta tai vähemmän kokemusta oleva komediaesimerkki).
value = [0, 1]
Tämä tarkoittaa, että 0 edustaa "EI", 1 edustaa "KYLLÄ".
False - 1 komediaesimerkki tähän mennessä:
gini = 0.0
Tämä tarkoittaa, että kaikki esimerkit antavat saman tuloksen.
samples = 1
Tämä tarkoittaa, että tässä haaroituksessa on vielä yksi komediaesimerkki (jossa on yksi yli 9,5 vuotta kokemusta oleva komediaesimerkki).
value = [1, 0]
1 edustaa "EI", 0 edustaa "KYLLÄ".
Ennustetut arvot
Voimme käyttää päätöspuuta ennustamaan uusia arvoja.
Esimerkiksi: Pitäisikö minun katsoa ohjelmaa, jonka näyttelijä on 40-vuotias yhdysvaltalainen komediaesimerkki ja jolla on 10 vuoden kokemus, ja jonka komediaarvo on 7?
Esimerkki
Käytä predict()
Menetelmä uusien arvojen ennustamiseksi:
print(dtree.predict([[40, 10, 7, 1]]))
Esimerkki
Jos komediasarjan arvo on 6, mikä on vastaus?
print(dtree.predict([[40, 10, 6, 1]]))
Eri tulokset
Jos sitä suoritetaan riittävästi usein, päätöspuu voi tarjota erilaisia tuloksia, vaikka syötetään samat tiedot.
Tämä johtuu siitä, että päätöspuu ei voi antaa meille 100% varmaa vastausta. Se perustuu tulosten todennäköisyyteen, ja vastaus voi vaihdella.
- Edellinen Sivu Koulutus/TESTI
- Seuraava Sivu MySQL Perusteet