मशीन लर्निंग - लीनियर रिग्रेशन

रिग्रेशन

जब आप वेरिएबल के बीच संबंध पाने की कोशिश करते हैं तो, इसके लिए शब्द “रिग्रेशन” (regression) उपयोग में लाया जाता है。

मशीन लर्निंग और स्टैटिस्टिकल मॉडलिंग में, यह संबंध भविष्य घटनाओं के परिणाम की भविष्यवाणी के लिए उपयोग किया जाता है。

线性回归

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

这条线可以用来预测未来的值。


在机器学习中,预测未来非常重要。

工作原理

Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。我们将向您展示如何使用这些方法而不是通过数学公式。

在下面的示例中,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()

परिणाम:


उदाहरण चलाएं

例子解释

导入所需模块:

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)

创建一个使用 slopeintercept 值的函数返回新值。这个新值表示相应的 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 अक्ष के मानों के बीच का संबंध कितना अच्छा है, अगर कोई संबंध नहीं है, तो लीनियर रीग्रेशन कोई भी अनुमान नहीं लगाने के लिए उपयोग नहीं किया जा सकता。

इस संबंध को र^2 (r-squared) के मान से मापा जाता है。

r^2 की श्रेणी 0 से 1 तक है, जहां 0 असंबद्धता को सूचित करता है और 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-squared मूल्य?

उदाहरण

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

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 बहुत खराब संबंध सूचित करता है और हमें बताता है कि डाटा सेट लिनियर रिग्रेसियन के लिए अनुकूल नहीं है。