အက်သုံး - အကြောင်း

Decision Tree (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 |
现在,基于此数据集,Python 可以创建决策树,这个决策树可用于决定是否值得参加任何新的演出。
工作原理
首先,导入所需的模块,并使用 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 ၆.၅ အောက်သော ပြုစုရိုးရာ သင်္ကား ကဲ့သို့ လိုက်နာပါ True
ပြောင်းလဲသည် (အရှေ့ဆိုင်း) ကဲ့သို့ ကျန်သောအရာများ လိုက်နာပါ False
ပြောင်းလဲသည် (ခြေဖျားဆိုင်း)
gini = 0.497
ထို့ကြောင့် အပေါ်လုပ်ငန်း အရေအတွက် ဖြစ်ပြီး အမှတ် ၀.၀ မှ ၀.၅ အထိ ဖြစ်ပြီ၊ ၀.၀ သည် အားလုံးသော ဌာနာ အတိုင်း အတူအတူသော ရလဒ် ရရှိပြီး ၀.၅ သည် အပေါ်လုပ်ငန်း အထိ ကြားကြား ပြီ
samples = 13
ထို့ကြောင့် အဆင့်အတိုင်း ပြုစုရိုးရာ သင်္ကား ၁၃ ဦး ရှိနေပါသည်၊ ထို့ကြောင့် အဆင့်အတိုင်း ပြုစုရိုးရာ သင်္ကား အားလုံး သည် ပြုစုရိုးရာ သင်္ကား ဖြစ်ပါသည်
value = [6, 7]
ထို ၁၃ ဦး ပြုစုရိုးရာ သင်္ကား တွင် ၆ ဦး အတွက် 'NO' ရရှိပြီး ၇ ဦး အတွက် 'GO' ရရှိပါသည်
Gini
အပေါ်လုပ်ငန်း နည်းလမ်းများ အခြား အခြား ရှိပြီ၊ ထို့ကြောင့် ဤ ညွှန်းပြမှုတွင် ဂီတန်း ဘာသာသင်္ချာ အသုံးပြုပါ
အခြေခံ ဘာသာသင်္ချာ အသုံးပြုသော ပုံစံများမှာ အခြား အခြား ရှိပြီ၊ ထို့ကြောင့် ဤ ညွှန်းပြမှုတွင် ဂီတန်း ဘာသာသင်္ချာ အသုံးပြုပါ
Gini = 1 - (x/n)2 - (y/n)2
အရ အောက်ပါ ပုံစံကို အသုံးပြု၍ ခန့်မှန်းကြောင်း ဖော်ပြပါ၊ x သည် အတည်ပြုချက် ("GO") အရ အချက်အရာများ အရေအတွက်၊ n သည် ဌာနာအရေအတွက်၊ y သည် အဆိုးချက် ("NO") အရ အချက်အရာများ အရေအတွက် ဖြစ်သည်။
1 - (7 / 13)2 - (6 / 13)2 = 0.497

နောက်ပိုင်းအစီအစဉ်တွင် နောက်ထပ် ၂ ခု အပေါ်လုပ်ငန်းများ ရှိသည်၊ ထို့ကြောင့် ပြုစုရိုးရာ သင်္ကား အတွက် အပေါ်လုပ်ငန်း ၁ ခု ရှိ၍ 'Rank' ၆.၅ သို့မဟုတ် နည်းပါးသော သင်္ကား အတွက် အပေါ်လုပ်ငန်း အတူပြီ
True - ၅ ဦး ပြုစုရိုးရာ သင်္ကား အခြေအနေကို ပြတ်တလဲ့
gini = 0.0
ထို့ကြောင့် အားလုံးသော ဌာနာများ အတိုင်း အတူအတူသော ရလဒ် ရရှိပါသည်。
samples = 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
表示所有样本都得到相同的结果。
samples = 4
ဒီ အုတ်မှတ်အရ 4 ဆိုင်းသမား (စင်္ကာပူမြောက် 4 ဆိုင်းသမား) ရှိသည်ကို ဖော်ပြသည်。
value = [0, 4]
ဒီ 4 ဆိုင်းသမားများတွင် 0 ယောက်သည် "NO" နှင့် 4 ယောက်သည် "GO" ကို လက်ခံလိမ့်မည်ဖြစ်သည်။

True - 2 ဆိုင်းသမားများ ဒီနေရာမှ ပြီးသွားသည်:
gini = 0.0
表示所有样本都得到相同的结果。
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
ဒီ အုတ်မှတ်အရ 2 ဆိုင်းသမား (2 ယောက် 35.5 နှစ်ကျော် ဆိုင်းသမား) ရှိသည်ကို ဖော်ပြသည်。
value = [1, 1]
ဒီ 2 ဆိုင်းသမားများတွင် 1 ယောက်သည် "NO" နှင့် 1 ယောက်သည် "GO" ကို လက်ခံလိမ့်မည်ဖြစ်သည်။

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