মেকানিক্যাল লার্নিং - পলিনোমিয়াল রিগ্রেশন

পলিনোমিয়াল রিগ্রেশন (Polynomial Regression)

আপনার ডেটা পয়েন্টগুলি স্পষ্টভাবে লিনিয়ার রিগ্রেশন (ডেটা পয়েন্টগুলির মধ্যে পারালিনীয়) যোগ্য না হলে, তাহলে পলিনোমিয়াল রিগ্রেশন হতে পারে সুযোগ্য পদ্ধতি。

লিনিয়ার রিগ্রেশনের মতো, পলিনোমিয়াল রিগ্রেশন x এবং y অক্ষের মধ্যে সম্পর্ক ব্যবহার করে ডাটা পয়েন্টগুলির লাইন আঁকার সর্বোত্তম পদ্ধতি খুঁজে বের করে।


কার্যকারিতা

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

এই উদাহরণে, আমরা 18টি গাড়ির পাশ হওয়াকে রেকর্ড করেছি

আমরা গাড়ির গতি এবং পাশ হওয়ার সময় (ঘণ্টা) রেকর্ড করেছি

x অক্ষ দিনের ঘণ্টা দেখায়, y অক্ষ গতি দেখায়:

Example

প্রথমে স্পট চিত্র আঁকুন:

import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
plt.scatter(x, y)
plt.show()

Result:


Run Instance

Example

আমদানি numpy এবং matplotlibএবং পলিনোমিয়াল রিগ্রেশন লাইন আঁকুন:

import numpy
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 22, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Result:


Run Instance

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

প্রোগ্রামটি আমাদের প্রয়োজনীয় মডিউল আমদানি করুন:

import numpy
import matplotlib.pyplot as plt

x এবং y অক্ষের মান একটি আইনক্ষেত্র তৈরি করুন:

x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]

NumPy-র একটি পদ্ধতি আমাদের পলিনোমিয়াল মডেল তৈরি করার জন্য আছে:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

তারপর, একটি পথ নির্দিষ্ট করুন, আমরা 1 থেকে 22 পর্যন্ত একটি পথ নির্দিষ্ট করি:

myline = numpy.linspace(1, 22, 100)

প্রকল্প দ্রব্যকে আঁকুন:

plt.scatter(x, y)

পলিনোমিয়াল রিগ্রেশন লাইন আঁকুন:

plt.plot(myline, mymodel(myline))

চিত্র দেখান:

plt.show()

R-Squared

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

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

r^2 মানের পরিসর 0 থেকে 1, যেখানে 0 অসংযোগ, 1 মূল্য 100% সংযোগ

Python এবং Sklearn মডিউল এই মানদণ্ড গণনা করবে, আপনাকে কেবল একটি x এবং y আইনক্ষেত্র প্রবেশ করতে হবে:

Example

আমার ডাটা পলিনোমিয়াল রিগ্রেশনের ফিটিং কিভাবে?

import numpy
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))

Run Instance

মন্তব্য:ফলাফল 0.94 দেখায় যে, একটি ভালো সম্পর্ক রয়েছে, যা আমরা ভবিষ্যতের পূর্বাভাসে পলিনোমিয়াল রিগ্রেশন ব্যবহার করতে পারি。

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

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

উদাহরণ: আমরা রাতের 17 ঘণ্টার আশেপাশে চার্জ স্টেশন দিয়ে যাওয়া গাড়ির গতি পূর্বাভাস করতে চাই:

তারজন্য, আমাদের প্রয়োজন উপরের ইনস্ট্যান্সের সমতুল্য mymodel আইনক্ষেত্রে:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Example

পূর্বাভাস: 17 ঘণ্টা পর গাড়ির গতি

import numpy
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
speed = mymodel(17)
print(speed)

Run Instance

এই প্রবন্ধের গতি 88.87, আমরা তাকে চিত্রেও দেখতে পাই:


খারাপ ফিটিং?

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

Example

These values of x and y axes will cause the polynomial regression to fit very poorly:

import numpy
import matplotlib.pyplot as plt
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]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(2, 95, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()

Result:


Run Instance

What is the r-squared value?

Example

You should get a very low r-squared value.

import numpy
from sklearn.metrics import r2_score
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]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))

Run Instance

Result: 0.00995 indicates a very poor relationship and tells us that this dataset is not suitable for polynomial regression.