Python- tutoriaal

Python TUIS Python Intro Python Begin Python-sintaksis Python-kommentaar Python veranderlikes Python-datatipes Python-nommers Python Casting Python Strings Python Booleans Python-operateurs Python-lyste Python Tuples Python-stelle Python Woordeboeke Python As...Anders Python While Loops Python vir lusse Python-funksies Python Lambda Python-skikkings Python-klasse/-voorwerpe Python Erfenis Python Iterators Python-omvang Python-modules Python-datums Python Wiskunde Python JSON Python RegEx Python PIP Python Probeer ... Behalwe Python-gebruikersinvoer Python String Formatering

Lêerhantering

Python-lêerhantering Python Lees lêers Python Skryf/skep lêers Python verwyder lêers

Python-modules

NumPy Tutoriaal Panda Walkthrough Scipy Tutoriaal

Python Matplotlib

Matplotlib Intro Matplotlib Begin Matplotlib Pyplot Matplotlib Plotte Matplotlib Merkers Matplotlib-lyn Matplotlib-etikette Matplotlib-rooster Matplotlib Subplotte Matplotlib Scatter Matplotlib Bars Matplotlib Histogramme Matplotlib sirkeldiagramme

Masjienleer

Aan die gang kom Gemiddelde mediaanmodus Standaard afwyking Persentiel Dataverspreiding Normale dataverspreiding Strooi plot Lineêre regressie Polinoomregressie Meervoudige regressie Skaal Trein/toets Besluitboom

Python MySQL

MySQL Begin MySQL Skep databasis MySQL Skep tabel MySQL-insetsel MySQL Kies MySQL Waar MySQL Bestel deur MySQL verwyder MySQL Drop Table MySQL-opdatering MySQL-limiet MySQL Sluit aan

Python MongoDB

MongoDB Begin MongoDB Skep databasis MongoDB Skep versameling MongoDB-insetsel MongoDB Vind MongoDB-navraag MongoDB Sorteer MongoDB verwyder MongoDB Drop Collection MongoDB-opdatering MongoDB-limiet

Python-verwysing

Python Oorsig Python ingeboude funksies Python-stringmetodes Python Lys Metodes Python Woordeboek Metodes Python Tuple Metodes Python Stel metodes Python-lêermetodes Python sleutelwoorde Python-uitsonderings Python Woordelys

Moduleverwysing

Ewekansige module Versoeke Module Statistiek Module Wiskunde Module cMath-module

Python Hoe om

Verwyder lys duplikate Draai 'n snaar om Voeg twee getalle by

Python voorbeelde

Python voorbeelde Python-samesteller Python-oefeninge Python Vasvra Python-sertifikaat

Masjienleer - Besluitboom



Besluitboom

In hierdie hoofstuk sal ons jou wys hoe om 'n "Besluitboom" te maak. 'n Besluitboom is 'n vloeidiagram en kan jou help om besluite te neem op grond van vorige ondervinding.

In die voorbeeld sal 'n persoon probeer besluit of hy/sy na 'n komedieprogram moet gaan of nie.

Gelukkig het ons voorbeeld persoon elke keer as daar 'n komedieprogram in die dorp was geregistreer, en bietjie inligting oor die komediant geregistreer, en ook geregistreer of hy/sy gaan of nie.

Ouderdom Ervaring Rang Nasionaliteit Gaan
36 10 9 VK GEEN
42 12 4 VSA GEEN
23 4 6 N GEEN
52 4 4 VSA GEEN
43 21 8 VSA JA
44 14 5 VK GEEN
66 3 7 N JA
35 14 9 VK JA
52 13 7 N JA
35 5 9 N JA
24 3 5 VSA GEEN
18 3 7 VK JA
45 9 9 VK JA

Nou, gebaseer op hierdie datastel, kan Python 'n besluitboom skep wat gebruik kan word om te besluit of enige nuwe vertonings die moeite werd is om na by te woon.



Hoe werk dit?

Voer eers die modules in wat jy nodig het, en lees die datastel met pandas:

Voorbeeld

Lees en druk die datastel:

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)

Om 'n besluitboom te maak, moet alle data numeries wees.

Ons moet die nie-numeriese kolomme 'Nasionaliteit' en 'Gaan' omskakel in numeriese waardes.

Pandas het 'n map()metode wat 'n woordeboek neem met inligting oor hoe om die waardes om te skakel.

{'UK': 0, 'USA': 1, 'N': 2}

Beteken omskakel die waardes 'VK' na 0, 'VSA' na 1, en 'N' na 2.

Voorbeeld

Verander stringwaardes in numeriese waardes:

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)

Dan moet ons die kenmerkkolomme van die teikenkolom skei .

Die kenmerkkolomme is die kolomme waarvan ons probeer voorspel , en die teikenkolom is die kolom met die waardes wat ons probeer voorspel.

Voorbeeld

Xis die kenmerkkolomme, yis die teikenkolom:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

Nou kan ons die werklike besluitboom skep, dit by ons besonderhede pas, en 'n .png-lêer op die rekenaar stoor:

Voorbeeld

Skep 'n Besluitboom, stoor dit as 'n prent en wys die prent:

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()


Resultaat verduidelik

Die besluiteboom gebruik jou vroeëre besluite om die kans te bereken dat jy 'n komediant wil gaan sien of nie.

Kom ons lees die verskillende aspekte van die besluitnemingsboom:

Rang

Rank <= 6.5beteken dat elke komediant met 'n rang van 6.5 of laer die Truepyl (na links) sal volg, en die res sal die Falsepyl (na regs) volg.

