Ushiriki wa Mchakato - Linear Regression

Regresi

Kama unavyofanya kufaa matokeo ya viwango, vitambuliko vya 'regression' vinatumiwa.

In mifumo ya ujumbe na uhariri wa data, matokeo huu hutumika kumaliza matukio ya kina.

线性回归

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

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


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

工作原理

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

在下面的示例中,x 轴表示车龄,y 轴表示速度。我们已经记录了 13 辆汽车通过收费站时的车龄和速度。让我们看看我们收集的数据是否可以用于线性回归:

Mfano

首先绘制散点图:

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

Matokeo:


Inafanya Mfano

Mfano

导入 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):
  kutoweka slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Matokeo:


Inafanya Mfano

例子解释

Kumwambia mazingira ya kumwambia:

import matplotlib.pyplot as plt
from scipy import stats

Kumwambia kwa mazingira ya x na 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]

Kumaliza kufanya maelezo, kama inatoa maelezo ya kurekodia maelezo ya muda wa kusotea:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Kumwambia kwa uwanja wa: slope na intercept Maelezo ya thamani ya kina ya maelezo ya muda wa kusotea inatukia thamani ya kina ya maelezo ya muda wa kusotea ya thamani ya x:

def myfunc(x):
  kutoweka slope * x + intercept

Kumaliza kila thamani ya x na maelezo ya kufikia kina ya maelezo ya muda wa kusotea. Hii itakapotukia maelezo ya muda wa kusotea ya kina ya maelezo ya muda wa kusotea:

mymodel = list(map(myfunc, x))

Kuandaa maelezo ya kurekodia maelezo ya muda wa kusotea:

plt.scatter(x, y)

Kuandaa maelezo ya kurekodia maelezo ya muda wa kusotea:

plt.plot(x, mymodel)

Onyesha picha:

plt.show()

R-Squared

Inahitaji kuwa na ufahamu kina ya mawasiliano ya ukurasa wa x na y, kama hawajafikia mawasiliano, kurekodia maelezo ya muda wa kusotea haikupatikana kumtumia maelezo ya muda wa kusotea kwa kumtumia maelezo ya muda wa kusotea.

Mawasiliano huitumiwa kumtumia maelezo ya r^2 (r-squared).

Marekebisho ya r^2 ina anga 0 hadi 1, kwa 0 inaeleza ukisukumwa na 1 inaeleza 100% ya kusukumwa.

Python na mazingira ya Scipy tunawafanyia maelezo hii, tunahitaji kumkutana na taarifa ya x na y kwa kumkutana na kumtumia:

Mfano

Data yangu ina uharibifu kama kina ya kurekodia maelezo ya muda wa kusotea?

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)

Inafanya Mfano

Kasho:Maelezo ya -0.76 inaeleza kina ya mawasiliano, ingekuwa na mawasiliano yafupi, lakini inaeleza kwamba tunaweza kutumia kurekodia maelezo ya muda wa kusotea kwa maelezo ya muda wa kusotea.

Tukio la maelezo wa muda wa kusotea

Sasa tunaweza kutumia taarifa zilizotumika kumtumia maelezo ya muda wa kusotea.

Kwa mfano: Tukijaribu kumtumia vifaa vya 10 miaka vya umri kumtumia vifaa vya kufikia kasi ya mafanikio ya mafuta.

Kwa hayo, tunahitaji kusaidia kama kina ya maelezo hii: myfunc() Muundo:

def myfunc(x):
  kutoweka slope * x + intercept

Mfano

Tukipendelee kumtumia vifaa vya 10 miaka vya umri kumtumia vifaa vya kufikia kasi ya mafanikio ya mafuta:

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):
  kutoweka slope * x + intercept
speed = myfunc(10)
print(speed)

Inafanya Mfano

Vifaa vya maelezo hivi ni 85.6, nawe naanza kuwakula katika picha hii:


Tukio linalojua?

Tengeneza maelezo, kwa ujumbe wa kurekodia maelezo ya muda wa kusotea hii, ukifanyia ukifungua maelezo ya kirekodia hii bila kumwambie ukingaa maelezo ya muda wa kusotea wa kina.

Mfano

Thamani hizi ya x na y axis itakayofikia kina kina ya urejelea wa kina wa urejelea wa kina kina.

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):
  kutoweka slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Matokeo:


Inafanya Mfano

na thamani ya r-squared?

Mfano

Wewe unatakuwa na thamani ya r-squared ya kina kwa kina kwa kina.

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)

Inafanya Mfano

Matokeo: 0.013 inaeleza kwamba mawasiliano hayafikii, na inafikia kwamba kanda hauwa inayofaa kwa urejelea wa kina.