Pemula Belajar Pemecahan Masalah Mesin - Regresi Polinomial

Regresi Polinomial (Polynomial Regression)

Jika titik data anda jelas tidak sesuai dengan regresi linear (garis yang melintasi titik data), maka regresi polinomial mungkin adalah pilihan yang ideal.

Seperti regresi linier, regresi polinomial menggunakan hubungan antara variabel x dan y untuk menemukan cara terbaik untuk menggambar garis titik data.


Prinsip kerja

Python memiliki beberapa metode untuk menemukan hubungan antara titik data dan menggambar garis regresi polinomial. Kita akan menunjukkan bagaimana cara menggunakan metode ini daripada melalui formula matematika.

Dalam contoh di bawah ini, kami mendaftarkan 18 kendaraan yang melewati toll road khusus.

Kami telah merekam kecepatan kendaraan dan waktu melewati (jam).

Aksel x menunjukkan jam dalam sehari, aksel y menunjukkan kecepatan:

Contoh

pertama-tama gambar grafik titik:

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

Hasil:


Jalankan Contoh

Contoh

impor numpy dan matplotlibkemudian 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()

Hasil:


Jalankan Contoh

Pengertian contoh

Impor modul yang dibutuhkan:

import numpy
import matplotlib.pyplot as plt

Buat array yang merepresentasikan nilai x dan y-axel:

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 cara untuk membangun model polinomial:

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

Lalu tentukan cara tampilan baris, mulai dari posisi 1 sampai posisi 22:

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

Gambar grafik titik asal:

plt.scatter(x, y)

Gambar garis regresi polinomial:

plt.plot(myline, mymodel(myline))

Tampilkan grafik:

plt.show()

R-Squared

penting untuk mengetahui seberapa baik hubungan antara nilai x-aksel dan y-aksel, jika tidak ada hubungan, regresi polinomial tidak dapat digunakan untuk memprediksi apapun.

Hubungan ini diukur dengan nilai yang disebut r-square (r-squared).

Rangkaian nilai r-square adalah 0 sampai 1, di mana 0 menunjukkan tak berhubungan, sementara 1 menunjukkan 100% berhubungan.

Python dan modul Sklearn akan menghitung nilai ini untuk Anda, yang Anda lakukan adalah memasukkan array x dan y:

Contoh

Bagaimana kesesuaian data saya 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)))

Jalankan Contoh

Keterangan:Hasil 0.94 menunjukkan adanya hubungan yang bagus, dan kami dapat menggunakan regresi polinomial untuk prediksi masa mendatang.

Prediksi nilai masa mendatang

Sekarang, kami dapat menggunakan informasi yang telah dikumpulkan untuk memprediksi nilai masa mendatang.

Contohnya: mari kita coba memprediksi kecepatan kendaraan yang melintas melintasi toll road sekitar pukul 17 malam:

Untuk hal ini, kami memerlukan yang sama seperti contoh di atas: mymodel Array:

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

Contoh

Prediksi kecepatan kendaraan yang melintas pukul 17 sore:

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)

Jalankan Contoh

Kecepatan prediksi contoh ini adalah 88.87, dan kami juga dapat melihatnya di grafik:


Kesesuaian yang buruk?

Jangan kami ciptakan contoh dimana regresi polinomial bukan cara terbaik untuk memprediksi nilai masa mendatang.

Contoh

Nilai untuk sumbu x dan y ini akan menyebabkan ketinggian penggantian regresi persegi sangat buruk:

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

Hasil:


Jalankan Contoh

apa nilai r-squared?

Contoh

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

Jalankan Contoh

Hasil: 0.00995 menunjukkan hubungan yang buruk, dan memberitahu kami bahwa data set ini tidak sesuai untuk regresi persegi