Pemula Pembelajaran Mesin - Regresi Linear
- Hal Sebelumnya Garis Bintang
- Hal Berikutnya Regresi Polinomial
Regresi
Ketika anda mencuba mencari hubungan antara pembolehubah, istilah 'regression' (kembalian) digunakan.
Di dalam pengelolaan maklumat dan model statistik, hubungan ini digunakan untuk ramal kesimpulan kejadian masa depan.
Regresi linear
Regresi linear menggambar garis lurus diantara titik data untuk semua titik 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. Kami akan menunjukkan bagaimana cara kerja metode ini daripada melalui formula matematika.
Dalam contoh di bawah ini, sumbu x menunjukkan umur kereta, sumbu y menunjukkan kecepatan. Kami telah merekam umur dan kecepatan 13 kereta yang melalui persimpangan tarif. Bagaimana jika kami lihat data yang kami ambil apakah dapat digunakan untuk regresi linear:
Contoh
pertama, lukis grafik titik:
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 lukis 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:

Pengertian contoh
Impor modul yang diperlukan:
import matplotlib.pyplot as plt from scipy import stats
Buat array yang mewakili nilai sumbu x dan sumbu 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 linear:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Buat satu yang menggunakan slope
dan intercept
Fungsi nilai mengembalikan nilai baru. Nilai baru ini menunjukkan tempat yang seharusnya nilai x akan berada di sumbu y:
def myfunc(x): return slope * x + intercept
Melakukan setiap nilai array x melalui fungsi. Ini akan menghasilkan array baru di mana sumbu y memiliki nilai baru:
mymodel = list(map(myfunc, x))
Garis titik asal:
plt.scatter(x, y)
Garis lurus regresi:
plt.plot(x, mymodel)
Tunjukkan grafik:
plt.show()
R-Squared
penting untuk mengetahui hubungan antara nilai sumbu x dan sumbu y seberapa baik, jika tidak ada hubungan, regresi linear tidak dapat digunakan untuk memprediksi apa saja.
Hubungan ini diukur dengan nilai yang disebut r-squared (r-squared).
Skop nilai r-squared adalah 0 hingga 1, di mana 0 menunjukkan tak berhubungan, sementara 1 menunjukkan 100% berhubungan.
Modul Python dan Scipy akan menghitung nilai ini untuk Anda, yang Anda perlu lakukan adalah menyediakan nilai x dan y untuknya:
Contoh
Bagaimana maklumat saya disesuaikan dalam regresi linear?
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)
Keterangan:Hasil -0.76 menunjukkan adanya hubungan, tetapi bukan hubungan yang sempurna, tetapi ia menunjukkan bahwa kami dapat menggunakan regresi linear dalam prediksi masa mendatang.
Memprediksi nilai masa mendatang
Sekarang, kami dapat menggunakan maklumat yang kami ambil untuk memprediksi nilai masa mendatang.
Contoh: Bagaimana jika kami mencoba memprediksi kecepatan kereta yang berumur 10 tahun?
Untuk itu, kami memerlukan yang sama seperti di contoh sebelumnya myfunc()
Fungsi:
def myfunc(x): return slope * x + intercept
Contoh
Memprediksi kecepatan kereta 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)
Kecepatan yang dihitung adalah 85.6, dan kami juga dapat membaca daripada grafik:

Garis lurus yang buruk?
Buat contoh, penggunaan regresi linear bukan jalan terbaik untuk memprediksi nilai masa mendatang.
Contoh
Nilai untuk sumbu x dan y ini akan mengakibatkan kuasi-fitting 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:

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)
Hasil: 0.013 menunjukkan hubungan yang buruk, dan memberitahu kami bahwa data set ini tidak sesuai untuk regresi linear.
- Hal Sebelumnya Garis Bintang
- Hal Berikutnya Regresi Polinomial