मशीन शिक्षण - पॉलिनोमियल रिग्रेशन

पॉलिनोमियल रिग्रेशन (Polynomial Regression)

यदि आपके डेटा प्वाइंट्स जाने से अवश्य ही लाइनरी रिग्रेशन (डेटा प्वाइंट्स के बीच की रेखा) के लिए अनुचित हैं, तो पॉलिनोमियल रिग्रेशन आदर्श विकल्प हो सकता है।

एक लिनियर रीग्रेशन के समान, पॉलिनोमियल रीग्रेशन भी वेरियेबल x और y के बीच के संबंध का उपयोग करके डेटा बिंदुओं को लगाने का बेहतर तरीका खोजता है।


कामकाज

Python कुछ तरीके से डेटा बिंदुओं के बीच का संबंध खोजता है और पॉलिनोमियल रीग्रेशन रेखा को चित्रित करता है। हमें इन तरीकों का उपयोग करके, और न माथेमेटिकल फार्मूला के जरिए, दिखाएंगे।

इस उदाहरण में, हमने 18 गाड़ियों को एक विशिष्ट टोल स्टेशन से गुजरने को दर्ज किया है。

हमने गाड़ी की गति और गुजरने के समय (घंटे) को दोनों दर्ज किया है।

x अक्ष एक दिन के घंटों को प्रतिनिधित्व करता है, y अक्ष गति को प्रतिनिधित्व करता है:

उदाहरण

पहले बिंदुओं के चित्र करें:

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

परिणाम:


उदाहरण चलाएं

उदाहरण

आयात करें: 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()

परिणाम:


उदाहरण चलाएं

उदाहरण व्याख्या

आवश्यक मॉड्यूलों को आयात करें:

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-squared) के माध्यम से मापा जाता है。

r^2 की श्रेणी 0 से 1 तक है, जहां 0 असंबंधित को सूचित करता है, और 1 100% संबंध को सूचित करता है。

Python और Sklearn मॉड्यूल इस मान की गणना करेंगे, आपको केवल x और y आयताओं को इनपुट करना है:

उदाहरण

मेरे डेटा की पॉलिनोमियल रीग्रेशन में फिट्नेस कैसी है?

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

उदाहरण चलाएं

टिप्पणी:परिणाम 0.94 बताता है कि अच्छा संबंध है, और हम पॉलिनोमियल रीग्रेशन का उपयोग भविष्य की पूर्वानुमान के लिए कर सकते हैं。

भविष्य की मूल्यों का अनुमान

अब, हम एकत्र करे गए जानकारी का उपयोग करके भविष्य की मूल्यों का अनुमान लगा सकते हैं。

उदाहरण के तौर पर: आइये हम दोपहर 17 बजे के आस-पास टोल पास करने वाली गाड़ी की गति का अनुमान लगाएं:

इसके लिए, हमें ऊपर दिए गए उदाहरण के समान mymodel आयता:

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

उदाहरण

दोपहर 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)

उदाहरण चलाएं

इस के पूर्वावलोकन गति 88.87 है, और हम इसे चित्र में भी देख सकते हैं:


खराब फिट्नेस?

हम एक उदाहरण बनाएंगे जहां पॉलिनोमियल रीग्रेशन भविष्य की मूल्यों का अच्छा अनुमान नहीं लगाने का बेहतर तरीका नहीं है।

उदाहरण

x और y अक्ष के इस वाले मान बहुगुणा रिग्रेसियन के लिए बहुत खराब मेल लगाते है:

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

परिणाम:


उदाहरण चलाएं

r-squared मूल्य क्या है?

उदाहरण

आपको एक बहुत ही कम r-squared मूल्य मिलना चाहिए。

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

उदाहरण चलाएं

परिणाम: 0.00995 निकटता कम है, और हमें बताता है कि यह डाटासेट बहुगुणा रिग्रेसियन के लिए अनुकूल नहीं है。