मशीन लर्निंग - लीनियर रिग्रेशन
वापसी
प्रतिगमन शब्द का प्रयोग तब किया जाता है जब आप चरों के बीच संबंध खोजने का प्रयास करते हैं।
मशीन लर्निंग में, और सांख्यिकीय मॉडलिंग में, उस संबंध का उपयोग भविष्य की घटनाओं के परिणाम की भविष्यवाणी करने के लिए किया जाता है।
रेखीय प्रतिगमन
रैखिक प्रतिगमन उन सभी के माध्यम से एक सीधी रेखा खींचने के लिए डेटा-बिंदुओं के बीच संबंध का उपयोग करता है।
इस रेखा का उपयोग भविष्य के मूल्यों की भविष्यवाणी करने के लिए किया जा सकता है।
मशीन लर्निंग में, भविष्य की भविष्यवाणी करना बहुत महत्वपूर्ण है।
यह कैसे काम करता है?
पायथन में डेटा-बिंदुओं के बीच संबंध खोजने और रैखिक प्रतिगमन की एक रेखा खींचने के तरीके हैं। हम आपको दिखाएंगे कि गणित के फार्मूले के बजाय इन विधियों का उपयोग कैसे करें।
नीचे दिए गए उदाहरण में, x-अक्ष आयु का प्रतिनिधित्व करता है, और y-अक्ष गति का प्रतिनिधित्व करता है। हमने 13 कारों की उम्र और गति दर्ज की है क्योंकि वे एक टोल बूथ से गुजर रही थीं। आइए देखें कि क्या हमारे द्वारा एकत्र किया गया डेटा एक रेखीय प्रतिगमन में उपयोग किया जा सकता है:
उदाहरण
स्कैटर प्लॉट बनाकर शुरू करें:
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()
परिणाम:
उदाहरण समझाया गया
आपको आवश्यक मॉड्यूल आयात करें।
आप हमारे Matplotlib ट्यूटोरियल में Matplotlib मॉड्यूल के बारे में जान सकते हैं ।
आप हमारे SciPy ट्यूटोरियल में 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)
एक नया मान वापस करने के लिए slope
और
मानों का उपयोग करने वाला फ़ंक्शन बनाएं । intercept
यह नया मान दर्शाता है कि y-अक्ष पर संगत x मान कहाँ रखा जाएगा:
def myfunc(x):
return slope * x + intercept
फ़ंक्शन के माध्यम से x सरणी के प्रत्येक मान को चलाएँ। यह y-अक्ष के लिए नए मानों के साथ एक नई सरणी में परिणत होगा:
mymodel = list(map(myfunc, x))
मूल स्कैटर प्लॉट ड्रा करें:
plt.scatter(x, y)
रैखिक प्रतिगमन की रेखा खींचे:
plt.plot(x, mymodel)
आरेख प्रदर्शित करें:
plt.show()
रिश्ते के लिए आर
यह जानना महत्वपूर्ण है कि x-अक्ष के मानों और y-अक्ष के मानों के बीच संबंध कैसा है, यदि कोई संबंध नहीं है तो रैखिक प्रतिगमन का उपयोग किसी भी चीज़ की भविष्यवाणी करने के लिए नहीं किया जा सकता है।
यह संबंध - सहसंबंध का गुणांक - कहलाता है
r
।
r
मान -1 से 1 तक होता है, जहां 0 का अर्थ कोई संबंध नहीं है, और 1 (और -1) का अर्थ 100% संबंधित है ।
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 दर्शाता है कि एक संबंध है, परिपूर्ण नहीं है, लेकिन यह इंगित करता है कि हम भविष्य की भविष्यवाणियों में रैखिक प्रतिगमन का उपयोग कर सकते हैं।
भविष्य के मूल्यों की भविष्यवाणी करें
अब हम भविष्य के मूल्यों की भविष्यवाणी करने के लिए एकत्रित की गई जानकारी का उपयोग कर सकते हैं।
उदाहरण: आइए हम एक 10 वर्ष पुरानी कार की गति का अनुमान लगाने का प्रयास करें।
ऐसा करने के लिए, हमें 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 की गति की भविष्यवाणी की, जिसे हम आरेख से भी पढ़ सकते हैं:
खराब फिट?
आइए एक उदाहरण बनाएं जहां भविष्य के मूल्यों की भविष्यवाणी करने के लिए रैखिक प्रतिगमन सबसे अच्छा तरीका नहीं होगा।
उदाहरण
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
रिश्ते के लिए?
उदाहरण
आपको बहुत कम 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 एक बहुत खराब संबंध को इंगित करता है, और हमें बताता है कि यह डेटा सेट रैखिक प्रतिगमन के लिए उपयुक्त नहीं है।