Pemula Belajar Pemecahan Masalah Mesin - Regresi Polinomial
- Hal Sebelumnya Regresi Linear
- Hal Berikutnya Regresi Banyak Variabel
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:

Contoh
impor numpy
dan matplotlib
kemudian 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:

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

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)))
Hasil: 0.00995 menunjukkan hubungan yang buruk, dan memberitahu kami bahwa data set ini tidak sesuai untuk regresi persegi
- Hal Sebelumnya Regresi Linear
- Hal Berikutnya Regresi Banyak Variabel