Machine Learning - Decision Tree
- Forrige Side Træning/Test
- Næste Side MySQL Grundlæggende

Beslutningstræ (Decision Tree)
I dette kapitel vil vi vise dig, hvordan du laver en 'beslutningstræ'. Beslutningstræer er en procesplan, der kan hjælpe dig med at træffe beslutninger baseret på tidligere erfaringer.
I dette eksempel vil en person forsøge at afgøre, om de skal deltage i komedieforestillingen.
Heldigvis, vores eksempel person registrerer sig hver gang der afholdes en komedieforestilling i byen, og registrerer nogle oplysninger om komedieaktører, og registrerer også om de har været der.
Alder | Oplevelse | 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 |
Nu kan Python oprette et beslutningstræ baseret på dette dataæt, som kan bruges til at afgøre, om det er værd at deltage i nye forestillinger.
Arbejdsmekanisme
Først skal vi importere de nødvendige moduler og bruge pandas til at læse dataæt:
Eksempel
Læs og print dataæt
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)
For at lave et beslutningstræ skal alle data være numeriske.
Vi skal konvertere de ikke-numeriske kolonner 'Nationality' og 'Go' til numeriske.
Pandas har en map()
Metode, der accepterer en dictionary, der indeholder information om, hvordan værdierne skal konverteres.
{'UK': 0, 'USA': 1, 'N': 2}
Det betyder, at værdien 'UK' konverteres til 0, værdien 'USA' konverteres til 1, og værdien 'N' konverteres til 2.
Eksempel
Konverter strengværdier til numeriske værdier:
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)
Herefter skal vi adskille egenskabskolonnen fra målkolonnen.
Egenskabskolonnen er kolonnen, vi forsøger at forudsige fra, og målkolonnen er kolonnen med værdier, vi forsøger at forudsige.
Eksempel
X er kolonnen med egenskaber, y er kolonnen med mål:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Nu kan vi oprette det faktiske beslutningstræ, der passer til vores detaljer, og derefter gemme en .png-fil på computeren:
Eksempel
Opret et beslutningstræ, gem det som et billede og vis billedet:
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()
Resultatforklaring
Beslutningstræet bruger dine tidligere beslutninger til at beregne sandsynligheden for, om du vil se en komisk skuespiller.
Lad os læse forskellige aspekter af beslutningstræet:

Rank
Rank <= 6.5
Viser, at komiske skuespillere med en rangering lavere end 6.5 vil følge True
Pil (venstre), og de øvrige følger False
Pil (højre)
gini = 0.497
Viser kvaliteten af skilleprocessen, og er altid et tal mellem 0.0 og 0.5, hvor 0.0 betyder, at alle prøver får det samme resultat, og 0.5 betyder, at skilleprocessen er fuldt ud fordeling.
samples = 13
Viser, at der stadig er 13 komiske skuespillere tilbage på dette beslutningspunkt, fordi dette er det første trin, og de er alle komiske skuespillere.
value = [6, 7]
Viser, at af de 13 komiske skuespillere, 6 vil få "NO", og 7 vil få "GO".
Gini
Der er mange måder at skille prøver på, og vi bruger GINI-metoden i denne tutorial.
Gini-metoden bruger følgende formel:
Gini = 1 - (x/n)2 - (y/n)2
Her er x antallet af positive svar ("GO"), n er prøveantallet, og y er antallet af negative svar ("NO"), og beregnes med følgende formel:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Næste trin indeholder to rammer, en ramme til komiske skuespillere med 'Rank' på 6.5 eller lavere, og den anden ramme.
True - 5 komiske skuespillere slutter her:
gini = 0.0
Viser, at alle prøver får det samme resultat.
samples = 5
Viser at der stadig er 5 komiske skuespillere tilbage (5 skuespillere med en rangering på 6.5 eller lavere).
value = [5, 0]
Det betyder, at 5 får "NEJ" og 0 får "JA".
False - 8 teateraktører fortsætter:
Nationalitet (nationalitet)
Nationalitet <= 0.5
Det betyder, at komikere med nationalitetsværdi mindre end 0.5 vil følge den venstre pil (dette betyder alle fra Storbritannien), mens de øvrige vil følge den højre pil.
gini = 0.219
Det betyder, at omtrent 22% af prøven vil bevæge sig i én retning.
samples = 8
Det betyder, at der stadig er otte komikere tilbage i denne gren (otte komikere med en karakter over 6.5).
value = [1, 7]
Det betyder, at af de otte komikere, 1 vil få "NEJ", og 7 vil få "JA".

