Saya memiliki dua implementasi berbeda ridge
di MATLAB. Hanya satu
(seperti yang terlihat di halaman regresi ridge Wikipedia ), dengan menjadi matriks identitas kolom ukuran () kolom (), dan
Saya hanya memanggil "punggungan" Matlab dengan
x = ridge(A, b, lambda)
Masalah saya adalah keduanya menghasilkan hasil yang berbeda. (1) mengembalikan hasil yang saya inginkan (saya tahu ini dengan membandingkan hasil dengan orang lain) tetapi mengapa (2) tidak mengembalikan hasil yang sama?
Matriks saya jarang, diisi dengan 1% 1 dan 99% 0. Beberapa kolom mengandung hampir no 1. Perbedaan terbesar tampaknya adalah bahwa koefisien untuk kolom tersebut dengan sangat sedikit 1 sangat dekat dengan 0 in (1), tetapi bisa sangat jauh dari 0 in (2)
Adakah yang tahu mengapa ini berbeda dan bagaimana saya bisa memodifikasi panggilan di (2) untuk memberikan hasil yang sama seperti (1)?
sumber
ridge
(sesuai dokumentasi MATLAB) menunjukkan bahwa (sebagai standar): Secara default, b dihitung setelah berpusat dan skala prediktor untuk memiliki mean 0 dan standar deviasi 1. Model tidak menyertakan suku konstanta, dan X tidak boleh berisi kolom 1s. .ridge
. Anda tidak perlu melakukan apa pun untuk melakukannyaJawaban:
Ini adalah program matlab untuk memvalidasi apa yang dikatakan kardinal, sebenarnya karena pemusatan dan penskalaan
x1 maka sama dengan x2
sumber
Anda harus mengkhususkan skala pada ridge sebagai 0, sehingga terlihat seperti x = ridge (A, b, lambda, 0). Dalam hal ini, baris pertama x adalah konstan dan sisanya adalah koefisien. Dengan kata lain, x (2: end, :) harus hasil yang sama seperti yang Anda dapatkan dengan menggunakan (1). Ini jelas dinyatakan dalam dokumentasi mathlab. Semoga ini bisa membantu.
sumber