XML ວິກິດສະຖານນີ


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

ປະຈຸບັນພວກເຮົາສາມາດສ້າງຕົວແທນຂັ້ນຕັດສິນພາຍໃນຂໍ້ມູນຊຸມຂະບວນນີ້ທີ່ສາມາດນຳໃຊ້ເພື່ອຕັດສິນວ່າຈະມີຄວາມສຳຄັນໃນການເຂົ້າຮ່ວມການສະແດງບັນດາການສະແດງໃໝ່ຫຼືບໍ່:

ວິທີການດຳເນີນການ:

ກ່ອນນັ້ນພວກເຮົາຕ້ອງໄດ້ສະເໜີສະມາຊິກທີ່ຈຳເປັນແລະເອົາຂໍ້ມູນຊຸມຂະບວນທີ່ຈະອ່ານໃຊ້ pandas:

实例

ອ່ານແລະບັນທຶກຂໍ້ມູນຊຸມຂະບວນ:

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)

运行实例

ເພື່ອສ້າງຕົວແທນຂັ້ນຕັດສິນທີ່ຕົງກັບລະບຸຂອງພວກເຮົາທັງໝົດຕ້ອງແມ່ນຈຳນວນ:

ພວກເຮົາຕ້ອງໄດ້ແຕ່ງອີງຕາມການຄົ້ນຄວ້າຂອງການຄົ້ນຄວ້າທີ່ບໍ່ແມ່ນຈຳນວນຂອງ 'Nationality' ແລະ 'Go':

Pandas ມີ map() ກົນລະຍຸດນີ້ຍິນຍອມກັບສະໂມສອນທີ່ມີຂໍ້ມູນກ່ຽວກັບວິທີການປ່ຽນຄູ່ມູນ:

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

ສະແດງວ່າປ່ຽນຄູ່ 'UK' ເປັນ 0, 'USA' ເປັນ 1, 'N' ເປັນ 2.

实例

ປ່ຽນຄູ່ມູນຄຳຕາມການຄົ້ນຄວ້າ:

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)

运行实例

ຫຼັງຈາກນັ້ນພວກເຮົາຕ້ອງໄດ້ແຕ່ງອີງຕາມການຄົ້ນຄວ້າການຄົ້ນຄວ້າຂອງອີງຕາມການຄົ້ນຄວ້າ:

ອີງຕາມການຄົ້ນຄວ້າການຄົ້ນຄວ້າຂອງພວກເຮົາຕັ້ງໃສ່ອີງຕາມການຄົ້ນຄວ້າທີ່ມີຄຸນນະພາບທີ່ພວກເຮົາຕ້ອງການຄົ້ນຄວ້າຢູ່ນອກຂອງອີງຕາມການຄົ້ນຄວ້າ:

实例

X ແມ່ນອີງຕາມການຄົ້ນຄວ້າ ຢູ່ນອກຂອງອີງຕາມການຄົ້ນຄວ້າ y ແມ່ນອີງຕາມການຄົ້ນຄວ້າ:

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

运行实例

ປະຈຸບັນພວກເຮົາສາມາດສ້າງຕົວແທນຂັ້ນຕັດສິນຄຳຕັດສິນທີ່ຕົງກັບລະບຸຂອງພວກເຮົາແລະບັນທຶກໃນຄອມພິວເຕີ້ເປັນບົດຮູບ .png:

实例

ສ້າງຮູບແບບຕັດຕິດ, ບັນທຶກຫຼັງເປັນຮູບ, ແລະສະແດງຮູບນັ້ນ.

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

运行实例

ການອະທິບາຍຜົນຕາຍ

ຮູບແບບຕັດຕິດຈະນຳໃຊ້ການຕັດຕິດທີ່ມີກ່ອນໃຫ້ທັງໝົດຈະຄາດວ່າພວກເຈົ້າຈະຈະເຂົ້າຮັບປະຊຸມນັກສະແດງສຽງປະຈຳ.

ພວກເຮົາຈະອ່ານການພິສູດຂອງຮູບແບບການຕັດຕິດ.


Rank

