the calculus, the algebra and the code – Towards AI

the calculus, the algebra and the code – Towards AI

Author(s): Menzliskander

Awalnya diterbitkan di Menuju AI.

Persamaan Normal: Kalkulus, Aljabar, dan Kode

Foto oleh Antoine Dautry di Unsplash

Perkenalan:

Persamaan normal adalah solusi bentuk tertutup yang digunakan untuk menyelesaikan masalah regresi linier. Hal ini memungkinkan kita untuk secara langsung menghitung parameter optimal dari garis (hyperplane) yang paling sesuai dengan data kita.

Pada artikel ini, kami akan mendemonstrasikan persamaan normal menggunakan pendekatan kalkulus dan aljabar linier, kemudian mengimplementasikannya dengan python tetapi pertama-tama, mari kita rekap regresi linier.

Regresi linier:

katakanlah kita memiliki titik data x¹,x²,x³,… di mana setiap titik memiliki k fitur

gambar oleh penulis

dan setiap titik data memiliki nilai target yᵢ.

tujuan regresi linier adalah untuk menemukan parameter θ₀, θ₁, θ₂,…,θk yang membentuk hubungan antara setiap titik data dan nilai targetnya yᵢ

gambar oleh penulis

jadi kami mencoba menyelesaikan sistem persamaan ini:

gambar oleh penulis

meletakkan semuanya dalam bentuk matriks, kita mendapatkan: Xθ=y dengan:

gambar oleh penulis

Sekarang masalahnya adalah, dalam banyak kasus, sistem ini tidak dapat dipecahkan. Kami tidak dapat memasukkan garis lurus melalui data

gambar oleh penulis

Dan di sinilah persamaan normal akan melangkah untuk menemukan solusi perkiraan terbaik, Praktis persamaan normal akan menemukan vektor parameter θ yang menyelesaikan persamaan Xθ=ŷ di mana ŷ sedekat mungkin dengan nilai target awal kita.

dan inilah persamaan normalnya:

gambar oleh penulis

bagaimana kita bisa sampai disana?? Nah, ada 2 cara untuk menjelaskannya

Kalkulus:

Seperti yang kami katakan sebelumnya, kami mencoba untuk menemukan parameter θ sehingga prediksi kami ŷ = Xθ sedekat mungkin dengan y asli kami. Jadi kami ingin meminimalkan jarak antara mereka yaitu, meminimalkan ||y-ŷ|| dan itu sama dengan meminimalkan ||y-ŷ||² (lihat grafik di bawah)

gambar oleh penulis

sekarang yang harus kita lakukan adalah menyelesaikan masalah minimisasi ini terlebih dahulu, mari kita kembangkan :

catatan: Xθ dan y adalah vektor, jadi kita dapat mengubah urutannya saat kita mengalikannya

sekarang untuk menemukan nilai minimum, kita akan menurunkannya terhadap θ dan mengaturnya menjadi 0

gambar oleh penulis

dan begitulah cara kita sampai pada persamaan normal. Sekarang ada pendekatan lain yang akan membawa kita ke sana.

Aljabar linier:

Sekali lagi persamaan kita adalah Xθ=y, mengetahui sedikit perkalian matriks, kita tahu bahwa hasil perkalian vektor dengan matriks adalah kombinasi linear dari perkalian kolom matriks dengan komponen vektor, sehingga kita dapat menulis sebagai berikut:

gambar oleh penulis

jadi agar sistem ini memiliki solusi, y harus berada di ruang kolom X (dicatat C(X)). Dan karena biasanya bukan itu masalahnya, kita harus puas dengan hal terbaik berikutnya yang menyelesaikannya untuk pendekatan terdekat dari y dalam C(X).

dan itu hanya proyeksi dari y ke dalam C(X)!! (lihat gambar di bawah)

gambar oleh penulis

ŷ adalah proyeksi y terhadap C(X) sehingga dapat ditulis sebagai ŷ =Xθ X^T

e = y— ŷ dan karena ortogonal terhadap C(X) , X^T dikalikan dengan e sama dengan 0

sekarang menyatukan semua ini:

gambar oleh penulis

seperti yang bisa kita lihat kita mendapatkan hasil yang persis sama!

Kode:

Sekarang mengimplementasikan ini dengan python cukup mudah

Pertama, kita akan membuat beberapa data:

impor numpy sebagai np
impor matplotlib.pyplot sebagai plt

X=3*np.random.rand(100,1)
#menghasilkan label menggunakan fungsi y=2X+3+gaussian noise
Y=2*X+3+np.random.randn(100,1)
#menampilkan data
plt.scatter(X,Y)
plt.xlabel(‘X’)
plt.ylabel(‘Y’)
plt.title(‘Data acak(y=2X+3+gaussian noise)’)
plt.tampilkan()

gambar oleh penulis #menambahkan kolom untuk istilah bias
X1 = np.c_[np.ones((100,1)),X]
#menerapkan persamaan normal:
theta = np.linalg.inv(X1.T.dot(X1)).dot(X1.T).dot(Y)
#kami menemukan bahwa theta sama dengan :array([[2.78609912],[2.03156946]))
#fungsi sebenarnya yang kami gunakan adalah y=3+2x+ gaussian noise
#jadi perkiraan kami cukup bagus

Sekarang yang tersisa hanyalah menggunakan parameter θ kami untuk membuat prediksi:

Y_predict=X1.dot(theta_best)
plt.plot(X,Y,”b.”)
plt.plot(X,Y_predict,”r-“,label=”prediksi”)
plt.legend()
plt.xlabel(‘X’)
plt.ylabel(‘Y’)
plt.title(‘Data acak(y=2X+3+gaussian noise)’)
plt.tampilkan()
gambar oleh penulis

Kesimpulan:

Seperti yang kita lihat persamaan normal cukup mudah dan mudah digunakan untuk langsung mendapatkan parameter optimal namun tidak umum digunakan pada dataset besar karena melibatkan komputasi kebalikan dari matriks yang mahal secara komputasi (membutuhkan kompleksitas waktu O(n³)) itu sebabnya pendekatan berulang seperti penurunan gradien lebih disukai

Persamaan Normal: kalkulus, aljabar, dan kode awalnya diterbitkan di Towards AI on Medium, di mana orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly