Pembelajaran Mesin - Regresi Linier
Regresi
Istilah regresi digunakan ketika Anda mencoba mencari hubungan antar variabel.
Dalam Pembelajaran Mesin, dan dalam pemodelan statistik, hubungan itu digunakan untuk memprediksi hasil dari peristiwa di masa depan.
Regresi linier
Regresi linier menggunakan hubungan antara titik data untuk menggambar garis lurus melalui semua titik tersebut.
Garis ini dapat digunakan untuk memprediksi nilai masa depan.
Dalam Machine Learning, memprediksi masa depan sangat penting.
Bagaimana cara kerjanya?
Python memiliki metode untuk menemukan hubungan antara titik data dan menggambar garis regresi linier. Kami akan menunjukkan cara menggunakan metode ini alih-alih melalui rumus matematika.
Dalam contoh di bawah, sumbu x mewakili usia, dan sumbu y mewakili kecepatan. Kami telah mendaftarkan usia dan kecepatan 13 mobil saat mereka melewati gerbang tol. Mari kita lihat apakah data yang kami kumpulkan dapat digunakan dalam regresi linier:
Contoh
Mulailah dengan menggambar plot pencar:
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:
Contoh
Impor scipy
dan gambar garis Regresi Linier:
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:
Contoh Dijelaskan
Impor modul yang Anda butuhkan.
Anda dapat mempelajari tentang modul Matplotlib di Tutorial Matplotlib kami .
Anda dapat mempelajari tentang modul SciPy di Tutorial SciPy kami .
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]
Jalankan metode yang mengembalikan beberapa nilai kunci penting dari Regresi Linier:
slope, intercept, r,
p, std_err = stats.linregress(x, y)
Buat fungsi yang menggunakan slope
dan
intercept
nilai untuk mengembalikan nilai baru. Nilai baru ini menunjukkan di mana pada sumbu y nilai x yang sesuai akan ditempatkan:
def myfunc(x):
return slope * x + intercept
Jalankan setiap nilai larik x melalui fungsi. Ini akan menghasilkan larik baru dengan nilai baru untuk sumbu y:
mymodel = list(map(myfunc, x))
Gambarkan plot pencar asli:
plt.scatter(x, y)
Gambarkan garis regresi linier:
plt.plot(x, mymodel)
Menampilkan diagram:
plt.show()
R untuk Hubungan
Penting untuk diketahui bagaimana hubungan antara nilai sumbu x dan nilai sumbu y, jika tidak ada hubungan maka regresi linier tidak dapat digunakan untuk memprediksi apapun.
Hubungan ini - koefisien korelasi - disebut
r
.
Nilai r
berkisar dari -1 hingga 1, di mana 0 berarti tidak ada hubungan, dan 1 (dan -1) berarti 100% terkait.
Python dan modul Scipy akan menghitung nilai ini untuk Anda, yang harus Anda lakukan adalah memberinya nilai x dan y.
Contoh
Seberapa cocok data saya 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)
Catatan: Hasil -0,76 menunjukkan bahwa ada hubungan, tidak sempurna, tetapi ini menunjukkan bahwa kita dapat menggunakan regresi linier 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 meramal kecepatan mobil berumur 10 tahun.
Untuk melakukannya, kita memerlukan myfunc()
fungsi yang sama dari contoh di atas:
def myfunc(x):
return slope * x + intercept
Contoh
Memprediksi kecepatan mobil berusia 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)
Contoh memprediksi kecepatan pada 85,6, yang juga dapat kita baca dari diagram:
Cocok?
Mari kita buat contoh di mana regresi linier 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 linier:
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:
Dan r
untuk hubungan?
Contoh
Anda harus mendapatkan nilai yang sangat rendah r
.
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)
Hasilnya: 0,013 menunjukkan hubungan yang sangat buruk, dan memberi tahu kita bahwa kumpulan data ini tidak cocok untuk regresi linier.