Machine Learning - Decision Trees


Decision Tree (Decision Tree)

Sa kaniyang kabanata, ipapakita namin kung paano gumawa ng 'Decision Tree'. Ang Decision Tree ay isang flowchart na makakatulong sa iyo sa pagdesisyon base sa sa iyong nakaraang karanasan.

Sa ito ang halimbawa, ang isang tao ay susubukang desidyer kung dapat siya sumali sa comedy show.

Sa aming halimbawa, ang tau sa aming halimbawa ay nag-registro sa bawat pagdiriwang ng comedy show sa bayan, at nag-registro ng ilang impormasyon tungkol sa aktor ng comedy, at ipinapalista kung siya ay napasok o hindi.

Edad Ating karanasan 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

Ngayon, base sa dataset na ito, maaaring gumawa ang Python ng desisyon tree, na maaring gamitin upang desisyonin kung magiging karapat-dapat o hindi ang sumali sa anumang bagong pagtatanghal.

Kung paano gumana

Unang-una, ilagay ang mga kinakailangang module, at gamitin ang pandas upang basahin ang dataset:

Halimbawa

Basahin at iprint ang 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)

Pagsasaklaw ng Halimbawa

Para gumawa ng desisyon tree, dapat na ang lahat ng data ay numero.

Kailangan naming i-convert ang mga hindi numerong linya 'Nationality' at 'Go' sa numero.

Mayroon sa Pandas ang map() Ang paraan, na tumanggap ng diyaryo na naglalaman ng impormasyon kung paano ma-convert ang mga halaga.

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

Ibig sabihin, ilipat ang halaga 'UK' sa 0, 'USA' sa 1, at 'N' sa 2.

Halimbawa

Gawin ang mga string na halaga bilang numero:

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)

Pagsasaklaw ng Halimbawa

Pagkatapos, kailangan naming hiwalayin ang linya ng mga katangian at ang linya ng layunin.

Ang linya ng mga katangian ay ang mga linya na aming sinisikap makapagbalyo, at ang linya ng layunin ay ang mga linya na may mga halaga na aming sinisikap makapagbalyo.

Halimbawa

X ay linya ng mga katangian, at y ay linya ng layunin:

features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
print(X)
print(y)

Pagsasaklaw ng Halimbawa

Ngayon, maaaring gumawa tayo ng tunay na desisyon tree, na angkop sa aming detalye, at i-save sa kompyuter ang isang .png file:

Halimbawa

Lumikha ng isang desisyon tree, i-save sa pinta, at ipakita ang pinta:

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

Pagsasaklaw ng Halimbawa

Paliwanag ng Resulta

Ang desisyon tree ay gumagamit ng mga dating desisyon mo upang kalkulahin ang probabilidad mo na magdaragang pumunta sa aktor ng komedya.

Hayaan natin basahin ang iba't ibang aspeto ng desisyon tree:


Rank

Rank <= 6.5 Naglalarawan na ang mga aktor ng komedya na may 'Rank' na mas mababa sa 6.5 ay sinusundan True Punla (punta sa kaliwa), at ang iba ay sinusundan False Punla (punta sa kanan).

gini = 0.497 Naglalarawan na ang kalidad ng paghahati, at palaging ang isang numero sa pagitan ng 0.0 hanggang 0.5, kung saan ang 0.0 ay nangangahulugan na ang lahat ng sample ay nagkaroon ng kaparehong resulta, at ang 0.5 ay nangangahulugan na ang paghahati ay ganap na sa gitna.

samples = 13 Naglalarawan na mayroon pang 13 na aktor ng komedya sa punto ng desisyon na ito, dahil ito ay ang unang hakbang, kaya lahat ng kanila ay aktor ng komedya.

value = [6, 7] Naglalarawan na sa 13 na aktor ng komedya, 6 sa kanila ay magkakaroon ng "NO", at 7 sa kanila ay magkakaroon ng "GO".

Gini

Mayroong maraming paraan para sa paghahati ng sample, at sa kasalukuyang tutorial na ito ay gumagamit ng sistema ng GINI.

Ang sistema ng Gini ay gumagamit ng sumusunod na formula:

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

Kung saan, ang x ay ang bilang ng positibong sagot ("GO"), ang n ay ang bilang ng sample, at ang y ay ang bilang ng negatibong sagot ("NO"), na kung saan ay ginamit ang sumusunod na formula para sa pagtutuos:

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


Ang susunod na hakbang ay may dalawang kahon, ang isa ay para sa aktor ng komedya na may 'Rank' na 6.5 o mas mababa, at ang iba ay isang kahon.

True - 5 na aktor ng komedya ang tapusin dito:

gini = 0.0 Naglalarawan na ang lahat ng mga sample ay nagkaroon ng kaparehong resulta.

samples = 5 Naglalarawan na mayroon pang 5 na aktor ng komedya sa sangay na ito (ang antas ng 5 ay 6.5 o mas mababa sa komedya).

value = [5, 0] Nangangahulugan na 5 ay makakakuha ng "NO" at 0 ay makakakuha ng "GO".

False - 8 na aktor sa drama ay patuloy:

Nationality (lihi)

