Bagaimana intersep dihitung dalam GLMnet?

8

Saya telah mengimplementasikan versi elastis jaring GLMNET untuk regresi linier dengan perangkat lunak lain selain R. Saya membandingkan hasil saya dengan fungsi R glmnet dalam mode laso pada data diabetes .

Pilihan variabel ok ketika memvariasikan nilai parameter (lambda) tapi saya mendapatkan nilai koefisien yang sedikit berbeda. Untuk alasan ini dan lainnya saya pikir itu berasal dari intersep di loop pembaruan, ketika saya menghitung fit saat ini, karena saya tidak memvariasikan intersep (yang saya ambil sebagai rata-rata dari variabel target) dalam keseluruhan algoritma: sebagai dijelaskan dalam artikel Trevor Hastie ( Jalur Regularisasi untuk Model Linear Umum melalui Koordinat Keturunan , halaman 7, bagian 2.6):

intersep tidak diatur, [...] untuk semua nilai [...] lambda [parameter L1-constraint]

Namun terlepas dari artikel tersebut, fungsi R glmnet memang memberikan nilai yang berbeda untuk intersep di sepanjang jalur regularisasi (nilai yang berbeda lambda). Apakah ada yang punya petunjuk tentang bagaimana nilai Intercept dihitung?

yelh
sumber

Jawaban:

8

Saya menemukan bahwa intersep di GLMnet dihitung setelah pembaruan koefisien baru terkonvergensi. Intersepsi dihitung dengan cara dan rata-rata . Rumusnya sama dengan yang sebelumnya saya berikan tetapi dengan setelah loop pembaruan: .yixijβjβ0=y¯j=1pβj^xj¯

Dalam python ini memberikan sesuatu seperti:

        self.intercept_ = ymean - np.dot(Xmean, self.coef_.T)

yang saya temukan di sini di halaman scikit-learn.

EDIT: koefisien harus distandarisasi sebelum:

        self.coef_ = self.coef_ / X_std

β0=y¯j=1pβj^xj¯i=1nxij2 .

yelh
sumber
Saya harus menambahkan bahwa ini adalah cara standar untuk menghitung intersep, dengan asumsi model itu linier dan kesalahan memiliki nol rata-rata.
mpiktas
Memang, bagaimanapun penulis secara eksplisit mengatakan dalam artikel mereka: untuk semua nilai dan , dan terlebih lagi mereka tidak mengatakan pada titik mana algoritma itu dihitungβ0=y¯ αλ
yelh
Karena penulis berasumsi bahwa maka ini benar. Perhatikan di awal halaman 3, mereka mengatakan bahwa kami berasumsi bahwa prediktor berpusat, tetapi ini tidak membatasi, karena "... hasil menggeneralisasi secara alami ..." ke kasus yang tidak standar. Formula yang Anda temukan adalah generalisasi alami ini. x¯=0
mpiktas
Namun, bahkan ketika standardisasi diterapkan (dan karena itu berarti pemusatan) pada prediktor dalam algoritma, mereka mengambil data yang tidak standar (oleh karena itu , secara umum) agar sesuai dengan berbagai intersep yang ditampilkan oleh . Mereka menggunakan untuk memperbarui koefisien tetapi cocok dengan intersep dengan data mentah, dan mereka melakukannya dengan posteriori. x¯0glmnetβ0=constant=y¯
yelh
3

yang saya ambil sebagai mean dari variabel target

Saya pikir ini mungkin di mana Anda salah: tidak seperti model linier, Anda tidak dapat membuat kembali prediktor sedemikian rupa sehingga mereka akan selalu ortogonal terhadap intersep, maka intersep tidak dapat hanya dihitung sebagai mean.

Simon Byrne
sumber
Saya mengambil rata-rata dari variabel yang dijelaskan karena dalam artikel yang saya kutip, penulis metode ini menulis bahwa mereka menggunakan rata-rata Y_i (pengamatan variabel yang dijelaskan) untuk semua nilai alpha dan lambda. Sekarang, melihat output dari fungsi glmnet, saya kira itu bukan kasus untuk semua lambdas. Jadi itu tidak memberi tahu saya bagaimana menghitung intersep untuk setiap parameter regularisasi lambda.
yelh
Dugaan saya adalah bahwa mereka menggunakan mean tertimbang (karena bobot akan berubah dengan ). λ
Simon Byrne
Bisakah Anda menjelaskan ide Anda? Ekspresi bobot apa yang harus saya pertimbangkan?
yelh
Dalam makalah tersebut, setiap "lingkaran dalam" adalah masalah, kuadrat-terkecil tertimbang, dengan bobot ditentukan oleh nilai pas sebelumnya melalui persamaan 17.
Simon Byrne
1
Tidak apa-apa saya menemukan jawaban melihat kode python scikit-belajar (karena kode sumber glmnet di Fortran dan itu bukan secangkir teh saya). Saya akan membagikannya nanti jika ada yang tertarik. Bagaimanapun, terima kasih!
yelh