Saya sedang membangun model regresi. Sebagai langkah preprocessing, saya skala nilai fitur saya untuk memiliki rata-rata 0 dan standar deviasi 1. Apakah perlu untuk menormalkan nilai target juga?
sumber
Saya sedang membangun model regresi. Sebagai langkah preprocessing, saya skala nilai fitur saya untuk memiliki rata-rata 0 dan standar deviasi 1. Apakah perlu untuk menormalkan nilai target juga?
Pertama mari kita menganalisis mengapa penskalaan fitur dilakukan. Penskalaan fitur meningkatkan konvergensi algoritma penurunan paling curam, yang tidak memiliki properti invarian skala.
Dalam contoh-contoh pelatihan gradient descent gradient menginformasikan pembaruan berat secara iteratif seperti itu,
Di mana adalah bobot, adalah stepsize, adalah bobot gradien wrt, adalah fungsi kehilangan, adalah fungsi yang diparameterisasi oleh , adalah contoh pelatihan, dan adalah respons / label.γ ∇ w ℓ f w w x y
Bandingkan fungsi cembung berikut ini, yang mewakili penskalaan yang tepat dan penskalaan yang tidak tepat.
Langkah melalui satu pembaruan berat size akan menghasilkan pengurangan kesalahan yang jauh lebih baik dalam case yang diskalakan dengan benar daripada case yang diskalakan secara tidak benar. Yang ditunjukkan di bawah ini adalah arah dengan panjang .∇ w ℓ ( f w ( x ) , y ) γ
Normalisasi output tidak akan mempengaruhi bentuk , jadi umumnya tidak perlu.
Satu-satunya situasi yang dapat saya bayangkan dengan menskalakan output memiliki dampak, adalah jika variabel respons Anda sangat besar dan / atau Anda menggunakan variabel f32 (yang umum dengan aljabar linear GPU). Dalam hal ini dimungkinkan untuk mendapatkan titik apung dari elemen bobot. Gejala adalah nilai Inf atau akan membungkus ke representasi ekstrim lainnya.
Secara umum, itu tidak perlu. Input penskalaan membantu untuk menghindari situasi, ketika satu atau beberapa fitur mendominasi yang lain dalam besarnya, sebagai akibatnya, model tersebut hampir tidak mengambil kontribusi dari variabel skala yang lebih kecil, bahkan jika mereka kuat. Tetapi jika Anda skala target, kesalahan kuadrat rata-rata Anda secara otomatis diskalakan. MSE> 1 secara otomatis berarti bahwa Anda melakukan lebih buruk daripada prediksi konstan (naif).
sumber
Tidak, transformasi linear dari respons tidak pernah diperlukan. Namun, mereka mungkin membantu untuk membantu dalam penafsiran model Anda. Misalnya, jika respons Anda diberikan dalam meter tetapi biasanya sangat kecil, mungkin berguna untuk mengubah skala menjadi milimeter. Perhatikan juga bahwa pemusatan dan / atau penskalaan input dapat bermanfaat untuk alasan yang sama. Misalnya, Anda dapat secara kasar mengartikan koefisien sebagai efek pada respons per perubahan unit dalam prediktor ketika semua prediktor lain diatur ke 0 . Tetapi 0 sering tidak akan menjadi nilai yang valid atau menarik untuk variabel-variabel tersebut. Memusatkan input memungkinkan Anda menginterpretasikan koefisien sebagai efek per unit berubah ketika prediktor lain mengasumsikan nilai rata-ratanya.
Transformasi lain (mis. Log atau root kuadrat) dapat membantu jika responsnya tidak linier dalam prediktor pada skala asli. Jika demikian, Anda dapat membaca tentang model linier umum untuk melihat apakah mereka cocok untuk Anda.
sumber
Ini tidak mempengaruhi gradient descent dalam buruk cara. periksa rumus untuk gradient descent:
katakanlah adalah fitur yang 1000 kali lebih besar darix2 x1
untuk kita memiliki . Cara optimal untuk mencapai (0,0) yang merupakan global optimal adalah bergerak melintasi diagonal tetapi jika salah satu fitur mendominasi yang lain dalam hal skala yang tidak akan terjadi.F(x⃗ )=x⃗ 2 ΔF(x⃗ )=2∗x⃗
Sebagai ilustrasi: Jika Anda melakukan transformasi , asumsikan tingkat pembelajaran seragam untuk kedua koordinat dan hitung gradiennya kemudianBentuk fungsionalnya sama tetapi laju pembelajaran untuk koordinat kedua harus disesuaikan dengan 1/1000 dari yang untuk koordinat pertama yang cocok dengan itu. Jika tidak koordinat dua akan mendominasi dan vektor akan mengarah lebih ke arah itu.z⃗ =(x1,1000∗x1) γ zn+1→=zn→−γΔF(z1,z2). Δ
Akibatnya itu bias delta untuk menunjuk ke arah itu saja dan membuat konvergen lebih lambat.
sumber
Ya , Anda perlu skala variabel target. Saya akan mengutip referensi ini :
Dalam referensi, ada juga demonstrasi pada kode di mana model bobot meledak selama pelatihan mengingat kesalahan yang sangat besar dan, pada gilirannya, gradien kesalahan yang dihitung untuk pembaruan berat juga meledak. Singkatnya, jika Anda tidak menskalakan data dan Anda memiliki nilai yang sangat besar, pastikan untuk menggunakan nilai tingkat pembelajaran yang sangat kecil. Ini disebutkan oleh @drSpacy juga.
sumber