Saya menggunakan regresi linier standar menggunakan scikit-learn in python. Namun, saya ingin memaksa bobot semua positif untuk setiap fitur (bukan negatif), apakah ada cara saya bisa mencapai itu? Saya mencari di dokumentasi tetapi tidak dapat menemukan cara untuk mencapai itu. Saya mengerti saya mungkin tidak mendapatkan solusi terbaik, tetapi saya perlu bobotnya menjadi non-negatif.
sumber
Saya menggunakan solusi dengan Lasso di Scikit Learn (Ini jelas bukan cara terbaik untuk melakukan sesuatu tetapi bekerja dengan baik). Lasso memiliki parameter
positive
yang dapat diatur keTrue
dan memaksa koefisien menjadi positif. Selanjutnya, pengaturan koefisien Regularisasialpha
agar mendekati 0 menjadikan Lasso meniru Regresi Linier tanpa regularisasi. Ini kodenya:sumber
Berikut adalah contoh mengapa Anda ingin melakukannya (dan kira-kira caranya).
Saya memiliki 3 model prediksi harga perumahan: linear, peningkatan gradien, jaringan saraf.
Saya ingin mencampurnya menjadi rata-rata tertimbang dan menemukan bobot terbaik.
Saya menjalankan regresi linier, dan saya mendapatkan solusi dengan bobot seperti -3.1, 2.5, 1.5, dan beberapa intersep.
Jadi yang saya lakukan malah menggunakan sklearn
Dan saya mendapatkan bobot positif yang jumlahnya (sangat dekat) dengan 1. Dalam contoh saya, saya ingin alpha yang bekerja paling baik di luar sampel jadi saya menggunakan LassoCV dengan cross-validation.
Dokumen sklearn menyatakan bahwa Anda tidak boleh mengatur alpha ke 0 karena alasan numerik, namun Anda juga dapat menggunakan straight Lasso () dan mengatur parameter alpha serendah Anda bisa mendapatkan jawaban yang masuk akal.
sumber