Python -zelfstudie

Python HOME Python-intro Python Aan de slag Python-syntaxis Python-opmerkingen Python-variabelen Python-gegevenstypen Python-nummers Python-casting Python-snaren Python Booleans Python-operators Python-lijsten Python-tupels Python-sets Python-woordenboeken Python Als...Anders Python While-lussen Python voor lussen Python-functies Python Lambda Python-arrays Python-klassen/objecten Python-overerving Python-iterators Python-bereik Python-modules Python-datums Python-wiskunde Python JSON Python RegEx Python PIP Python proberen...Behalve Python-gebruikersinvoer Opmaak van Python-tekenreeksen

Bestandsbehandeling

Python-bestandsafhandeling Python-bestanden lezen Python bestanden schrijven/maken Python bestanden verwijderen

Python-modules

NumPy-zelfstudie Panda walkthrough Scipy-zelfstudie

Python Matplotlib

Matplotlib Intro Matplotlib Aan de slag Matplotlib Pyplot Matplotlib plotten Matplotlib-markeringen Matplotlib-lijn Matplotlib-labels Matplotlib-raster Matplotlib-subplots Matplotlib Scatter Matplotlib-repen Matplotlib-histogrammen Matplotlib-cirkeldiagrammen

Machinaal leren

Beginnen Gemiddelde mediane modus Standaardafwijking percentiel Gegevensdistributie Normale gegevensverdeling Scatterplot Lineaire regressie Polynomiale regressie Meervoudige regressie Schaal Trein/Test Beslissingsboom

Python MySQL

MySQL Aan de slag MySQL Database maken MySQL-tabel maken MySQL-invoeging MySQL Select MySQL Waar MySQL Bestel op MySQL verwijderen MySQL-droptabel MySQL-update MySQL-limiet MySQL Join

Python MongoDB

MongoDB Aan de slag MongoDB Database maken MongoDB Verzameling maken MongoDB invoegen MongoDB Zoeken MongoDB-query MongoDB Sorteren MongoDB verwijderen MongoDB Drop-collectie MongoDB-update MongoDB-limiet

Python-referentie

Python-overzicht Ingebouwde functies van Python Python-stringmethoden Methoden voor Python-lijst Python-woordenboekmethoden Python Tuple-methoden Methoden voor Python-sets Python-bestandsmethoden Python-trefwoorden Python-uitzonderingen Python-woordenlijst

Modulereferentie

Willekeurige module Verzoekmodule Statistiekmodule Wiskundige module cMath-module

Python-instructies

Lijstduplicaten verwijderen Een string omkeren Voeg twee nummers toe

Python-voorbeelden

Python-voorbeelden Python-compiler Python-oefeningen Python-quiz Python-certificaat

Machine Learning - Beslisboom



Beslissingsboom

In dit hoofdstuk laten we u zien hoe u een "Beslisboom" maakt. Een beslisboom is een stroomschema en kan u helpen beslissingen te nemen op basis van eerdere ervaringen.

In het voorbeeld zal een persoon proberen te beslissen of hij/zij naar een comedyshow moet gaan of niet.

Gelukkig heeft onze voorbeeldpersoon zich elke keer geregistreerd als er een comedyshow in de stad was, en wat informatie over de komiek, en ook geregistreerd of hij/zij ging of niet.

Leeftijd Ervaring Rang Nationaliteit Gaan
36 10 9 VK NEE
42 12 4 VS NEE
23 4 6 N NEE
52 4 4 VS NEE
43 21 8 VS JA
44 14 5 VK NEE
66 3 7 N JA
35 14 9 VK JA
52 13 7 N JA
35 5 9 N JA
24 3 5 VS NEE
18 3 7 VK JA
45 9 9 VK JA

Nu kan Python op basis van deze dataset een beslissingsboom maken die kan worden gebruikt om te beslissen of nieuwe shows de moeite waard zijn om naar te kijken.



Hoe werkt het?

Importeer eerst de modules die je nodig hebt en lees de dataset met panda's:

Voorbeeld

Lees en print de dataset:

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 een ​​beslisboom te maken, moeten alle gegevens numeriek zijn.

We moeten de niet-numerieke kolommen 'Nationaliteit' en 'Go' omzetten in numerieke waarden.

Pandas heeft een map()methode die een woordenboek nodig heeft met informatie over het converteren van de waarden.

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

Betekent: converteer de waarden 'UK' naar 0, 'USA' naar 1 en 'N' naar 2.

Voorbeeld

Verander stringwaarden in numerieke waarden:

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 moeten we de feature- kolommen scheiden van de doelkolom .

De functiekolommen zijn de kolommen waaruit we proberen te voorspellen , en de doelkolom is de kolom met de waarden die we proberen te voorspellen.

Voorbeeld

Xis de functiekolommen, yis de doelkolom:

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

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

print(X)
print(y)

Nu kunnen we de eigenlijke beslisboom maken, deze aanpassen aan onze details en een .png-bestand op de computer opslaan:

Voorbeeld

Maak een beslisboom, sla deze op als afbeelding en toon de afbeelding:

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 uitgelegd

De beslisboom gebruikt uw eerdere beslissingen om de kans te berekenen dat u wel of niet naar een cabaretier wilt gaan.

Laten we de verschillende aspecten van de beslisboom eens doornemen:

Rang

Rank <= 6.5betekent dat elke komiek met een rang van 6.5 of lager de Truepijl (naar links) zal volgen en de rest de Falsepijl (naar rechts).

gini = 0.497 verwijst naar de kwaliteit van de splitsing en is altijd een getal tussen 0,0 en 0,5, waarbij 0,0 zou betekenen dat alle monsters hetzelfde resultaat hebben, en 0,5 zou betekenen dat de splitsing precies in het midden wordt uitgevoerd.

samples = 13 betekent dat er op dit punt in de beslissing nog 13 comedians over zijn, en dat zijn ze allemaal, aangezien dit de eerste stap is.

value = [6, 7] betekent dat van deze 13 comedians 6 een "NEE" krijgen en 7 een "GO".

Gini

Er zijn veel manieren om de samples te splitsen, we gebruiken de GINI-methode in deze tutorial.

De Gini-methode gebruikt deze formule:

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

Waar xis het aantal positieve antwoorden ("GO"), nis het aantal steekproeven en yis het aantal negatieve antwoorden ("NEE"), wat ons deze berekening geeft:

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

De volgende stap bevat twee dozen, een doos voor de comedians met een 'Rank' van 6.5 of lager, en een doos met de rest.

Waar - 5 komieken eindigen hier:

gini = 0.0betekent dat alle monsters hetzelfde resultaat kregen.

samples = 5 betekent dat er nog 5 komieken over zijn in deze branche (5 komieken met een Rank van 6.5 of lager).

value = [5, 0] betekent dat 5 een "NEE" krijgt en 0 een "GO".

False - 8 Comedians Verder:

Nationaliteit

Nationality <= 0.5 betekent dat de comedians met een nationaliteitswaarde van minder dan 0,5 de pijl naar links volgen (wat betekent dat iedereen uit het VK, ), en de rest de pijl naar rechts volgen.

gini = 0.219 betekent dat ongeveer 22% van de monsters in één richting zou gaan.

samples = 8 betekent dat er nog 8 comedians over zijn in deze branche (8 comedians met een Rank hoger dan 6.5).

value = [1, 7] betekent dat van deze 8 comedians, 1 een "NEE" krijgt en 7 een "GO".




Waar - 4 komieken gaan verder:

Leeftijd

Age <= 35.5betekent dat comedians van 35,5 jaar of jonger de pijl naar links volgen en de rest de pijl naar rechts.

gini = 0.375betekent dat ongeveer 37,5% van de monsters in één richting zou gaan.

samples = 4betekent dat er nog 4 comedians over zijn in deze branche (4 comedians uit het VK).

value = [1, 3]betekent dat van deze 4 komieken er 1 een "NEE" krijgt en 3 een "GO".

False - 4 komieken eindigen hier:

gini = 0.0betekent dat alle monsters hetzelfde resultaat kregen.

samples = 4betekent dat er nog 4 comedians over zijn in deze branche (4 comedians niet uit het VK).

value = [0, 4]betekent dat van deze 4 komieken 0 een "NEE" krijgt en 4 een "GO".




Waar - 2 komieken eindigen hier:

gini = 0.0betekent dat alle monsters hetzelfde resultaat kregen.

samples = 2betekent dat er nog 2 cabaretiers over zijn in deze branche (2 cabaretiers van 35,5 jaar of jonger).

value = [0, 2] betekent dat van deze 2 komieken 0 een "NEE" krijgt en 2 een "GO".

False - 2 Comedians Verder:

Ervaring

Experience <= 9.5 betekent dat comedians met 9,5 jaar ervaring of minder de pijl naar links zullen volgen en de rest de pijl naar rechts.

gini = 0.5 betekent dat 50% van de monsters in één richting zou gaan.

samples = 2 betekent dat er nog 2 cabaretiers over zijn in deze branche (2 cabaretiers ouder dan 35.5).

value = [1, 1] betekent dat van deze 2 komieken, 1 een "NEE" krijgt en 1 een "GO".




Waar - 1 komiek eindigt hier:

gini = 0.0betekent dat alle monsters hetzelfde resultaat kregen.

samples = 1 betekent dat er in deze branche nog 1 cabaretier over is (1 cabaretier met 9,5 jaar ervaring of minder).

value = [0, 1] betekent dat 0 een "NEE" krijgt en 1 een "GO".

False - 1 komiek eindigt hier:

gini = 0.0betekent dat alle monsters hetzelfde resultaat kregen.

samples = 1betekent dat er in deze branche nog 1 cabaretier over is (1 cabaretier met meer dan 9,5 jaar ervaring).

value = [1, 0]betekent dat 1 een "NEE" krijgt en 0 een "GO".


Waarden voorspellen

We kunnen de beslisboom gebruiken om nieuwe waarden te voorspellen.

Voorbeeld: Moet ik naar een show gaan met in de hoofdrol een 40-jarige Amerikaanse komiek, met 10 jaar ervaring en een comedy-ranglijst van 7?

Voorbeeld

Gebruik de methode predict() om nieuwe waarden te voorspellen:

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

Voorbeeld

Wat zou het antwoord zijn als de komische rang 6 was?

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


Verschillende resultaten

U zult zien dat de beslisboom u verschillende resultaten geeft als u deze vaak genoeg uitvoert, zelfs als u deze met dezelfde gegevens voedt.

De beslisboom geeft ons namelijk geen 100% zeker antwoord. Het is gebaseerd op de waarschijnlijkheid van een uitkomst en het antwoord zal variëren.