စက်သင်ယူခြင်း - ဆုံးဖြတ်ချက်သစ်ပင်
ဆုံးဖြတ်ချက်သစ်ပင်
ဒီအခန်းမှာ "Decision Tree" လုပ်နည်းကို သင်ပြပါမယ်။ Decision Tree သည် Flow Chart တစ်ခုဖြစ်ပြီး ယခင်အတွေ့အကြုံကို အခြေခံ၍ ဆုံးဖြတ်ချက်များချရာတွင် ကူညီပေးနိုင်ပါသည်။
ဥပမာတွင်၊ လူတစ်ဦးသည် သူ/သူမသည် ဟာသရှိုးတစ်ခုသို့ သွားသင့်သည် သို့မဟုတ် မသွားရန် ဆုံးဖြတ်ရန် ကြိုးစားမည်ဖြစ်သည်။
ကံကောင်းစွာပင် ကျွန်ုပ်တို့၏ စံနမူနာပြပုဂ္ဂိုလ်သည် မြို့၌ ဟာသရှိုးပွဲတိုင်းတွင် စာရင်းသွင်းထားပြီး လူရွှင်တော်နှင့်ပတ်သက်သည့် အချက်အလက်အချို့ကို စာရင်းသွင်းကာ သူ/သူမသွားသည်ဖြစ်စေ၊
အသက် | အတွေ့အကြုံ | အဆင့် | လူမျိုးစု | သွားတော့ |
၃၆ | ၁၀ | ၉ | ယူကေ | မဟုတ်ဘူး |
၄၂ | ၁၂ | ၄ | ယူအက်စ်အေ | မဟုတ်ဘူး |
၂၃ | ၄ | ၆ | ဎ | မဟုတ်ဘူး |
၅၂ | ၄ | ၄ | ယူအက်စ်အေ | မဟုတ်ဘူး |
၄၃ | ၂၁ | ၈ | ယူအက်စ်အေ | ဟုတ်သည်။ |
၄၄ | ၁၄ | ၅ | ယူကေ | မဟုတ်ဘူး |
၆၆ | ၃ | ၇ | ဎ | ဟုတ်သည်။ |
၃၅ | ၁၄ | ၉ | ယူကေ | ဟုတ်သည်။ |
၅၂ | ၁၃ | ၇ | ဎ | ဟုတ်သည်။ |
၃၅ | ၅ | ၉ | ဎ | ဟုတ်သည်။ |
၂၄ | ၃ | ၅ | ယူအက်စ်အေ | မဟုတ်ဘူး |
၁၈ | ၃ | ၇ | ယူကေ | ဟုတ်သည်။ |
၄၅ | ၉ | ၉ | ယူကေ | ဟုတ်သည်။ |
ယခု၊ ဤဒေတာအတွဲအပေါ်အခြေခံ၍ Python သည် ရှိုးအသစ်တစ်ခုခုကို တက်ရောက်ရန်ထိုက်တန်ခြင်းရှိမရှိ ဆုံးဖြတ်ရန် အသုံးပြုနိုင်သည့် ဆုံးဖြတ်ချက်သစ်ပင်ကို ဖန်တီးနိုင်သည်။
ဤအရာဘယ်လိုအလုပ်လုပ်လဲ?
ပထမဦးစွာ သင်လိုအပ်သော မော်ဂျူးများကို တင်သွင်းပြီး ပန်ဒါများဖြင့် ဒေတာအစုံကို ဖတ်ပါ-
ဥပမာ
ဒေတာအစုံကို ဖတ်ပြီး ပရင့်ထုတ်ပါ-
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 <= 6.5
အဆင့် 6.5 သို့မဟုတ် အောက်ရှိ လူရွှင်တော်တိုင်းသည်
True
မြှား (ဘယ်ဘက်သို့) လိုက်မည်ဖြစ်ပြီး ကျန်သူများသည် False
မြှား (ညာဘက်သို့) လိုက်သွားမည်ဖြစ်သည်။
gini = 0.497
ခွဲထွက်ခြင်း၏ အရည်အသွေးကို ရည်ညွှန်းပြီး 0.0 နှင့် 0.5 အကြားရှိ ကိန်းဂဏန်းတစ်ခုဖြစ်ပြီး 0.0 သည် နမူနာများအားလုံး တူညီသောရလဒ်ကို ဆိုလိုပြီး 0.5 သည် ခွဲခြမ်းကို အလယ်တွင် အတိအကျလုပ်ဆောင်သည်ဟု ဆိုလိုသည်။
samples = 13
ဆိုလိုတာက ဒီဆုံးဖြတ်ချက်မှာ လူရွှင်တော် ၁၃ ယောက် ကျန်သေးတယ်၊ ဒါက ပထမအဆင့်ဆိုတော့ အားလုံးပဲလေ။
value = [6, 7]
ဆိုလိုတာက ဒီလူရွှင်တော် ၁၃ ယောက်ထဲက ၆ ယောက်က "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
နောက်တစ်ဆင့်တွင် သေတ္တာနှစ်လုံး၊ အဆင့် 6.5 သို့မဟုတ် အောက်ရှိသော လူရွှင်တော်များအတွက် ဘောက်စ်တစ်ခု၊ ကျန်တစ်ပုံးပါရှိသည်။
အမှန် - လူရွှင်တော် 5 ဦး ဤတွင်အဆုံးသတ်ပါ။
gini = 0.0
ဆိုလိုတာက နမူနာတွေ အားလုံး တူညီတဲ့ ရလဒ်ကို ရခဲ့တယ်။
samples = 5
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 5 ဦး ကျန်ခဲ့သည် (အဆင့် 6.5 သို့မဟုတ် အောက် လူရွှင်တော် 5 ဦး)။
value = [5, 0]
ဆိုလိုသည်မှာ 5 သည် "NO" နှင့် 0 "GO" ရရှိမည်ဖြစ်သည်။
အတုအယောင် - 8 လူရွှင်တော်များ ဆက်ရန်-
လူမျိုးစု
Nationality <= 0.5
ဆိုလိုသည်မှာ 0.5 ထက်နည်းသော နိုင်ငံသားတန်ဖိုးရှိသော လူရွှင်တော်များသည် ဘယ်ဘက်သို့ မြှားနောက်လိုက်မည် (ဆိုလိုသည်မှာ UK မှလူတိုင်း၊ ) နှင့် ကျန်သူများသည် ညာဘက်သို့ မြှားနောက်သို့လိုက်သွားမည်ဖြစ်သည်။
gini = 0.219
နမူနာများ ၏ 22% ခန့်သည် လမ်းကြောင်းတစ်ခုတည်းသို့ ရောက်သွားသည်ဟု ဆိုလိုသည်။
samples = 8
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 8 ဦး ကျန်ခဲ့သည် (အဆင့် 6.5 ထက်မြင့်သော လူရွှင်တော် 8 ဦး)။
value = [1, 7]
ဆိုလိုတာက ဒီလူရွှင်တော် ၈ ယောက်မှာ ၁ ယောက်က "NO" နဲ့ 7 က "GO" ရလိမ့်မယ်။
True - 4 လူရွှင်တော်များ ဆက်ရန်:
အသက်
Age <= 35.5
ဆိုလိုတာက အသက် 35.5 နှစ်အောက် လူရွှင်တော်တွေဟာ ဘယ်ဘက် မြှားကို လိုက်ကြပြီး ကျန်သူတွေက ညာဘက်မှာ မြှားနောက်ကို လိုက်ကြမယ်လို့ ဆိုလိုတာပါ။
gini = 0.375
ဆိုလိုတာက နမူနာတွေရဲ့ ၃၇.၅% လောက်က လမ်းကြောင်းတစ်ခုတည်းကို ရောက်သွားမယ်။
samples = 4
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 4 ဦး ကျန်ခဲ့သည် ( UK မှ လူရွှင်တော် 4 ဦး ) ။
value = [1, 3]
ဆိုလိုတာက ဒီလူရွှင်တော် ၄ ယောက်ထဲက ၁ ယောက်က "NO" နဲ့ 3 ယောက်က "GO" ရလိမ့်မယ်။
အတုအယောင် - လူရွှင်တော် 4 ဦး ဤတွင်အဆုံးသတ်ပါ။
gini = 0.0
ဆိုလိုတာက နမူနာတွေ အားလုံး တူညီတဲ့ ရလဒ်ကို ရခဲ့တယ်။
samples = 4
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 4 ယောက် ကျန်ခဲ့သည် ( UK မှမဟုတ်သော လူရွှင်တော် 4 ယောက်)။
value = [0, 4]
ဆိုလိုတာက ဒီလူရွှင်တော် ၄ ယောက်ထဲက 0 က "NO" နဲ့ 4 ယောက် "GO" ရလိမ့်မယ်။
အမှန် - လူရွှင်တော် 2 ဦး ဤတွင်အဆုံးသတ်ပါ။
gini = 0.0
ဆိုလိုတာက နမူနာတွေ အားလုံး တူညီတဲ့ ရလဒ်ကို ရခဲ့တယ်။
samples = 2
ဆိုလိုတာက ဒီဌာနခွဲမှာ လူရွှင်တော် ၂ ယောက် ကျန်ခဲ့တယ် (အသက် ၃၅.၅ နှစ်အောက် လူရွှင်တော် ၂ ယောက်)။
value = [0, 2]
ဆိုလိုတာက ဒီလူရွှင်တော် ၂ ယောက်ထဲက 0 က "NO" နဲ့ 2 ယောက် "GO" ရလိမ့်မယ်။
အတုအယောင် - 2 လူရွှင်တော်များ ဆက်ရန်-
အတွေ့အကြုံ
Experience <= 9.5
အတွေ့အကြုံ 9.5 နှစ် သို့မဟုတ် ထိုထက်နည်းသော လူရွှင်တော်များသည် ဘယ်ဘက်သို့ မြှားနောက်သို့ လိုက်မည်ဖြစ်ပြီး ကျန်သူများသည် ညာဘက်သို့ မြှားနောက်သို့ လိုက်သွားမည်ဖြစ်ကြောင်း ဆိုလိုသည်။
gini = 0.5
ဆိုလိုသည်မှာ နမူနာများ၏ 50% သည် လမ်းကြောင်းတစ်ခုတည်းသို့ ရောက်သွားသည်ဟု ဆိုလိုသည်။
samples = 2
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် ၂ ဦး ကျန်ခဲ့သည် (၃၅.၅ နှစ်ထက်ကြီးသော လူရွှင်တော် ၂ ဦး)။
value = [1, 1]
ဆိုလိုတာက ဒီလူရွှင်တော် ၂ ယောက်မှာ ၁ ယောက်က "NO" နဲ့ 1 က "GO" ရလိမ့်မယ်။
အမှန် - လူရွှင်တော် 1 ဦး ဤနေရာတွင် အဆုံးသတ်သည်-
gini = 0.0
ဆိုလိုတာက နမူနာတွေ အားလုံး တူညီတဲ့ ရလဒ်ကို ရခဲ့တယ်။
samples = 1
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 1 ဦး ကျန်သည် (အတွေ့အကြုံ 9.5 နှစ်နှင့် အောက် လူရွှင်တော် 1 ဦး)။
value = [0, 1]
ဆိုလိုတာက 0 က "NO" ရပြီး 1 က "GO" ရလိမ့်မယ်။
အတုအယောင် - လူရွှင်တော် 1 ဦး ဤနေရာတွင် အဆုံးသတ်သည်-
gini = 0.0
ဆိုလိုတာက နမူနာတွေ အားလုံး တူညီတဲ့ ရလဒ်ကို ရခဲ့တယ်။
samples = 1
ဆိုလိုသည်မှာ ဤဌာနခွဲတွင် လူရွှင်တော် 1 ဦး ကျန်သည် (အတွေ့အကြုံ 9.5 နှစ်ကျော်ရှိသော လူရွှင်တော် 1 ဦး) ဖြစ်သည်။
value = [1, 0]
ဆိုလိုသည်မှာ 1 သည် "NO" နှင့် 0 "GO" ကိုရရှိမည်ဖြစ်သည်။
တန်ဖိုးများကို ခန့်မှန်းပါ။
တန်ဖိုးအသစ်များကို ခန့်မှန်းရန် Decision Tree ကို ကျွန်ုပ်တို့ အသုံးပြုနိုင်ပါသည်။
ဥပမာ- အတွေ့အကြုံ 10 နှစ်ရှိ အသက် 40 နှစ်ရှိ အမေရိကန်လူရွှင်တော်တစ်ဦးနှင့် ဟာသအဆင့် 7 ဖြင့် သရုပ်ဆောင်ထားသော ရှိုးကို ကျွန်ုပ်သွားကြည့်သင့်ပါသလား။
ဥပမာ
တန်ဖိုးအသစ်များကို ခန့်မှန်းရန် predict() method ကိုသုံးပါ-
print(dtree.predict([[40, 10, 7, 1]]))
ဥပမာ
ဟာသအဆင့် 6 ဖြစ်ခဲ့လျှင် အဖြေကဘာလဲ။
print(dtree.predict([[40, 10, 6, 1]]))
မတူညီသောရလဒ်များ
အကယ်၍ သင်သည် ၎င်းအား တူညီသောဒေတာဖြင့် ကျွေးမွေးထားလျှင်ပင် ၎င်းကို အကြိမ်အလုံအလောက်လုပ်ဆောင်ပါက Decision Tree သည် သင့်အား မတူညီသောရလဒ်များ ပေးသည်ကို သင်တွေ့ရပါမည်။
အဘယ်ကြောင့်ဆိုသော် Decision Tree သည် ကျွန်ုပ်တို့အား 100% တိကျသေချာသော အဖြေမပေးသောကြောင့်ဖြစ်သည်။ ၎င်းသည် ရလဒ်တစ်ခု၏ဖြစ်နိုင်ခြေအပေါ်အခြေခံပြီး အဖြေကွဲပြားမည်ဖြစ်သည်။