Nationality <= 0.5 Nangangahulugan na ang aktor na may nationality na mas mababa sa 0.5 ay sumusunod sa kaliwang talusok (ang ibig sabihin, lahat na taga-Inglaterra), ang iba ay sumusunod sa kanang talusok.

gini = 0.219 Nangangahulugan na humigit-kumulang 22% ng mga sample ay maglalakad sa isang direksyon.

samples = 8 Nangangahulugan na sa sangay na ito mayroon pang walong aktor sa komedyang (walong aktor na may grado na higit sa 6.5).

value = [1, 7] Nangangahulugan na sa walong aktor sa komedyang ito, 1 ay makakakuha ng "NO", at 7 ay makakakuha ng "GO".


True - 4 na aktor sa drama ay patuloy:

Age (edad)

Age <= 35.5 Nangangahulugan na ang aktor na may edad na 35.5 taon o mas mababa ay sumusunod sa kaliwang talusok, ang iba ay sumusunod sa kanang talusok.

gini = 0.375 Nangangahulugan na humigit-kumulang 37.5% ng mga sample ay maglalakad sa isang direksyon.

samples = 4 Nangangahulugan na sa sangay na ito mayroon pang 4 na aktor sa komedyang (4 na aktor na taga-Inglaterra).

value = [1, 3] Nangangahulugan na sa apat na aktor sa komedyang ito, 1 ay makakakuha ng "NO", at 3 ay makakakuha ng "GO".

False - 4 na aktor sa komedyang dito nagtapos:

gini = 0.0 Nangangahulugan na lahat ng mga sample ay nagkakapareho na mga resulta.

samples = 4 Nangangahulugan na sa sangay na ito mayroon pang 4 na aktor sa komedyang (4 na aktor na taga-Inglaterra).

value = [0, 4] Nangangahulugan na sa apat na aktor sa komedyang ito, 0 ay makakakuha ng "NO", at 4 ay makakakuha ng "GO".


True - 2 na aktor sa komedyang dito nagtapos:

gini = 0.0 Nangangahulugan na lahat ng mga sample ay nagkakapareho na mga resulta.

samples = 2 Nangangahulugan na sa sangay na ito mayroon pang 2 na aktor sa komedyang (2 na aktor na may edad na 35.5 taon o mas mababa).

value = [0, 2] Nangangahulugan na sa dalawang aktor sa komedyang ito, 0 ay makakakuha ng "NO", at 2 ay makakakuha ng "GO".

False - 2 na aktor sa drama ay patuloy:

Experience (karanasan)

Experience <= 9.5 Nangangahulugan na ang aktor na may 9.5 taon o higit na karanasan ay sumusunod sa kaliwang talusok, ang iba ay sumusunod sa kanang talusok.

gini = 0.5 Nangangahulugan na 50% ng mga sample ay maglalakad sa isang direksyon.

samples = 2 Nangangahulugan na sa sangay na ito mayroon pang 2 na aktor sa komedyang (2 na aktor na may edad na higit sa 35.5).

value = [1, 1] Nangangahulugan na sa dalawang aktor sa komedyang ito, 1 ay makakakuha ng "NO", at 1 ay makakakuha ng "GO".


True - 1 na aktor sa komedyang dito nagtapos:

gini = 0.0 Nangangahulugan na lahat ng mga sample ay nagkakapareho na mga resulta.

samples = 1 Nangangahulugan na mayroon pang 1 aktor ng komedya sa pangkat na ito (1 aktor na may 9.5 taon o mas mababa na karanasan sa komedya).

value = [0, 1] Nangangahulugan na 0 ay nangangahulugan ng "HINDI", 1 ay nangangahulugan ng "YES".

False - 1 aktor ng komedya hanggang sa ito:

gini = 0.0 Nangangahulugan na lahat ng mga sample ay nagkakapareho na mga resulta.

samples = 1 Nangangahulugan na mayroon pang 1 aktor ng komedya sa pangkat na ito (1 aktor na may higit sa 9.5 taong karanasan sa komedya).

value = [1, 0] 1 ay nangangahulugan ng "HINDI", 0 ay nangangahulugan ng "YES".

Halaga ng paghuhula

Maaari naming gamitin ang punung-bagong punung-bagong desisyon na kahoy upang hulaan ang bagong halaga.

Halimbawa: Dapat ba ako upang pumunta sa isang programa na pinangungunahan ng isang 40-taong gulang na Amerikanong aktor ng komedya na may 10 taong karanasan, na may 7 na antas ng komedya?

Halimbawa

Gamitin predict() Para sa paghuhula ng bagong halaga:

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

Pagsasaklaw ng Halimbawa

Halimbawa

Kung ang antas ng komedya ay 6, ano ang sagot?

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

Pagsasaklaw ng Halimbawa

Iba-ibang mga sagot

Kung pinalakas na magpapatuloy, kahit na ang iyong ipinasok na data ay magkapareho, ang punung-bagong punung-bagong desisyon na kahoy ay magbibigay ng iba-iba na mga resulta.

Ito ay dahil ang punung-bagong punung-bagong desisyon na kahoy ay hindi makakapagbigay ng 100% na sigurado na sagot. Ito ay base sa posibilidad ng mga resulta, ang sagot ay magiging iba-iba.