Apakah perlu untuk menskalakan nilai target selain fitur penskalaan untuk analisis regresi?

52

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?

pengguna2806363
sumber

Jawaban:

50

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,

wt+1=wtγw(fw(x),y)

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.γ wf w w x ywγwfwwxy

Bandingkan fungsi cembung berikut ini, yang mewakili penskalaan yang tepat dan penskalaan yang tidak tepat.

Penskalaan fitur

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 ) γγw(fw(x),y)γ

Pembaruan gradien

Normalisasi output tidak akan mempengaruhi bentuk , jadi umumnya tidak perlu.f

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.

Jessica Mick
sumber
Tetapi jika kita tidak skala input dan menerapkan Gradient Descent, untuk memecahkan untuk theta dalam sesuatu seperti y = theta0 + theta1 * x1 + theta2 * x2, jika kita memperbarui nilai-nilai X1 dan X2 (dengan menskalakan mereka) sambil menjaga Y (output yang diharapkan) sama, bukankah prediksi yang dihasilkan untuk theta1, theta2 salah ketika kita menerapkannya pada persamaan asli?
Prashant
14

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).

inzl
sumber
7

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.

AlexK
sumber
1

Ini tidak mempengaruhi gradient descent dalam buruk cara. periksa rumus untuk gradient descent:

xn+1=xnγΔF(xn)

katakanlah adalah fitur yang 1000 kali lebih besar darix2x1

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)=x2ΔF(x)=2x

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,1000x1)γ

zn+1=znγΔF(z1,z2).
Δ

Akibatnya itu bias delta untuk menunjuk ke arah itu saja dan membuat konvergen lebih lambat.

drSPacy_
sumber
0

Ya , Anda perlu skala variabel target. Saya akan mengutip referensi ini :

Variabel target dengan penyebaran nilai yang besar, pada gilirannya, dapat menghasilkan nilai gradien kesalahan besar yang menyebabkan nilai bobot berubah secara dramatis, membuat proses pembelajaran menjadi tidak stabil.

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.

Fernando Wittmann
sumber