मशीन लर्निंग - बहुपद प्रतिगमन
बहुपद प्रतिगमन
यदि आपके डेटा बिंदु स्पष्ट रूप से एक रेखीय प्रतिगमन (सभी डेटा बिंदुओं के माध्यम से एक सीधी रेखा) में फिट नहीं होंगे, तो यह बहुपद प्रतिगमन के लिए आदर्श हो सकता है।
बहुपद प्रतिगमन, रैखिक प्रतिगमन की तरह, डेटा बिंदुओं के माध्यम से एक रेखा खींचने का सबसे अच्छा तरीका खोजने के लिए चर x और y के बीच संबंध का उपयोग करता है।
यह कैसे काम करता है?
पायथन में डेटा-बिंदुओं के बीच संबंध खोजने और बहुपद प्रतिगमन की एक रेखा खींचने के तरीके हैं। हम आपको दिखाएंगे कि गणित के फार्मूले के बजाय इन विधियों का उपयोग कैसे करें।
नीचे दिए गए उदाहरण में, हमने 18 कारों को पंजीकृत किया है क्योंकि वे एक निश्चित टोल बूथ से गुजर रही थीं।
हमने कार की गति दर्ज की है, और दिन का समय (घंटा) गुजर रहा है।
एक्स-अक्ष दिन के घंटों का प्रतिनिधित्व करता है और वाई-अक्ष गति का प्रतिनिधित्व करता है:
उदाहरण
स्कैटर प्लॉट बनाकर शुरू करें:
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()
परिणाम:
उदाहरण समझाया गया
आपको आवश्यक मॉड्यूल आयात करें।
आप हमारे NumPy ट्यूटोरियल में NumPy मॉड्यूल के बारे में जान सकते हैं ।
आप हमारे SciPy ट्यूटोरियल में SciPy मॉड्यूल के बारे में जान सकते हैं ।
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]
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()
आर चुकता
यह जानना महत्वपूर्ण है कि x- और y-अक्ष के मानों के बीच संबंध कितना अच्छा है, यदि कोई संबंध नहीं है तो बहुपद प्रतिगमन का उपयोग किसी भी चीज़ की भविष्यवाणी करने के लिए नहीं किया जा सकता है।
संबंध को r-वर्ग नामक मान से मापा जाता है।
r-वर्ग मान 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 PM पर गुजरने वाली कार की गति का अनुमान लगाएं:
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-वर्ग मान मिलना चाहिए।
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 एक बहुत खराब संबंध को इंगित करता है, और हमें बताता है कि यह डेटा सेट बहुपद प्रतिगमन के लिए उपयुक्त नहीं है।