การเรียนรู้ประมาณ - การเรียนรู้แบบเชื่อมโยง

রিগ্রেশন

আপনি পরিবর্তনশীলতা মধ্যে সম্পর্ক খুঁজার চেষ্টা করার সময়, 'রিগ্রেশন' (regression) শব্দটি ব্যবহৃত হয়。

মেশিন লার্নিং এবং স্ট্যাটিস্টিক্যাল মডেলিংতে, এই সম্পর্কটি ভবিষ্যত ঘটনার ফলাফল পূর্বাভাস দিতে ব্যবহৃত হয়。

线性回归

线性回归使用数据点之间的关系在所有数据点之间画一条直线。

এই লাইনটি ভবিষ্যতের মূল্য পূর্বাভাস করার জন্য ব্যবহার করা যেতে পারে


মেশিন লার্নিংতে, ভবিষ্যত পূর্বাভাস করা খুবই গুরুত্বপূর্ণ

কার্যকারিতা

Python একটি পদ্ধতি প্রদান করে, যা ডাটা পয়েন্টের মধ্যে সম্পর্ক সনাক্ত করে এবং লিনিয়ার রিগ্রেশন লাইন আঁকে। আমরা এই পদ্ধতিকে ম্যাথিমেটিক্যাল ফর্মুলা ব্যবহার না করে দেখাব।

নিচের উদাহরণে, x-এক্সইস গাড়ির বয়স, y-এক্সইস গতি। আমরা ১৩টি গাড়ির বয়স এবং গতি সংগ্রহ করেছি, যা ফেরি স্টেশনে দিয়ে গেছে। আমরা দেখতে পাই যে, আমাদের এসব ডাটা লিনিয়ার রিগ্রেশনের জন্য কিভাবে ব্যবহার করা যায়:

প্রয়োগ

প্রথমে স্পট গ্রাফ আঁকুন:

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

ফলাফল:


প্রয়োগ বিদ্যা

প্রয়োগ

আমদানি করুন: 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()

ফলাফল:


প্রয়োগ বিদ্যা

উদাহরণ ব্যাখ্যা

প্রোগ্রাম সম্প্রসারণ আমদানি করুন:

import matplotlib.pyplot as plt
from scipy import stats

x-এক্সইস এবং y-এক্সইস মানের একটি এক্সইস তৈরি করুন:

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)

একটি ব্যবহার করে তৈরি করুন: slope এবং intercept মানের ফাংশন একটি নতুন মান ফিরিয়ে দেয়, যা প্রতিযোগী x-এক্সইস এর সাথে y-এক্সইস এর স্থান দেখায়:

def myfunc(x):
  return slope * x + intercept

ফাংশন দ্বারা x এক্সইস এর প্রত্যেক মান চালান। এটি একটি নতুন এক্সইস উৎপন্ন করবে, যার মধ্যে y-এক্সইস এর নতুন মান থাকবে:

mymodel = list(map(myfunc, x))

মূল বিন্যাস গ্রাফ আঁকুন:

plt.scatter(x, y)

লিনিয়ার রিগ্রেশন লাইন দ্রব্যবহার করে আঁকুন:

plt.plot(x, mymodel)

চিত্র দেখান:

plt.show()

R-Squared

গুরুত্বপূর্ণ হল যে, x-এক্সইস এবং y-এক্সইস মানের মধ্যে সম্পর্ক কতটা ভালো, যদি কোনও সম্পর্ক না থাকে, তবে লিনিয়ার রিগ্রেশন কোনও কিছুকেই পূর্বাভাস করতে পারবে না

এই সম্পর্কটি একটি নাম দিয়ে r^2 (r-squared) হিসাবে মাপা হয়

r^2 মানের সম্প্রসারণ ০ থেকে ১, ০ মানে একটি সম্পর্ক নেই, ১ মানে ১০০% সম্পর্ক

Python এবং Scipy মডিউল এই মানদণ্ড গণনা করবে, আপনাকে যেমন করতে হবে তা হল, 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 একটি কোনও সম্পর্ক প্রকাশ করে, কিন্তু একটি সম্পূর্ণ সম্পর্ক নয়, কিন্তু তা বলে, আমরা ভবিষ্যতের পূর্বাভাসের জন্য লিনিয়ার রিগ্রেশন ব্যবহার করতে পারি。

ভবিষ্যত মূল্য পূর্বাভাস

এখন, আমরা যাতে ভবিষ্যতের মূল্য পূর্বাভাস করতে পারি, তার জন্য এসব তথ্য সংগ্রহ করা প্রয়োজন

উদাহরণস্বরূপ: আমরা ১০ বছর পুরনো গাড়ির গতি পূর্বাভাস করাকে চেষ্টা করি。

তার জন্য, আমাদের একই উদাহরণের সঙ্গে সমান কিছু প্রয়োজন myfunc() ফাংশন:

def myfunc(x):
  return slope * x + intercept

প্রয়োগ

একটি ১০ বছর পুরনো গাড়ির গতি পূর্বাভাস করুন:

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, আমরা আবার চিত্র থেকেও পড়তে পাই:


খারাপ ফিটন্স?

আমরা একটি উদাহরণ তৈরি করি, যেখানে লিনিয়ার রিগ্রেশন ভবিষ্যত মূল্য পূর্বাভাস করার জন্য শুধুমাত্র শুভ পদ্ধতি নয়。

প্রয়োগ

এই x এবং y-এক্সিসের মানগুলি লিনিয়ার রেগ্রেশনের একটি খুব খারাপ ফিটনেস সৃষ্টি করবে:

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-স্কোয়ারড মান?

প্রয়োগ

আপনি একটি খুব কম র-স্কোয়ারড মান পাবেন

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 একটি খারাপ সম্পর্ক নির্দেশ করে, এবং এই ডাটাসেটটি একক রেগ্রেশনের যোগ্য নয় বলে জানায়。