Belajar Mesin - Regresi Polinomial
- Hal Sebelumnya Regresi Linear
- Hal Berikutnya Regresi Beragam
Regresi Polinomial (Polynomial Regression)
Jika titik data Anda jelasnya tidak cocok untuk regresi linear (garis yang melintasi titik data), maka regresi polinomial mungkin pilihan yang ideal.
Seperti regresi linier, regresi polinomial menggunakan hubungan antara variabel x dan y untuk menemukan cara terbaik untuk menggambar garis diantara titik data.

Prinsip kerja
Python memiliki beberapa metode untuk menemukan hubungan antara titik data dan menggambar garis regresi polinomial. Kita akan menunjukkan bagaimana menggunakan metode ini daripada melalui formula matematika.
Dalam contoh di bawah ini, kami mendaftarkan 18 kendaraan yang melalui persimpangan tarif khusus.
Kami telah merekam kecepatan kendaraan dan waktu lulus (jam).
Sumbu x menunjukkan jam dalam sehari, sumbu y menunjukkan kecepatan:
Contoh
Pertama, 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
dan 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 sumbu x dan sumbu 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 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 asli:
plt.scatter(x, y)
Gambar garis regresi polinomial:
plt.plot(myline, mymodel(myline))
Tampilkan grafik:
plt.show()
R-Squared
penting untuk mengetahui bagaimana hubungan antara nilai sumbu x dan sumbu y berapa baik, jika tidak ada hubungan, regresi polinomial tidak dapat digunakan untuk memprediksi apapun.
Hubungan ini diukur dengan nilai yang disebut r-squared (r-kuat).
Jangkauan nilai r-squared adalah 0 sampai 1, di mana 0 menunjukkan hubungan yang tak relevan, sementara 1 menunjukkan hubungan 100% relevan.
Python dan modul Sklearn akan menghitung nilai untuk Anda, yang Anda lakukan adalah memasukkan array x dan y:
Contoh
Bagaimana kesadaran 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 kita dapat menggunakan regresi polinomial dalam prediksi mendatang.
Prediksi nilai masa mendatang
Sekarang, kita dapat menggunakan informasi yang telah dikumpulkan untuk memprediksi nilai masa mendatang.
Contohnya: mari kita coba memprediksi kecepatan kendaraan yang melalui persimpangan tarif di pukul 17 sore:
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 di 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 adalah 88.87, dan kita juga dapat melihatnya di gambar:

Kesadaran yang buruk?
Kami akan membuat contoh dimana regresi polinomial bukan metode terbaik untuk memprediksi nilai masa mendatang.
Contoh
Nilai untuk sumbu x dan y ini akan menyebabkan kinerja regresi polinomial 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:

Nilai r-squared bagaimana?
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 mengatakan bahwa dataset ini tidak cocok untuk regresi polinomial.
- Hal Sebelumnya Regresi Linear
- Hal Berikutnya Regresi Beragam