Machine Learning - Decision Trees
- Nakaraang Pahina Pagsasanay/Pagsusuri
- Susunod na Pahina MySQL Pagpasimula

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)
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)
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)
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()
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]]))
Halimbawa
Kung ang antas ng komedya ay 6, ano ang sagot?
print(dtree.predict([[40, 10, 6, 1]]))
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.
- Nakaraang Pahina Pagsasanay/Pagsusuri
- Susunod na Pahina MySQL Pagpasimula