Maskininlärning - besluts träd
- Föregående Sida Träning/TEST
- Nästa Sida MySQL Introduktion

Beslutsdator (Decision Tree)
I detta kapitel kommer vi att visa hur man skapar en "beslutsdator". Beslutsdatorer är en typ av flödesschema som hjälper dig att fatta beslut baserat på tidigare erfarenhet.
I detta exempel kommer någon att försöka besluta om de bör delta i en komedishow.
Lyckligt nog registrerar vår karaktär alltid när det arrangeras en komedishow i staden, och registrerar information om komediaktörer, och också markerar om de har varit där.
Ålder | Erfarenhet | 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 skapa ett beslutsdatorträd baserat på denna datauppsättning, detta beslutsdatorträd kan användas för att avgöra om det är värt att delta i några nya föreställningar.
Arbetsprincip
Först, importera de nödvändiga modulerna och använd pandas för att läsa datauppsättningen:
Exempel
Läs och skriv ut datauppsättningen:
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)
För att skapa ett beslutsdatorträd måste all data vara numerisk.
Vi måste konvertera de icke-numeriska kolumnerna 'Nationality' och 'Go' till numeriska.
Pandas har en map()
Metod, denna metod accepterar en dictionary som innehåller information om hur värdena ska konverteras.
{'UK': 0, 'USA': 1, 'N': 2}
Detta innebär att värdet 'UK' konverteras till 0, 'USA' till 1 och 'N' till 2.
Exempel
Ändra strängvärden till numeriska värden:
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)
Då måste vi dela upp egenskapskolumnen och målkolumnen.
Egenskapskolumnen är de kolumner vi försöker förutsäga från, målkolumnen är de kolumner som har de värden vi försöker förutsäga.
Exempel
X är egenskapskolumnen, y är målkolumnen:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Nu kan vi skapa en faktisk beslutsdatorträd som passar våra detaljer och sedan spara en .png-fil på datorn:
Exempel
Skapa ett besluts träd, spara det som en bild och visa bilden:
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()
Resultatförklaring
Besluts trädet använder dina tidigare beslut för att beräkna sannolikheten för att du är villig att se en komisk skådespelare.
Låt oss läsa olika aspekter av besluts trädet:

Rank
Rank <= 6.5
Det innebär att komiska skådespelare med rankning under 6.5 kommer att följa True
Pil (till vänster), och övriga följer False
Pil (till höger).
gini = 0.497
Detta representerar kvaliteten på skärningen och är alltid ett nummer mellan 0.0 och 0.5, där 0.0 innebär att alla prover får samma resultat, och 0.5 innebär att skärningen är helt mitt i.
samples = 13
Det innebär att det fortfarande finns 13 komiska skådespelare vid detta beslutsögonblick, eftersom detta är det första steget, så är de alla komiska skådespelare.
value = [6, 7]
Det innebär att av de 13 komiska skådespelarna kommer 6 att få "NO" och 7 att få "GO".
Gini
Det finns många sätt att dela upp proverna, och vi använder GINI-metoden i denna handledning.
Gini-metoden använder följande formel:
Gini = 1 - (x/n)2 - (y/n)2
Där x är antalet positiva svar ("GO"), n är provantalet, och y är antalet negativa svar ("NO"), beräknas med följande formel:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Nästa steg innehåller två rutor, en för komiska skådespelare med 'Rank' 6.5 eller lägre, och den andra för övriga.
True - 5 komiska skådespelare slutar här:
gini = 0.0
Det innebär att alla prover får samma resultat.
samples = 5
Det innebär att det fortfarande finns 5 komiska skådespelare i denna gren (5 skådespelarens klass är 6.5 eller lägre komiska skådespelare).
value = [5, 0]
Det innebär att 5 får "NEJ" och 0 får "JA".
False - 8 teateraktörer fortsätter:
Nationalitet (nationalitet)
Nationalitet <= 0.5
Det innebär att komiska skådespelare med nationalitetsvärde under 0.5 kommer att följa den vänstra pilen (detta innebär alla från Storbritannien), medan de andra kommer att följa den högra pilen.
gini = 0.219
Det innebär att ungefär 22% av exemplen kommer att röra sig i en riktning.
samples = 8
Det innebär att det fortfarande finns 8 komiska skådespelare i denna gren (8 komiska skådespelare med betyg över 6.5).
value = [1, 7]
Det innebär att av de åtta komiska skådespelarna kommer 1 att få "NEJ" och 7 kommer att få "JA".

