Polinomial regressiya
Polinomli regressiya
Agar sizning ma’lumotlar nuqtalaringiz chiziqli regressiyaga (barcha ma’lumotlar nuqtalari orqali to‘g‘ri chiziq) mos kelmasa, u polinom regressiyasi uchun ideal bo‘lishi mumkin.
Polinomli regressiya, xuddi chiziqli regressiya kabi, ma’lumotlar nuqtalari orqali chiziq chizishning eng yaxshi usulini topish uchun x va y o‘zgaruvchilari o‘rtasidagi munosabatdan foydalanadi.
U qanday ishlaydi?
Python-da ma’lumotlar nuqtalari orasidagi munosabatni topish va polinom regressiya chizig‘ini chizish usullari mavjud. Biz sizga matematik formuladan o‘tish o‘rniga ushbu usullardan qanday foydalanishni ko‘rsatamiz.
Quyidagi misolda biz 18 ta mashinani ma’lum bir pullik kassadan o‘tayotganda listga oldik.
Biz mashinaning tezligini va o‘tish sodir bo‘lgan kunning vaqtini (soatini) qayd etdik.
X o‘qi kunning soatlarini, y o‘qi esa tezlikni ifodalaydi:
Misol
Tarqalish chizmasini chizish bilan boshlang:
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()
Natija:

Misol
numpyva matplotlibni import qiling, keyin Polinom regressiya chizig‘ini chizing:
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()
Natija:

Misol tushuntirildi
Sizga kerak bo‘lgan modullarni import qiling.
NumPy moduli haqida bizning NumPy o‘quv qo‘llanmamizdan bilib olishingiz mumkin.
SciPy moduli haqida bizning SciPy o‘quv qo‘llanmamizdan bilib olishingiz mumkin.
import numpy
import matplotlib.pyplot as plt
X va y o‘qlarining qiymatlarini ifodalovchi massivlarni yarating:
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]
NumPy-da polinom modelini yaratishga imkon beruvchi usul mavjud:
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
Keyin chiziq qanday ko‘rinishini belgilang, biz 1-pozitsiyadan boshlaymiz va 22-pozitsiyada tugayapmiz:
myline = numpy.linspace(1, 22, 100)
Asl tarqalish chizmasini chizing:
plt.scatter(x, y)
Polinom regressiya chizig‘ini chizing:
plt.plot(myline, mymodel(myline))
Diagrammani ko‘rsatish:
plt.show()
R-kvadrat
X va y o‘qlarining qiymatlari o‘rtasidagi bog‘liqlik qanchalik yaxshi ekanligini bilish juda muhim, agar aloqa bo‘lmasa, polinom regressiyasi hech narsani bashorat qilish uchun ishlatilmaydi.
Munosabatlar r-kvadrat deb ataladigan qiymat bilan o‘lchanadi.
r-kvadrat qiymati 0 dan 1 gacha o‘zgarib turadi, bu yerda 0 hech qanday munosabatni bildirmaydi va 1 100% bog‘liqligini bildiradi.
Python va Sklearn moduli siz uchun bu qiymatni hisoblab chiqadi, faqat uni x va y massivlari bilan ta’minlash kifoya:
Misol
Mening ma’lumotlarim polinomli regressiyaga qanchalik mos keladi?
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)))
Try if Yourself »
Eslatma: 0,94 natijasi juda yaxshi munosabatlar mavjudligini ko‘rsatadi va biz kelajakdagi bashoratlarda polinom regressiyasidan foydalanishimiz mumkin.
Kelajakdagi qadriyatlarni bashorat qilish
Endi biz to‘plangan ma’lumotlardan kelajakdagi qiymatlarni bashorat qilish uchun foydalanishimiz mumkin.
Misol: Keling, soat 17:00 atrofida pullik kassadan o‘tgan avtomobil tezligini taxmin qilishga harakat qilaylik:
Buning uchun bizga yuqoridagi misoldagi bir xilmymodelmassivi kerak bo‘ladi:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Misol
17:00 da o‘tayotgan mashina tezligini taxmin qiling:
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)
Misolni ishga tushirish »
Misol tezlikni 88,87 deb taxmin qildi, biz buni diagrammadan ham o‘qiymiz:
Bad Fit?
Keling, polinom regressiyasi kelajakdagi qiymatlarni bashorat qilishning eng yaxshi usuli bo‘lmagan misol yarataylik.
Misol
X va y o‘qlari uchun bu qiymatlar polinom regressiyasi uchun juda yomon mos kelishiga olib kelishi kerak:
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()
Natija:

Va r-kvadrat qiymati?
Misol
Siz juda past r-kvadrat qiymatini olishingiz kerak.
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)))
Try if Yourself »
Natija: 0,00995 juda yomon munosabatni ko‘rsatadi va bu ma’lumotlar to‘plami polinom regressiyasi uchun mos emasligini bildiradi.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
