စက်သင်ယူခြင်း - Linear Regression
ဆုတ်ယုတ်မှု
ကိန်းရှင်များကြား ဆက်နွယ်မှုကို သင်ရှာဖွေသောအခါ ဆုတ်ယုတ်ခြင်းဟူသော ဝေါဟာရကို အသုံးပြုသည်။
Machine Learning တွင်၊ နှင့် ကိန်းဂဏန်းစံနမူနာများတွင်၊ ထိုဆက်နွယ်မှုကို အနာဂတ်ဖြစ်ရပ်များ၏ ရလဒ်ကို ခန့်မှန်းရန် အသုံးပြုသည်။
Linear Regression
Linear regression သည် data-points များအကြား ဆက်စပ်မှုကို အသုံးပြုပြီး ၎င်းတို့အားလုံးကို ဖြတ်၍ မျဉ်းဖြောင့်တစ်ခုဆွဲသည်။
အနာဂတ်တန်ဖိုးများကို ခန့်မှန်းရန် ဤစာကြောင်းကို အသုံးပြုနိုင်သည်။
Machine Learning တွင် အနာဂတ်ကို ခန့်မှန်းခြင်းသည် အလွန်အရေးကြီးပါသည်။
ဤအရာဘယ်လိုအလုပ်လုပ်လဲ?
Python တွင် data-points များကြားဆက်စပ်မှုကိုရှာဖွေရန်နှင့် linear regression မျဉ်းဆွဲရန်နည်းလမ်းများရှိသည်။ သင်္ချာဖော်မြူလာကို ဖြတ်သန်းမည့်အစား ဤနည်းလမ်းများကို သင်မည်သို့အသုံးပြုရမည်ကို ပြသပါမည်။
အောက်ပါဥပမာတွင်၊ x-axis သည် အသက်ကိုကိုယ်စားပြုပြီး y-axis သည် speed ကိုကိုယ်စားပြုသည်။ တိုးဂိတ်ကိုဖြတ်သွားစဉ် သက်တမ်းနှင့် အမြန်ယာဉ် ၁၃ စီးကို ကျွန်ုပ်တို့ မှတ်ပုံတင်ထားသည်။ ကျွန်ုပ်တို့စုဆောင်းထားသောဒေတာကို မျဉ်းကြောင်းပြန်ဆုတ်ခြင်းတွင် အသုံးပြုနိုင်မည်လား ၊
ဥပမာ
ဖြန့်ကြဲကွက်တစ်ခုဆွဲခြင်းဖြင့် စတင်ပါ။
import matplotlib.pyplot as plt
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
plt.scatter(x, y)
plt.show()
ရလဒ်:
ဥပမာ
Linear Regression မျဉ်းကို တင်သွင်းပြီး scipy
ဆွဲပါ-
import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
ရလဒ်:
နမူနာရှင်းပြထားပါတယ်။
သင်လိုအပ်သော module များကိုတင်သွင်းပါ။
ကျွန်ုပ်တို့၏ Matplotlib ကျူတိုရီရယ် တွင် Matplotlib module အကြောင်း သင်လေ့လာနိုင်ပါသည် ။
ကျွန်ုပ်တို့၏ SciPy Tutorial တွင် SciPy module အကြောင်း သင်လေ့လာနိုင်ပါသည် ။
import matplotlib.pyplot as plt
from scipy
import stats
x နှင့် y ဝင်ရိုးများ၏ တန်ဖိုးများကို ကိုယ်စားပြုသည့် array များကို ဖန်တီးပါ-
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Linear Regression ၏ အရေးကြီးသောသော့တန်ဖိုးအချို့ကို ပြန်ပေးသည့်နည်းလမ်းကို လုပ်ဆောင်ပါ-
slope, intercept, r,
p, std_err = stats.linregress(x, y)
slope
တန်ဖိုးအသစ်တစ်ခုပြန်စရန် နှင့်
intercept
တန်ဖိုးများကို အသုံးပြုသည့် လုပ်ဆောင်ချက်တစ်ခုကို ဖန်တီးပါ ။ ဤတန်ဖိုးအသစ်သည် y-ဝင်ရိုးပေါ်တွင် သက်ဆိုင်သော x တန်ဖိုးကို ထားရှိမည့်နေရာကို ကိုယ်စားပြုသည်-
def myfunc(x):
return slope * x + intercept
function မှတဆင့် x array ၏တန်ဖိုးတစ်ခုစီကို run ။ ၎င်းသည် y-ဝင်ရိုးအတွက် တန်ဖိုးအသစ်များပါရှိသော array အသစ်ကို ဖြစ်ပေါ်စေလိမ့်မည်-
mymodel = list(map(myfunc, x))
မူရင်း ကွက်လပ်ကို ဆွဲပါ-
plt.scatter(x, y)
linear regression မျဉ်းကိုဆွဲပါ
plt.plot(x, mymodel)
ပုံကြမ်းကို ပြပါ-
plt.show()
ဆက်ဆံရေးအတွက် R
x-axis ၏တန်ဖိုးများနှင့် y-axis တို့၏တန်ဖိုးများကြားတွင် ဆက်စပ်မှုရှိသည်ကို သိရန်အရေးကြီးသည်၊ အကယ်၍ ဆက်နွယ်မှုမရှိပါက linear regression သည် မည်သည့်အရာကိုမျှ ခန့်မှန်းရန်အသုံးမပြုနိုင်ပါ။
ဤဆက်နွယ်မှု - coefficient of correlation - ဟုခေါ်သည်
r
။
တန်ဖိုး သည် r
-1 မှ 1 အထိရှိပါသည်၊ 0 ဆိုသည်မှာ ဆက်စပ်မှုမရှိပါ၊ 1 (နှင့် -1) သည် 100% ဆက်စပ်နေသည်။
Python နှင့် Scipy module သည် သင့်အတွက် ဤတန်ဖိုးကို တွက်ချက်ပေးမည်ဖြစ်ပြီး သင်လုပ်ရန်မှာ ၎င်းကို x နှင့် y တန်ဖိုးများဖြင့် ဖြည့်သွင်းခြင်းဖြစ်သည်။
ဥပမာ
ကျွန်ုပ်၏ဒေတာသည် မျဉ်းဖြောင့်ဆုတ်ယုတ်မှုတွင် မည်မျှ သင့်လျော်သနည်း။
from scipy import stats
x =
[5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
print(r)
မှတ်ချက်- ရလဒ် -0.76 သည် ဆက်စပ်မှုရှိကြောင်း ပြသသည်၊ ပြီးပြည့်စုံသည်မဟုတ်သော်လည်း၊ ကျွန်ုပ်တို့သည် အနာဂတ်ဟောကိန်းများအတွက် linear regression ကို အသုံးပြုနိုင်ကြောင်း ညွှန်ပြပါသည်။
အနာဂတ်တန်ဖိုးများကို ခန့်မှန်းပါ။
ယခု ကျွန်ုပ်တို့စုဆောင်းထားသော အချက်အလက်များကို အနာဂတ်တန်ဖိုးများကို ခန့်မှန်းနိုင်ပါပြီ။
ဥပမာ- ၁၀ နှစ်သား ကားတစ်စီးရဲ့ အမြန်နှုန်းကို ခန့်မှန်းကြည့်ရအောင်။
ထိုသို့ပြုလုပ်ရန်၊ myfunc()
အထက်ဖော်ပြပါ ဥပမာမှ ကျွန်ုပ်တို့သည် တူညီသောလုပ်ဆောင်ချက်ကို လိုအပ်ပါသည်။
def myfunc(x):
return slope * x + intercept
ဥပမာ
အသက် 10 နှစ်ရှိ ကားတစ်စီး၏ အရှိန်ကို ခန့်မှန်းပါ-
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
speed = myfunc(10)
print(speed)
ဥပမာသည် 85.6 တွင် အမြန်နှုန်းကို ခန့်မှန်းထားပြီး၊ ပုံကြမ်းမှလည်း ကျွန်ုပ်တို့ဖတ်ရှုနိုင်သည်-
ကြံ့ခိုင်မှု မကောင်းဘူးလား?
linear regression သည် အနာဂတ်တန်ဖိုးများကို ခန့်မှန်းရန် အကောင်းဆုံးနည်းလမ်းမဟုတ်သည့် ဥပမာတစ်ခုကို ဖန်တီးကြပါစို့။
ဥပမာ
x- နှင့် y-axis အတွက် ဤတန်ဖိုးများသည် linear regression အတွက် အလွန်ဆိုးရွားသော ရလဒ်ဖြစ်သင့်သည်-
import matplotlib.pyplot as plt
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y =
[21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope,
intercept, r, p, std_err = stats.linregress(x, y)
def
myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc,
x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
ရလဒ်:
r
ဆက်ဆံရေးအတွက်လား ။
ဥပမာ
အလွန်နိမ့်သော r
တန်ဖိုးကိုရသင့်သည်။
import numpy
from scipy import stats
x =
[89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y =
[21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
print(r)
ရလဒ်- 0.013 သည် အလွန်ဆိုးရွားသော ဆက်ဆံရေးကို ညွှန်ပြပြီး ဤဒေတာအတွဲသည် မျဉ်းကြောင်းပြန်ဆုတ်ခြင်းအတွက် မသင့်လျော်ကြောင်း ပြောပြသည်။