Mafaa ya Kusafirisha cha Kuzalika - Mabomu ya Kikuria


决策树(Decision Tree)

在本章中,我们将向您展示如何制作“决策树”。决策树是一种流程图,可以帮助您根据以前的经验进行决策。

在这个例子中,一个人将尝试决定他/她是否应该参加喜剧节目。

幸运的是,我们的例中人物每次在镇上举办喜剧节目时都进行注册,并注册一些关于喜剧演员的信息,并且还登记了他/她是否去过。

Age Experience 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

Sasa, kwa kawaida na kikata hiki, Python anaweza kumwiza mabaki mafanikio, hii mabaki mafanikio inaweza kutumiwa kuamua au hatuamua kujaingia katika kila shindano ya mtaani ya kila siku.

Maadili

Kwanza, inafaa kuingia kwenye moduli yenye uzalishaji, na kutumia pandas kusoma kikata:

Mfano

Kusoma na kupima kikata:

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)

Mfano wa mafunzo

Kuwaingia katika mabaki mafanikio, tabia zote lazima zikuwa namba.

Lazima tuweza kubadilisha mabaki ya maandiko ya 'Nationality' na 'Go' kuwa thamani za namba.

Pandas ina map() Mwendo, hii inapokea dhamira yenye taarifu kuhusu maelezo ya badilisha thamani.

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

Ina maana kwamba thamani 'UK' inatumiwa kama 0, thamani 'USA' inatumiwa kama 1, na thamani 'N' inatumiwa kama 2.

Mfano

Badilisha thamani za maandiko kuwa thamani za namba:

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)

Mfano wa mafunzo

Kisha, lazima tuweza kugawaza mabaki ya uwanja na mabaki ya jumuiya.

Mabaki ya uwanja ni mabaki ambayo hatutafikia kutumia maelezo, mabaki ya jumuiya ni mabaki yanayotumika kutumia maelezo.

Mfano

X ni mabaki ya uwanja, y ni mabaki ya jumuiya:

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

Mfano wa mafunzo

Sasa, tunaweza kumwiza mabaki mafanikio ya maelezo, kisha kugawaza faili .png kwenye kompyuta:

Mfano

Tengeneza mti wa hatua mwenye kuzalisha picha, kusafisha picha hii na kuonyesha picha hii:

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

Mfano wa mafunzo

Muhtasari wa matokeo

Mti wa hatua umeenda kwenye hatua zako zilizokuwa kulia kuagiza unaweza kuwa na uhusiano na wana wakweli wa kizungu.

Tunafikia mabaki ya mti wa hatua:


Rank

Rank <= 6.5 Ina yaani wana wakweli wanao upangilio chini ya 6.5 wanaofuata: True Mshale (kutoka nchini), na nyingine inafua False Mshale (kutoka nchini).

gini = 0.497 Ina yaani kina ya samata, ina kwa uangalifu 0.0 hadi 0.5, 0.0 ina yaani matokeo yote ya kumtaarifu yana uhusiano wote, na 0.5 ina yaani uhusiano unafuliana kati.

samples = 13 Ina yaani kati ya kumfuata hatua hii ina heri wana wakweli 13, kwa sababu hii ni kuzalisha, wote wana wakweli wanao.

value = [6, 7] Ina yaani kati ya 13 wana wakweli wana 6 wanaotumia "NO", na 7 wanaotumia "GO".

Gini

Makhusa ya samata inayotumiwa sana, tunatumiya mbinu ya GINI kwenye mafunzo hii.

Makhusa ya Gini inatumia mbinu inayotumiwa:

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

Kwa sababu, x ni thamani ya jibu za kawaida ("GO"), n ni kiasi cha samata, y ni thamani ya jibu za huzuni ("NO"), inaeneza uagizaji wa kitendo kilichotumika:

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


Mchezo iliyofuwa una mabaki mbili, moja ya wana wakweli kwa upangilio 'Rank' wa 6.5 au chini, nyingine ina mabaki moja.

True - 5 wana wakweli hapa hufikia:

gini = 0.0 Ina yaani matokeo yote ya kumtaarifu yana uhusiano wote.

samples = 5 Ina yaani hii kooza ina heri wana wakweli wa kizungu wana 5 wanao (5 wanao wamekuwa na daraja la 6.5 au chini la kizungu).

value = [5, 0] Inaeleza kwamba 5 ina "NO" na 0 ina "GO".

False - 8 mtaalamu wa kudramu hapa inakamilika:

Nationality (wataki)

Nationality <= 0.5 Inaeleza kwamba wakikomedy wanao thamani ya wataki wanaotumiwa kwa chapa ya kushoto (hii inamaanisha wote wa UK), wengine watakuwa na hatua kwa chapa ya kulia.

gini = 0.219 Inaeleza kwamba kwa wastani 22% ya matokeo yatakuwa na hatua kwa njia moja.

