Pelatihan Mesin - Regresi Polinomial

Regresi

Ketika Anda mencoba menemukan hubungan variabel, istilah 'regresi' (regression) akan digunakan.

Dalam pendidikan mesin dan pemodelan statistik, hubungan ini digunakan untuk memprediksi hasil peristiwa masa mendatang.

Regresi linier

Regresi linier menggambar garis lurus diantara titik data di seluruh data.

Garis ini dapat digunakan untuk memprediksi nilai masa mendatang.


Dalam pendidikan mesin, memprediksi masa mendatang sangat penting.

Prinsip kerja

Python menyediakan beberapa metode untuk mencari hubungan antara titik data dan menggambar garis regresi. Kita akan menunjukkan bagaimana menggunakan metode ini daripada melalui formula matematika.

Dalam contoh di bawah ini, sumbu x menunjukkan umur mobil, sumbu y menunjukkan kecepatan. Kita telah merekam umur dan kecepatan 13 mobil yang melalui toll booth. Mari lihat apakah data yang kita kumpulkan dapat digunakan untuk regresi linier:

Contoh

Pertama, gambarkan grafik poin:

import matplotlib.pyplot as plt
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
plt.scatter(x, y)
plt.show()

Hasil:


Jalankan Contoh

Contoh

Impor scipy dan gambarkan garis regresi:

import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Hasil:


Jalankan Contoh

Pengertian contoh

Impor modul yang dibutuhkan:

import matplotlib.pyplot as plt
from scipy import stats

Buat array yang mewakili nilai sumbu x dan y:

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

Melakukan suatu metode yang mengembalikan beberapa nilai penting dari regresi linier:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Buatlah yang menggunakan slope dan intercept Fungsi nilai mengembalikan nilai baru. Nilai baru ini menunjukkan posisi yang seharusnya di sumbu y untuk nilai x yang seharusnya:

def myfunc(x):
  return slope * x + intercept

Melalui fungsi menjalankan setiap nilai dari array x. Ini akan menghasilkan array baru yang mempunyai nilai baru di sumbu y:

mymodel = list(map(myfunc, x))

Gambarkan poin asli:

plt.scatter(x, y)

Gambarkan garis regresi linier:

plt.plot(x, mymodel)

Tampilkan gambar:

plt.show()

R-Squared

penting untuk mengetahui hubungan antara nilai sumbu x dan sumbu y berapa baik, jika tidak ada hubungan, regresi linier tidak dapat digunakan untuk memprediksi apapun.

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

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

Modul Python dan Scipy akan menghitung nilai untuk Anda, yang Anda lakukan adalah menyediakan nilai x dan y kepadanya:

Contoh

Bagaimana data saya disesuaikan dalam regresi linier?

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

Jalankan Contoh

Keterangan:Hasil -0.76 menunjukkan adanya hubungan, tetapi bukan hubungan yang sempurna, tetapi ia menunjukkan bahwa kita dapat menggunakan regresi linier dalam prediksi masa mendatang.

Prediksi nilai masa mendatang

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

Contoh: Mari kita coba memprediksi kecepatan mobil yang berumur 10 tahun.

Untuk hal ini, kami memerlukan yang sama seperti di contoh sebelumnya myfunc() Fungsi:

def myfunc(x):
  return slope * x + intercept

Contoh

Prediksi kecepatan mobil yang berumur 10 tahun:

from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
speed = myfunc(10)
print(speed)

Jalankan Contoh

Kecepatan prediksi adalah 85.6, dan kami juga dapat membaca dari gambar:


Kesadaran yang buruk?

Buatlah contoh, di mana regresi linier bukan metode terbaik untuk memprediksi nilai masa mendatang.

Contoh

Nilai untuk sumbu x dan y ini akan mengakibatkan kinerja regresi linear sangat buruk:

import matplotlib.pyplot as plt
from scipy import stats
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]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Hasil:


Jalankan Contoh

dan nilai r-squared?

Contoh

Anda seharusnya mendapatkan nilai r-squared yang sangat rendah.

import numpy
from scipy import stats
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]
slope, intercept, r, p, std_err = stats.linregress(x, y)
print(r)

Jalankan Contoh

Hasil: 0.013 menunjukkan hubungan yang buruk, dan memberitahu kami bahwa dataset ini tidak cocok untuk regresi linear.