Home » python » Polynomial Regression

Polynomial Regression

by Catur Kurnia Sari
by Catur Kurnia Sari

Jika poin data yang kita miliki jelas tidak akan cocok dengan regresi linier (garis lurus melalui semua titik data), data tersebut mungkin ideal untuk regresi polinomial.

Regresi polinomial, seperti regresi linier, menggunakan hubungan antara variabel x dan y untuk menemukan cara terbaik untuk menarik garis melalui titik data.

Bagaimana cara kerjanya?

Python memiliki metode untuk menemukan hubungan antara titik data dan menggambar garis regresi polinomial. Kita akan belajar bagaimana menggunakan metode ini alih-alih menggunakan rumus matematika.

Pada contoh di bawah ini, kita telah mendaftarkan 18 mobil saat mereka melewati gerbang tol tertentu.

Kita telah mencatat kecepatan mobil, dan waktu (jam) lewatnya terjadi.

Sumbu x mewakili jam dalam sehari dan sumbu y mewakili kecepatan:

Contoh:
Mulailah dengan menggambar plot scatter

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

Hasilnya:

Contoh:
Import numpy dan matplotlib lalu gambar garis Regresi Polinomial:

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

Hasilnya:

Penjelasan Contoh:

Import modul yang dibutuhkan.

Anda dapat mempelajari tentang modul NumPy di Tutorial NumPy sebelumnya.

Anda dapat mempelajari tentang modul SciPy di Tutorial SciPy sebelumnya.

import numpy
import matplotlib.pyplot as plt

Buat array yang mewakili nilai sumbu x dan y:

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 memiliki metode yang memungkinkan kita membuat model polinomial:

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

Kemudian tentukan bagaimana garis akan ditampilkan, kita mulai di posisi 1, dan berakhir di posisi 22:

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

Gambarkan plot scatter asli:

plt.scatter(x, y)

Gambarkan garis regresi polinomial:

plt.plot(myline, mymodel(myline))

Tampilkan diagram:

plt.show()

R-Squared

Penting untuk diketahui seberapa baik hubungan antara nilai sumbu x dan y, jika tidak ada hubungan maka regresi polinomial tidak dapat digunakan untuk memprediksi apapun.

Hubungan tersebut diukur dengan nilai yang disebut r-squared.

Nilai r-squared berkisar dari 0 hingga 1, di mana 0 berarti tidak ada hubungan, dan 1 berarti 100% terkait.

Python dan modul Sklearn akan menghitung nilai ini, yang harus kita lakukan adalah memberinya nilai dengan array x dan y.

Contoh:
Seberapa cocok data ini dalam regresi polinomial?

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

Catatan: Hasil 0,94 menunjukkan bahwa ada hubungan yang sangat baik, dan kita dapat menggunakan regresi polinomial dalam prediksi mendatang.

Prediksi Nilai Masa Depan

Sekarang kita dapat menggunakan informasi yang telah dikumpulkan untuk memprediksi nilai masa depan.

Contoh: Mari kita coba memprediksi kecepatan sebuah mobil yang melewati pintu tol sekitar pukul 17.00

Untuk melakukannya, kita membutuhkan array mymodel yang sama dari contoh di atas:

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

Contoh:
Memprediksi kecepatan mobil yang lewat pada pukul 17.00:

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)

Contoh tersebut memperkirakan kecepatan menjadi 88,87, yang juga dapat kita baca dari diagram:

Bad Fit?

Mari kita buat contoh di mana regresi polinomial bukan metode terbaik untuk memprediksi nilai masa depan.

Contoh:
Nilai-nilai untuk sumbu x dan y ini akan menghasilkan kesesuaian yang sangat buruk untuk regresi 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()

Hasilnya:

Dan nilai r-squared?

Contoh
Kita harus mendapatkan nilai r-squared yang sangat rendah.

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

Hasilnya: 0,00995 menunjukkan hubungan yang sangat buruk, dan memberi tahu kita bahwa kumpulan data ini tidak cocok untuk regresi polinomial.

You may also like