Pembelajaran Mesin - Regresi Polinomial
Regresi Polinomial
Jika titik data Anda jelas tidak cocok dengan regresi linier (garis lurus melalui semua titik data), ini mungkin ideal untuk regresi polinomial.
Regresi polinomial, seperti regresi linier, menggunakan hubungan antara variabel x dan y untuk menemukan cara terbaik untuk menggambar garis melalui titik data.
Bagaimana cara kerjanya?
Python memiliki metode untuk menemukan hubungan antara titik data dan menggambar garis regresi polinomial. Kami akan menunjukkan cara menggunakan metode ini alih-alih melalui rumus matematika.
Pada contoh di bawah ini, kami telah mendaftarkan 18 mobil saat melewati gerbang tol tertentu.
Kami telah mencatat kecepatan mobil, dan waktu hari (jam) lalu lintas terjadi.
Sumbu x mewakili jam dalam sehari dan sumbu y mewakili kecepatan:
Contoh
Mulailah dengan menggambar plot pencar:
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:
Contoh Dijelaskan
Impor modul yang Anda butuhkan.
Anda dapat mempelajari tentang modul NumPy di Tutorial NumPy kami .
Anda dapat mempelajari tentang modul SciPy di Tutorial SciPy kami .
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 dari posisi 1, dan berakhir di posisi 22:
myline = numpy.linspace(1, 22, 100)
Gambarkan plot pencar asli:
plt.scatter(x, y)
Gambarkan garis regresi polinomial:
plt.plot(myline, mymodel(myline))
Menampilkan diagram:
plt.show()
R-Kuadrat
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-kuadrat.
Nilai r-kuadrat berkisar antara 0 sampai 1, dimana 0 berarti tidak ada hubungan, dan 1 berarti 100% berhubungan.
Python dan modul Sklearn akan menghitung nilai ini untuk Anda, yang harus Anda lakukan adalah memasukkannya dengan array x dan y:
Contoh
Seberapa cocok 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)))
Catatan: Hasil 0,94 menunjukkan bahwa ada hubungan yang sangat baik, dan kita dapat menggunakan regresi polinomial dalam prediksi masa depan.
Prediksi Nilai Masa Depan
Sekarang kita dapat menggunakan informasi yang telah kita kumpulkan untuk memprediksi nilai masa depan.
Contoh: Mari kita coba memprediksi kecepatan mobil yang melewati gerbang tol sekitar pukul 17.00:
Untuk melakukannya, kita memerlukan mymodel
array yang sama dari contoh di atas:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Contoh
Prediksikan 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 memperkirakan kecepatan menjadi 88,87, yang juga dapat kita baca dari diagram:
Cocok?
Mari kita buat contoh di mana regresi polinomial tidak akan menjadi metode terbaik untuk memprediksi nilai masa depan.
Contoh
Nilai untuk sumbu x dan y ini akan menghasilkan kecocokan 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()
Hasil:
Dan nilai r-kuadrat?
Contoh
Anda harus mendapatkan nilai r-kuadrat 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.