samples = 8 Inaeleza kwamba katika kama hii inahesabiwa 8 wakikomedy (8 wanao daraja juu ya 6.5).

value = [1, 7] Inaeleza kwamba kati ya 8 wakikomedy hizi, 1 itakuwa na "NO" na 7 itakuwa na "GO".


True - 4 mtaalamu wa kudramu hapa inakamilika:

Age (umri)

Age <= 35.5 Inaeleza kwamba wakikomedy wanao umri wa 35.5 wa kudogo sana watakuwa na hatua kwa chapa ya kushoto, wengine watakuwa na hatua kwa chapa ya kulia.

gini = 0.375 Inaeleza kwamba kwa wastani 37.5% ya matokeo yatakuwa na hatua kwa njia moja.

samples = 4 Inaeleza kwamba katika kama hii inahesabiwa 4 wakikomedy (4 wanao taa UK).

value = [1, 3] Inaeleza kwamba kati ya 4 wakikomedy hizi, 1 itakuwa na "NO" na 3 itakuwa na "GO".

False - 4 mtaalamu wa kikomedy hapa inakamilika:

gini = 0.0 inaonyesha kwamba mabaya yote yana matokeo yoyote yanaonekana kwa uangalifu.

samples = 4 Inaeleza kwamba katika kama hii inahesabiwa 4 wakikomedy (4 wanao taa UK).

value = [0, 4] Inaeleza kwamba kati ya 4 wakikomedy hizi, 0 itakuwa na "NO" na 4 itakuwa na "GO".


True - 2 mtaalamu wa kikomedy hapa inakamilika:

gini = 0.0 inaonyesha kwamba mabaya yote yana matokeo yoyote yanaonekana kwa uangalifu.

samples = 2 Inaeleza kwamba katika kama hii inahesabiwa 2 mtaalamu wa kikomedy (2 wanao umri wa 35.5 wa kudogo sana).

value = [0, 2] Inaeleza kwamba kati ya wakikomedy hizi, 0 itakuwa na "NO" na 2 itakuwa na "GO".

False - 2 mtaalamu wa kudramu hapa inakamilika:

Experience (taaluma)

Experience <= 9.5 Inaeleza kwamba wakikomedy wanao taaluma 9.5 wanao wanaotumiwa kama maelezo kwa chapa ya kushoto, wengine wanaotumiwa kwa chapa ya kulia.

gini = 0.5 Inaeleza kwamba 50% ya matokeo yatakuwa na hatua kwa njia moja.

samples = 2 Inaeleza kwamba katika kama hii inahesabiwa 2 mtaalamu wa kikomedy (2 wana umri wa kipya na kikomedy wanao juu ya 35.5).

value = [1, 1] Inaeleza kwamba kati ya wakikomedy hizi, 1 itakuwa na "NO" na 1 itakuwa na "GO".


True - 1 mtaalamu wa kikomedy hapa inayofunga:

gini = 0.0 inaonyesha kwamba mabaya yote yana matokeo yoyote yanaonekana kwa uangalifu.

samples = 1 inaonyesha kwamba kwenye mabaya hii inahusiana na mwigizaji wa komedi mmoja (mwigozi wa komedi na miaka 9.5 au chini).

value = [0, 1] inaonyesha kwamba 0 inaonyesha 'HAPA' na 1 inaonyesha 'NA'.

False - mwigizaji wa komedi mmoja kwenye hali hii:

gini = 0.0 inaonyesha kwamba mabaya yote yana matokeo yoyote yanaonekana kwa uangalifu.

samples = 1 inaonyesha kwamba kwenye mabaya hii inahusiana na mwigizaji wa komedi mmoja (mwigozi wa komedi na miaka 9.5 au zaidi).

value = [1, 0] 1 inaonyesha 'HAPA' na 0 inaonyesha 'NA'.

Matokeo ya kuwa matokeo

Tunaweza kutumia mabaya wa mabara kumwambia matokeo mpya.

Mfano: Ninaonesha kuwa ninaonesha programu inayotumia mwigizaji wa komedi wa miaka 40 wa kigeni na miaka 10 ya uwanja wa komedi, na ukadiri wa komedi ni 7?

Mfano

Kutumia predict() Makosa ya kumwambia matokeo mpya:

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

Mfano wa mafunzo

Mfano

Kama ukadiri wa komedi ni 6, nani ni?

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

Mfano wa mafunzo

Matokeo tofauti

Kama inafanya mara nyingi kwa pana, tena inaingia data yako, mabaya wa mabara yanaoweza kumwambia matokeo tofauti.

Hii ni kwa sababu mabaya wa mabara hawakuweza kumwambia taarifa 100% za kuweza. Inaendelea kwa ufikiaji wa matokeo, inaendelea kwa matokeo tofauti.