Machine Learning - Decision Trees


决策树(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

Ba yau, tare da bayanai da za a yi amfani da su, Python za a cikin hanyar yin shirin shirin, wanda za a yi amfani da shi don ganin ko an haɗa cikin wasan kwaikwayo na kara.

Kamfanin hanyar

Kafin hakan, a tsara na'urin da ake bukata, a kuma yi aiki da bayanai tare da pandas:

Masu

Yin aiki da ƙiyayya da kuma yin aiki da bayanai:

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)

Run Masu

Don samun shirin shirin, dukkan data za a ba da adadi.

A bace sabon muhalli da kundin hanyar hana 'Nationality' da 'Go' zuwa nau'ikan adadi.

Pandas an ƙunshi map() Hanyar, wanda ke aminuwar taƙaici, wanda ke da bayanin kowane hanyar taƙaici.

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

Watsa 'UK' zuwa 0, 'USA' zuwa 1, 'N' zuwa 2.

Masu

Yan burin taƙaici ta fassara manyan nau'ikan taƙaici:

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)

Run Masu

Kafin hakan, a bace sabon muhalli da kundin hanyar hana.

sabon muhalli suna da kundin da ake kula da bincike, kundin hanyar hana ce kundin da ake da kowane wuri na bincike.

Masu

X ce sabon muhalli, y ce sabon kundin hanyar hana:

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

Run Masu

Ba yau, aminuwar a za a cikin shirin da ke daidai na, a kuma za a yi wuce .png a kan kompyuter:

Masu

یک درخت تصمیم ایجاد کنید، آن را به عنوان تصویر ذخیره کنید و سپس آن را نمایش دهید:

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

Run Masu

توضیح نتایج

درخت تصمیم از تصمیمات قبلی شما برای محاسبه احتمال اینکه شما بخواهید به نمایش آدم شاعری بروید، استفاده می‌کند.

اجازه دهید به جنبه‌های مختلف درخت تصمیم بخوریم:


Rank

Rank <= 6.5 این نشان می‌دهد که آدم شاعری که درجه آن کمتر از 6.5 است، خواهد پیروی کرد True پیکان (به سمت چپ)، بقیه نیز به همین ترتیب. False پیکان (به سمت راست).

gini = 0.497 این کیفیت تقسیم را نشان می‌دهد و همیشه عددی بین 0.0 تا 0.5 است، جایی که 0.0 نشان‌دهنده این است که تمام نمونه‌ها به نتایج مشابهی دست یافته‌اند، و 0.5 نشان‌دهنده این است که تقسیم کاملاً در وسط انجام شده است.

samples = 13 مما یعنی در این مرحلۀ تصمیم‌گیری هنوز 13 آدم شاعری باقی مانده‌اند، زیرا این اولین مرحلۀ است، بنابراین همه آنها آدم شاعری هستند.

value = [6, 7] مما یعنی از 13 آدم شاعری که در اینجا هستند، 6 تا "NO" خواهند گرفت و 7 تا "GO".

Gini

روش‌های متعددی برای تقسیم نمونه‌ها وجود دارد، ما در این آموزش از روش GINI استفاده می‌کنیم.

روش Gini با استفاده از فرمول زیر استفاده می‌شود:

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

در اینجا، x تعداد پاسخ‌های مثبت ("GO") است، n تعداد نمونه‌ها، و y تعداد پاسخ‌های منفی ("NO") است، و با استفاده از فرمول زیر محاسبه می‌شود:

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


مرحلہ بعدی شامل دو قاب است، یکی برای آدم شاعری که 'Rank' آن 6.5 یا کمتر است، و بقیه یک قاب.

True - 5 تا آدم شاعری اینجا پایان یافته‌اند:

gini = 0.0 مما یعنی تمام نمونه‌ها به نتایج مشابهی دست یافته‌اند.

samples = 5 مما یعنی کاواکوئی 5 تا آدم شاعری با درجہ 6.5 یا کمتر باقی ماندن کاواکوئی.

value = [5, 0] 表示 5 得到 "NO" 而 0 得到 "GO"。

False - 8 位戏剧演员继续:

Nationality(国籍)