True - 4 teateraktörer fortsätter:
Ålder (ålder)
Ålder <= 35.5
Det innebär att komiska skådespelare under 35.5 år kommer att följa den vänstra pilen, medan de andra kommer att följa den högra pilen.
gini = 0.375
Det innebär att ungefär 37.5% av exemplen kommer att röra sig i en riktning.
samples = 4
Det innebär att det fortfarande finns 4 komiska skådespelare i denna gren (4 komiska skådespelare från Storbritannien).
value = [1, 3]
Det innebär att av de fyra komiska skådespelarna kommer 1 att få "NEJ" och 3 kommer att få "JA".
False - 4 komiska skådespelare avslutar här:
gini = 0.0
Detta representerar att alla prov får samma resultat.
samples = 4
Det innebär att det fortfarande finns 4 komiska skådespelare i denna gren (4 komiska skådespelare från Storbritannien).
value = [0, 4]
Det innebär att av de fyra komiska skådespelarna kommer 0 att få "NEJ" och 4 kommer att få "JA".

True - 2 komiska skådespelare avslutar här:
gini = 0.0
Detta representerar att alla prov får samma resultat.
samples = 2
Det innebär att det fortfarande finns 2 komiska skådespelare i denna gren (2 komiska skådespelare under 35.5 år).
value = [0, 2]
Det innebär att av de två komiska skådespelarna kommer 0 att få "NEJ" och 2 kommer att få "JA".
False - 2 teateraktörer fortsätter:
Erfarenhet (erfarenhet)
Erfarenhet <= 9.5
Det innebär att komiska skådespelare med 9.5 år eller mer erfarenhet kommer att följa den vänstra pilen, medan de andra kommer att följa den högra pilen.
gini = 0.5
Det innebär att 50% av exemplen kommer att röra sig i en riktning.
samples = 2
Det innebär att det fortfarande finns 2 komiska skådespelare i denna gren (2 komiska skådespelare över 35.5 år).
value = [1, 1]
Det innebär att av de två komiska skådespelarna kommer 1 att få "NEJ" och 1 kommer att få "JA".

True - 1 av komiska skådespelare avslutar här:
gini = 0.0
Detta representerar att alla prov får samma resultat.
samples = 1
Detta representerar att det fortfarande finns 1 komediskådespelare i denna gren (en med 9.5 år eller mindre erfarenhet av komedi).
value = [0, 1]
Detta representerar att 0 representerar "NEJ", 1 representerar "JA".
False - 1 komediskådespelare härifrån:
gini = 0.0
Detta representerar att alla prov får samma resultat.
samples = 1
Detta representerar att det fortfarande finns 1 komediskådespelare i denna gren (av vilka 1 har mer än 9.5 års erfarenhet av komedi).
value = [1, 0]
1 representerar "NEJ", 0 representerar "JA".
Förutsägda värden
Vi kan använda beslutsverktyget för att förutsäga nya värden.
Till exempel: Skall jag se på ett program med en 40-årig amerikansk komediskådespelare med 10 års erfarenhet och en komedirankning på 7?
Exempel
Använd predict()
Metoder för att förutsäga nya värden:
print(dtree.predict([[40, 10, 7, 1]]))
Exempel
Vad är svaret om komedigraden är 6?
print(dtree.predict([[40, 10, 6, 1]]))
Olika svar
Om du kör tillräckligt många gånger kommer beslutsverktyget att ge dig olika resultat, även om du anger samma data.
Detta beror på att beslutsverktyget inte kan ge oss 100% säkra svar. Det baseras på sannolikheten för resultaten, svaren kommer att variera.
- Föregående Sida Träning/TEST
- Nästa Sida MySQL Introduktion