
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