gini = 0.497verwys na die kwaliteit van die verdeling, en is altyd 'n getal tussen 0.0 en 0.5, waar 0.0 sou beteken dat al die monsters dieselfde resultaat gekry het, en 0.5 sou beteken dat die verdeling presies in die middel gedoen word.

samples = 13beteken dat daar 13 komediante oor is op hierdie stadium van die besluit, wat almal van hulle is aangesien dit die eerste stap is.

value = [6, 7]beteken dat van hierdie 13 komediante, 6 'n "NEE" sal kry, en 7 'n "GO".

Gini

Daar is baie maniere om die monsters te verdeel, ons gebruik die GINI-metode in hierdie tutoriaal.

Die Gini-metode gebruik hierdie formule:

Gini = 1 - (x/n)2 - (y/n)2

Waar xis die aantal positiewe antwoorde ("GO"), nis die aantal steekproewe, en yis die aantal negatiewe antwoorde ("NEE"), wat vir ons hierdie berekening gee:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

Die volgende stap bevat twee bokse, een boks vir die komediante met 'n 'Rank' van 6.5 of laer, en een boks met die res.

Waar - 5 komediante eindig hier:

gini = 0.0 beteken dat al die monsters dieselfde resultaat gekry het.

samples = 5beteken dat daar 5 komediante in hierdie tak oor is (5 komediante met 'n Rang van 6.5 of laer).

value = [5, 0]beteken dat 5 'n "NEE" sal kry en 0 'n "GO" sal kry.

Onwaar - 8 komediante gaan voort:

Nasionaliteit

Nationality <= 0.5beteken dat die komediante met 'n nasionaliteitswaarde van minder as 0,5 die pyl na links sal volg (wat beteken almal van die VK, ), en die res sal die pyl na regs volg.

gini = 0.219beteken dat ongeveer 22% van die monsters in een rigting sou gaan.

samples = 8beteken dat daar 8 komediante in hierdie tak oor is (8 komediante met 'n Rang hoër as 6.5).

value = [1, 7]beteken dat van hierdie 8 komediante, 1 'n "NEE" sal kry en 7 'n "GO".




Waar - 4 komediante gaan voort:

Ouderdom

Age <= 35.5 beteken dat komediante op die ouderdom van 35,5 of jonger die pyl na links sal volg, en die res sal die pyl na regs volg.

gini = 0.375 beteken dat ongeveer 37,5% van die monsters in een rigting sou gaan.

samples = 4 beteken dat daar 4 komediante in hierdie tak oor is (4 komediante van die VK).

value = [1, 3] beteken dat van hierdie 4 komediante, 1 'n "NEE" sal kry en 3 'n "GO".

Vals - 4 komediante eindig hier:

gini = 0.0 beteken dat al die monsters dieselfde resultaat gekry het.

samples = 4 beteken dat daar 4 komediante in hierdie tak oor is (4 komediante nie van die VK nie).

value = [0, 4] beteken dat van hierdie 4 komediante, 0 'n "NEE" sal kry en 4 'n "GO".




Waar - 2 komediante eindig hier:

gini = 0.0 beteken dat al die monsters dieselfde resultaat gekry het.

samples = 2 beteken dat daar 2 komediante in hierdie tak oor is (2 komediante op die ouderdom van 35,5 of jonger).

value = [0, 2]beteken dat van hierdie 2 komediante, 0 'n "NEE" sal kry en 2 'n "GO".

Onwaar - 2 komediante gaan voort:

Ervaring

Experience <= 9.5beteken dat komediante met 9,5 jaar ondervinding, of minder, die pyl na links sal volg, en die res sal die pyl na regs volg.

gini = 0.5beteken dat 50% van die monsters in een rigting sal gaan.

samples = 2beteken dat daar 2 komediante in hierdie tak oor is (2 komediante ouer as 35,5).

value = [1, 1]beteken dat van hierdie 2 komediante, 1 'n "NEE" sal kry en 1 'n "GO".




Waar - 1 komediant eindig hier:

gini = 0.0 beteken dat al die monsters dieselfde resultaat gekry het.

samples = 1beteken dat daar 1 komediant in hierdie tak oor is (1 komediant met 9,5 jaar ondervinding of minder).

value = [0, 1]beteken dat 0 'n "NEE" sal kry en 1 'n "GO".

Onwaar - 1 komediant eindig hier:

gini = 0.0 beteken dat al die monsters dieselfde resultaat gekry het.

samples = 1beteken dat daar 1 komediant in hierdie tak oor is (1 komediant met meer as 9,5 jaar ondervinding).

value = [1, 0]beteken dat 1 'n "NEE" sal kry en 0 'n "GO".


Voorspel waardes

Ons kan die Besluitboom gebruik om nuwe waardes te voorspel.

Voorbeeld: Moet ek 'n program gaan sien met 'n 40-jarige Amerikaanse komediant, met 10 jaar ondervinding, en 'n komedie-ranglys van 7?

Voorbeeld

Gebruik predict() metode om nuwe waardes te voorspel:

print(dtree.predict([[40, 10, 7, 1]]))

Voorbeeld

Wat sou die antwoord wees as die komedie-rang 6 was?

print(dtree.predict([[40, 10, 6, 1]]))


Verskillende resultate

Jy sal sien dat die Besluitboom jou verskillende resultate gee as jy dit genoeg kere hardloop, selfs al voer jy dit met dieselfde data.

Dit is omdat die Besluitboom nie vir ons 'n 100% seker antwoord gee nie. Dit is gebaseer op die waarskynlikheid van 'n uitkoms, en die antwoord sal verskil.