Home » python » Linear Regression Python

Linear Regression Python

by Catur Kurnia Sari
by Catur Kurnia Sari

Regresi

Istilah regresi digunakan ketika kita mencoba mencari hubungan antar variabel.

Dalam Machine learning dan dalam pemodelan statistik, hubungan itu digunakan untuk memprediksi hasil dari peristiwa di masa depan.

Regresi linier

Regresi linier menggunakan hubungan antara titik-titik data untuk menggambar garis lurus melalui semuanya.

Garis ini dapat digunakan untuk memprediksi nilai masa depan.

Dalam Pembelajaran Mesin, 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 kepada anda bagaimana menggunakan metode ini selain menggunakan rumus matematika.

Pada contoh di bawah, sumbu x melambangkan usia, dan sumbu y melambangkan kecepatan. Kami telah mencatat usia dan kecepatan 13 mobil saat mereka melewati gerbang tol. Mari kita lihat apakah data yang kita kumpulkan dapat digunakan dalam regresi linier:

Contoh:
Mulailah dengan menggambar plot scatter

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()

Hasilnya:

Contoh:
Import 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()

Hasilnya:

Penjelasn Contoh:

Import modul yang dibutuhkan.

Anda dapat mempelajari tentang modul Matplotlib di Tutorial Matplotlib sebelumnya.

Anda dapat mempelajari tentang modul SciPy di Tutorial SciPy sebelumnya.

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 nilai kemiringan dan intersep untuk mengembalikan nilai baru. Nilai baru ini menunjukkan dimana sumbu y yang sesuai nilai x akan ditempatkan:

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

Jalankan setiap nilai dari array x melalui fungsi tersebut. Ini akan menghasilkan array baru dengan nilai baru untuk sumbu y:

mymodel = list(map(myfunc, x))

Gambarkan plot scatter asli:

plt.scatter(x, y)

Gambarkan garis regresi linier:

plt.plot(x, mymodel)

Tampilkan 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 0 hingga 1, di mana 0 berarti tidak ada hubungan, dan 1 berarti 100% terkait.

Python dan modul Scipy akan menghitung nilai ini, yang harus Anda lakukan adalah memberinya nilai dengan nilai x dan y.

Contoh:
Seberapa cocok data ini 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 menunjukkan bahwa kita dapat menggunakan regresi linier dalam prediksi yang akan datang.

Prediksi Nilai Masa Depan

Sekarang kita dapat menggunakan informasi yang telah dikumpulkan untuk memprediksi nilai masa depan.

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

Untuk melakukannya, kita membutuhkan fungsi myfunc() 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 tersebut memperkirakan kecepatan pada 85,6, yang juga dapat kita baca dari diagram:

Bad Fit?

Mari kita buat contoh di mana regresi linier bukan metode terbaik untuk memprediksi nilai masa depan.

Contoh:
Nilai-nilai untuk sumbu x dan y ini akan menghasilkan kesesuaian yang sangat buruk pada 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()

Hasilnya:

Dan r untuk hubungan?

Contoh:
Kita harus mendapatkan nilai r 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)

Hasilnya: 0,013 menunjukkan hubungan yang sangat buruk, dan memberi tahu kita bahwa kumpulan data ini tidak cocok untuk regresi linier.

You may also like