Machine Learning - Polynomial Regression

Polynomial Regression

Kung ang iyong data point ay malinaw na hindi angkop sa linear regression (nagbabalik sa pagitan ng data points), ang polinomyal regression ay maaaring maging pinakamahusay na opsyon.

像线性回归一样,多项式回归使用变量 x 和 y 之间的关系来找到绘制数据点线的最佳方法。


Tulad ng linear regression, gamit ang relasyon ng mga variable x at y, ang polinomial regression ay gumagamit ng pinakamahusay na paraan para makita ang linya na magpapakita ng data points.

Mga prinsipyo ng paggawa

Mayroong ilang mga paraan ang Python upang makita ang relasyon ng mga data point at magpakita ng linya ng polinomial regression. Magiging ipinapakita naming kung paano gamitin ang mga pamamaraan na ito sa halip na sa pamamagitan ng mga formula ng matematika.

Sa mga sumusunod na halimbawa, nagtala kami ng 18 sasakyan na nagpasa sa isang partikular na tarhanti.

Narekord na namin ang bilis ng sasakyan at ang oras ng pagpasa (oras sa araw).

Halimbawa

Ang axis ng x ay nangangahulugan ng oras sa isang araw, ang axis ng y ay nangangahulugan ng bilis:

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

Resulta:


Paggamit ng Halimbawa

Halimbawa

Unang magpakita ng scatter plot: Iimpor numpy AtMatapos iimpor ang 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()

Resulta:


Paggamit ng Halimbawa

Pagsasali ng halimbawa

Iimpor ang mga kinakailangang module:

import numpy
import matplotlib.pyplot as plt

Lumikha ng array na naglalarawan ng halaga ng x at y axis:

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]

May isang paraan ang NumPy na makakapaglunsad ng modelo ng polinomial:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Pagkatapos, tukuyin ang paraan ng pagpapakita ng linya, mula sa posisyon 1 hanggang posisyon 22:

myline = numpy.linspace(1, 22, 100)

Pakita ang orihinal na scatter plot:

plt.scatter(x, y)

Pakita ang linya ng polinomial regression:

plt.plot(myline, mymodel(myline))

Ipakita ang larawan:

plt.show()

R-Squared

Mahalaga na malaman kung gaano kagandang relasyon ang mayroon sa mga halaga ng x at y axis, kung walang relasyon, ang polinomial regression ay hindi maaring gamitin upang makita ang 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 Sklearn ay magkakaroon ng pagkalkula ng halaga na iyo lang kailangan na ipasok ang array ng x at y:

Halimbawa

Paano ang pagtutugma ng aking data sa polinomial regression?

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

Paggamit ng Halimbawa

Komento:Ang resulta na 0.94 ay nagpapakita na may magandang relasyon, at makikita naming gamitin ang polinomial regression sa hinaharap na mga pagpredict.

Pagpredict ng hinaharap na halaga

Ngayon, masasagawa naming makita ang hinaharap na halaga gamit ang napakolekta na impormasyon.

Halimbawa: Subukin naming makita ang bilis ng sasakyan sa palibot ng alas-17 ng gabi sa tarhanti:

Para dito, kailangan naming magkaroon ng katulad ng halimbawa sa itaas: mymodel Array:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Halimbawa

Tinataya ang bilis ng sasakyan sa alas-17 ng hapon:

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)

Paggamit ng Halimbawa

Ang pagpredict ng bilis ng modelo ay 88.87, at makikita rin natin ito sa larawan:


Masama ang pagtutugma?

Hinihiling naming lumikha ng isang halimbawa kung saan ang polinomial regression ay hindi ang pinakamahusay na paraan para makita ang mga hinaharap na halaga.

Halimbawa

Ang mga halaga ng x at y axis na ito ay magiging napakababa ang kalinawan ng pagkakasabay ng pananaliksik na polinomial:

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

Resulta:


Paggamit ng Halimbawa

Ano ang r-squared value?

Halimbawa

Dapat mong makakuha ng napakababang halaga ng r-squared.

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

Paggamit ng Halimbawa

Resulta: 0.00995 ay nangangahulugang mababang relasyon, at nagsasabi na ang datoset ay hindi maganda para sa pananaliksik na polinomial.