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% 的肯定答案。它基于结果的可能性,答案会有所不同。