Nationality <= 0.5 表示国籍值小于 0.5 的喜剧演员将遵循左箭头(这表示来自英国的所有人),其余的将遵循右箭头。

gini = 0.219 意味着大约 22% 的样本将朝一个方向移动。

samples = 8 表示该分支中还剩下 8 个喜剧演员(8 个喜剧演员的等级高于 6.5)。

value = [1, 7] 表示在这 8 位喜剧演员中,1 位将获得 "NO",而 7 位将获得 "GO"。


True - 4 名戏剧演员继续:

Age(年龄)

Age <= 35.5 表示年龄在 35.5 岁或以下的喜剧演员将遵循左箭头,其余的将遵循右箭头。

gini = 0.375 意味着大约 37.5% 的样本将朝一个方向移动。

samples = 4 表示该分支中还剩下 4 位喜剧演员(来自英国的 4 位喜剧演员)。

value = [1, 3] 表示在这 4 位喜剧演员中,1 位将获得 "NO",而 3 位将获得 "GO"。

False - 4 名喜剧演员到这里结束:

gini = 0.0 Yana nufin cewa duk samfuran sun samu jumla dake cikin.

samples = 4 表示该分支中还剩下 4 位喜剧演员(来自英国的 4 位喜剧演员)。

value = [0, 4] 表示在这 4 位喜剧演员中,0 将获得 "NO",而 4 将获得 "GO"。


True - 2 名喜剧演员在这里结束:

gini = 0.0 Yana nufin cewa duk samfuran sun samu jumla dake cikin.

samples = 2 表示该分支中还剩下 2 名喜剧演员(2 名 35.5 岁或更年轻的喜剧演员)。

value = [0, 2] 表示在这 2 位喜剧演员中,0 将获得 "NO",而 2 将获得 "GO"。

False - 2 名戏剧演员继续:

Experience(经验)

Experience <= 9.5 表示具有 9.5 年或以上经验的喜剧演员将遵循左侧的箭头,其余的将遵循右侧的箭头。

gini = 0.5 表示 50% 的样本将朝一个方向移动。

samples = 2 taɗa ɗauka cewa ɗanin ɗaroma biyu na hukuma hana yin (2 ɗanin ɗaroma na shekarun 35.5 shekaru da ke kai da kai).

value = [1, 1] taɗa ɗauka cewa dukkanin ɗanin ɗaroma na biyu, 1 yace ɗauka "NO", kuma 1 yace ɗauka "GO".


True - 1 ɗanin ɗaroma a hukuma hana yin:

gini = 0.0 Yana nufin cewa duk samfuran sun samu jumla dake cikin.

samples = 1 Yana nufin cewa akwai mutum 1 a cikin yanar da yake da 9.5 shekaru ko fi koyarwa.

value = [0, 1] Yana nufin cewa 0 yana nufin 'NO', 1 yana nufin 'GO'.

False - mutum 1 ya samu hauka har yanzu:

gini = 0.0 Yana nufin cewa duk samfuran sun samu jumla dake cikin.

samples = 1 Yana nufin cewa akwai mutum 1 a cikin yanar da ba a fi 9.5 shekaru koyarwa da yake a cikin.

value = [1, 0] 1 yana nufin 'NO', 0 yana nufin 'GO'.

Nauyin jumla

Ake amfani da kura da kura don kara bayyana nauyin.

Wani misali: Ma'anata ko a gana za a kai shirin komedan da yake shekaru 40, yana da 10 shekaru koyarwa, da yake da ma'aikaciyar komedan da yake da 7?

Masu

Amfani predict() Hanyoyin don kara bayyana nauyin

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

Run Masu

Masu

Idan ma'aikaciyar komedan ce 6, jumlan shi gane ce?

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

Run Masu

Dukkanin Jumla

Idan a ya kai tsawon yawa, kamar yadda ake gudanar da data da yake cikin, kura da kura za a samu dukkanin jumla daga kura da kura.

Ini shine sabonin da za a bayyana a cikin tsarin kura da ba za a samu 100% takaitaccen jumla. Ita ce a kan yanayin yakin ayyukan, jumla zai bambanta.