Pemula Pembelajaran Mesin - Regresi Linear

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:


Jalankan Contoh

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:


Jalankan Contoh

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)

Jalankan Contoh

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)

Jalankan Contoh

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:


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 data set ini tidak sesuai untuk regresi linear.