Linear Regression ng Machine Learning

Regression

Kapag tinatangka mo na matagpuan ang relasyon ng mga variable, ginamit ang termino na 'regression' (pagbalik).

Sa paggamit ng machine learning at statistical modeling, ang relasyon na ito ay ginamit upang hulaan ang resulta ng mga hinaharap na pangyayari.

Paghahati sa paghahati

Ang paghahati sa paghahati ay gumagamit ng relasyon ng puntos ng datos upang magpinta ng isang linya sa lahat ng puntos ng datos.

Ang linya na ito ay maaaring gamitin upang hulaan ang hinaharap na halaga.


Sa machine learning, ang paghuhula sa hinaharap ay napakahalaga.

Prinsipyo ng paggawa

Ang Python ay nagbibigay ng ilang mga paraan upang hanapin ang relasyon ng puntos ng datos at ipakita ang linya ng paghahati sa paghahati. Ibibigay namin sa iyo kung paano gamitin ang mga paraan na ito sa halip na sa pamamagitan ng mga formula ng matematika.

Sa mga sumusunod na halimbawa, ang x-axis ay nangangahulugan ng taong karanasan ng sasakyan, ang y-axis ay nangangahulugan ng bilis. Naiulat namin ang taong karanasan at bilis ng 13 sasakyan na nagpasa sa toll booth. Tulungan namin ninyo kung ang aking datos ay maaaring gamitin para sa paghahati sa paghahati:

Halimbawa

Una, ipakita ang larawan ng puntos:

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

Ang resulta:


Paggamit ng Halimbawa

Halimbawa

Buwan ng pagkakabit ng scipy at ipakita ang linya ng paghahati sa paghahati:

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

Ang resulta:


Paggamit ng Halimbawa

Halimbawa ng paliwanag

Buwan ng pagkakabit ng kinakailangan na module:

import matplotlib.pyplot as plt
from scipy import stats

Buwan ng pagkakakilanlan ng array ng halaga ng x at y sa axis:

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]

Ipagawa ng isang paraan, na ibibigay ng isang paraan na ibibigay ng ilang mahalagang key-value ng paghahati sa paghahati:

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

Buwan ng paggamit ng slope at intercept Ang function ng halaga ay nagbibigay ng bagong halaga. Ang bagong halaga na ito ay nangangahulugan na ang katugmang halaga ay ilalagay sa y-axis sa katumbas ng katugmang halaga ng x:

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

Ihulog ang bawat halaga ng array ng x sa function. Ito ay magbibigay ng isang bagong array, kung saan ang y-axis ay may bagong halaga:

mymodel = list(map(myfunc, x))

Ipipinta ang orihinal na larawan ng puntos:

plt.scatter(x, y)

Ipipinta ang linya ng paghahati sa paghahati:

plt.plot(x, mymodel)

Ipakita ang larawan:

plt.show()

R-Squared

Mahalaga na malaman kung gaano kagandahang may relasyon ang halaga ng x at y sa axis, kung walang relasyon, ang paghahati sa paghahati ay hindi maaaring gamitin upang hulaan anumang bagay.

Ang relasyon ay nangangalaga ng isang halaga na tinatawag na r-squared (r-squared).

Ang saklaw ng r-squared ay 0 hanggang 1, kung saan 0 ay nangangahulugan na walang relasyon, at 1 ay nangangahulugan na 100% na relasyon.

Ang Python at ang module ng Scipy ay magkakaroon ng pagkalkula ng halaga para sa iyo, ang iyong kailangan lamang ay ibigay ang halaga ng x at y sa kanila:

Halimbawa

Paano ang katugmang ng aking datos sa paghahati sa paghahati sa paghahati?

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)

Paggamit ng Halimbawa

Komentaryo:Ang resulta na -0.76 ay nagpapakita na may relasyon, ngunit hindi ganap na relasyon, ngunit nagpapakita din na maaari naming gamitin ang paghahati sa paghahati sa paghuhula sa hinaharap.

Paghuhula ng hinaharap na halaga

Ngayon, maaari naming gamitin ang napansin na impormasyon upang hulaan ang hinaharap na halaga.

Halimbawa: Subukan naming hulaan ang bilis ng isang sasakyan na may 10 taong kasaysayan.

Para dito, kailangan namin ang katulad na myfunc() Function:

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

Halimbawa

Paghuhula ng bilis ng isang sasakyan na may 10 taong karanasan:

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)

Paggamit ng Halimbawa

Ang paghuhula ng bilis ay 85.6, at maaari din naming basahin ito mula sa larawan:


Masama ang paghahati sa paghahati?

Haginggapos na gumawa ng isang halimbawa, kung saan ang paghahati sa paghahati ay hindi ang pinakamahusay na paraan para sa paghuhula sa hinaharap na halaga.

Halimbawa

Ang mga halaga ng x at y axis na ito ay magiging dahilan ng napakalalang katugma ng pagbabalikbasa ng haba ng linya:

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

Ang resulta:


Paggamit ng Halimbawa

at ang r-squared na halaga?

Halimbawa

Dapat mo nang makakuha ng napakamababang r-squared na halaga.

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)

Paggamit ng Halimbawa

Ang resulta: 0.013 ay nangangahulugan na ang relasyon ay napakalala, at sinasabi na ang datoset ay hindi nararapat sa pagbabalikbasa ng haba ng linya.