True - 4 teateraktører fortsætter:
Alder (alder)
Alder <= 35.5
Det betyder, at komikere under 35.5 år vil følge den venstre pil, mens de øvrige vil følge den højre pil.
gini = 0.375
Det betyder, at omtrent 37.5% af prøven vil bevæge sig i én retning.
samples = 4
Det betyder, at der stadig er 4 komikere tilbage i denne gren (4 komikere fra Storbritannien).
value = [1, 3]
Det betyder, at af de fire komikere, 1 vil få "NEJ", og 3 vil få "JA".
False - 4 komikere her ender:
gini = 0.0
Det betyder, at alle prøver får det samme resultat.
samples = 4
Det betyder, at der stadig er 4 komikere tilbage i denne gren (4 komikere fra Storbritannien).
value = [0, 4]
Det betyder, at af de fire komikere, 0 vil få "NEJ", og 4 vil få "JA".

True - 2 komikere her ender:
gini = 0.0
Det betyder, at alle prøver får det samme resultat.
samples = 2
Det betyder, at der stadig er 2 komikere tilbage i denne gren (2 komikere på 35.5 år eller yngre).
value = [0, 2]
Det betyder, at af de to komikere, 0 vil få "NEJ", og 2 vil få "JA".
False - 2 teateraktører fortsætter:
Erfaring (erfaring)
Erfaring <= 9.5
Det betyder, at komikere med 9.5 års erfaring eller mere vil følge den venstre pille, mens de øvrige vil følge den højre pille.
gini = 0.5
Det betyder, at 50% af prøven vil bevæge sig i én retning.
samples = 2
Det betyder, at der stadig er 2 komikere tilbage i denne gren (2 komikere over 35.5 år).
value = [1, 1]
Det betyder, at af de to komikere, 1 vil få "NEJ", og 1 vil få "JA".

True - 1 navngivet komiker her ender:
gini = 0.0
Det betyder, at alle prøver får det samme resultat.
samples = 1
Det betyder, at der stadig er 1 komiker i denne gren (1 komiker med 9,5 år eller mindre erfaring).
value = [0, 1]
0 betyder "NEJ", 1 betyder "JA".
False - 1 komiker her til:
gini = 0.0
Det betyder, at alle prøver får det samme resultat.
samples = 1
Det betyder, at der stadig er 1 komiker i denne gren (af dem er 1 komiker med mere end 9,5 års erfaring).
value = [1, 0]
1 betyder "NEJ", 0 betyder "JA".
Forudsigede værdier
Vi kan bruge beslutningstræet til at forudsige nye værdier.
For eksempel: Skal jeg se en program med en 40-årig amerikansk komiker, der har 10 års erfaring og en komediebedømmelse på 7?
Eksempel
Brug predict()
Metoder til at forudsige nye værdier:
print(dtree.predict([[40, 10, 7, 1]]))
Eksempel
Hvad er svaret, hvis komedien er rangeret som 6?
print(dtree.predict([[40, 10, 6, 1]]))
Forskellige resultater
Hvis det kører nok gange, vil beslutningstræet give dig forskellige resultater, selvom du indtaster de samme data.
Dette skyldes, at beslutningstræet ikke kan give os 100% sikre svar. Det er baseret på sandsynlighederne for resultaterne, og svarene vil variere.
- Forrige Side Træning/Test
- Næste Side MySQL Grundlæggende