Rank <= 6.5 ສະນັ້ນກ່າວວ່ານັກສະແດງສຽງທີ່ 'Rank' 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 = 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 ຄົນ (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 ຈະໄດ້ "NO" ແລະ 7 ຈະໄດ້ "GO"


ບໍ່ມີ - 4 ນັກສະແດງທາງໂລກສືບຕໍ່

Age (ອາຍຸ)

Age <= 35.5 ສະແດງວ່ານັກສະແດງຄຳບັນຍາບັນນາງອາຍຸຫຼາຍກວ່າ 35.5 ປີຈະຕິດຕາມທາງປັດສະນີທີ່ຊ້າຍ ແລະຄົນອື່ນຈະຕິດຕາມທາງຊ້າຍ

gini = 0.375 ຫມາຍວ່າປະມານ 37.5% ຂອງຂໍ້ມູນຈະເຄື່ອນທິດໄປໃນທິດທາງໜຶ່ງ

samples = 4 ສະແດງວ່າຢູ່ໃນພັນທະບັດນີ້ຍັງມີ 4 ນັກສະແດງຄຳບັນຍາບັນນາງ (4 ນັກສະແດງຄຳບັນຍາບັນນາງຈາກອັງກິດ)

value = [1, 3] ສະແດງວ່າສະແດງນັກສະແດງຄຳບັນຍາບັນນາງນີ້ 1 ຈະໄດ້ "NO" ແລະ 3 ຈະໄດ້ "GO"

ບໍ່ມີ - 4 ນັກສະແດງຄຳບັນຍາບັນນາງຢູ່ບ່ອນນີ້

gini = 0.0 表示所有样本都得到相同的结果。

samples = 4 ສະແດງວ່າຢູ່ໃນພັນທະບັດນີ້ຍັງມີ 4 ນັກສະແດງຄຳບັນຍາບັນນາງ (4 ນັກສະແດງຄຳບັນຍາບັນນາງຈາກອັງກິດ)

value = [0, 4] ສະແດງວ່າສະແດງນັກສະແດງຄຳບັນຍາບັນນາງນີ້ 4 ຈະໄດ້ "NO" ແລະ 4 ຈະໄດ້ "GO"


ບໍ່ມີ - 2 ນັກສະແດງຄຳບັນຍາບັນນາງຢູ່ບ່ອນນີ້

gini = 0.0 表示所有样本都得到相同的结果。

samples = 2 ສະແດງວ່າຢູ່ໃນພັນທະບັດນີ້ຍັງມີ 2 ນັກສະແດງຄຳບັນຍາບັນນາງ (2 ນັກສະແດງຄຳບັນຍາບັນນາງອາຍຸ 35.5 ປີຫຼາຍຫຼືບໍ່)

value = [0, 2] ສະແດງວ່າສອງນັກສະແດງຄຳບັນຍາບັນນາງນີ້ 0 ຈະໄດ້ "NO" ແລະ 2 ຈະໄດ້ "GO"

ບໍ່ມີ - 2 ນັກສະແດງທາງໂລກສືບຕໍ່

Experience (ປະສົບການ)

Experience <= 9.5 ສະແດງວ່ານັກສະແດງຄຳບັນຍາບັນນາງທີ່ມີປະສົບການ 9.5 ປີຫຼາຍຈະຕິດຕາມໄປທາງປັດສະນີທີ່ຊ້າຍ ແລະຄົນອື່ນຈະຕິດຕາມທາງຊ້າຍ

gini = 0.5 ສະແດງວ່າ 50% ຂອງຂໍ້ມູນຈະເຄື່ອນທິດໄປໃນທິດທາງໜຶ່ງ

samples = 2 ສະແດງວ່າຢູ່ໃນພັນທະບັດນີ້ຍັງມີ 2 ນັກສະແດງຄຳບັນຍາບັນນາງ (2 ນັກສະແດງຄຳບັນຍາບັນນາງອາຍຸຫຼາຍກວ່າ 35.5)

value = [1, 1] ສະແດງວ່າສອງນັກສະແດງຄຳບັນຍາບັນນາງນີ້ 1 ຈະໄດ້ "NO" ແລະ 1 ຈະໄດ້ "GO"


ບໍ່ມີ - 1 ນັກສະແດງຄຳບັນຍາບັນນາງຢູ່ບ່ອນນີ້

gini = 0.0 表示所有样本都得到相同的结果。

samples = 1 表示此分支中还剩下 1 名喜剧演员(1 名具有 9.5 年或以下经验的喜剧演员)。

value = [0, 1] 表示 0 表示 "NO",1 表示 "GO"。

False - 1 名喜剧演员到这里为止:

gini = 0.0 表示所有样本都得到相同的结果。

samples = 1 表示此分支中还剩下 1 位喜剧演员(其中 1 位具有超过 9.5 年经验的喜剧演员)。

value = [1, 0] 表示 1 表示 "NO",0 表示 "GO"。

预测值

我们可以使用决策树来预测新值。

例如:我是否应该去看一个由 40 岁的美国喜剧演员主演的节目,该喜剧演员有 10 年的经验,喜剧排名为 7?

实例

使用 predict() 方法来预测新值:

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

运行实例

实例

如果喜剧等级为 6,答案是什么?

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

运行实例

不同的结果

如果运行足够多次,即使您输入的数据相同,决策树也会为您提供不同的结果。

这是因为决策树无法给我们 100% 的肯定答案。它基于结果的可能性,答案会有所不同。