Saya mencoba menggunakan kuadrat kerugian untuk melakukan klasifikasi biner pada kumpulan data mainan.
Saya menggunakan mtcars
kumpulan data, menggunakan mil per galon dan berat untuk memprediksi jenis transmisi. Plot di bawah ini menunjukkan dua jenis data tipe transmisi dalam warna berbeda, dan batas keputusan dihasilkan oleh fungsi kerugian yang berbeda. Kerugian kuadrat adalah
mana adalah label kebenaran dasar (0 atau 1) dan adalah probabilitas yang diperkirakan . Dengan kata lain, saya mengganti kerugian logistik dengan kerugian kuadrat dalam pengaturan klasifikasi, bagian lain adalah sama.
Sebagai contoh mainan dengan mtcars
data, dalam banyak kasus, saya mendapat model "mirip" dengan regresi logistik (lihat gambar berikut, dengan seed acak 0).
Tetapi dalam beberapa hal (jika kita lakukan set.seed(1)
), kerugian kuadrat tampaknya tidak berfungsi dengan baik.
Apa yang terjadi disini? Optimasi tidak bertemu? Kehilangan logistik lebih mudah dioptimalkan dibandingkan dengan kerugian kuadrat? Bantuan apa pun akan dihargai.
Kode
d=mtcars[,c("am","mpg","wt")]
plot(d$mpg,d$wt,col=factor(d$am))
lg_fit=glm(am~.,d, family = binomial())
abline(-lg_fit$coefficients[1]/lg_fit$coefficients[3],
-lg_fit$coefficients[2]/lg_fit$coefficients[3])
grid()
# sq loss
lossSqOnBinary<-function(x,y,w){
p=plogis(x %*% w)
return(sum((y-p)^2))
}
# ----------------------------------------------------------------
# note, this random seed is important for squared loss work
# ----------------------------------------------------------------
set.seed(0)
x0=runif(3)
x=as.matrix(cbind(1,d[,2:3]))
y=d$am
opt=optim(x0, lossSqOnBinary, method="BFGS", x=x,y=y)
abline(-opt$par[1]/opt$par[3],
-opt$par[2]/opt$par[3], lty=2)
legend(25,5,c("logisitc loss","squared loss"), lty=c(1,2))
sumber
optim
memberitahu Anda itu belum selesai, itu saja: itu sedang konvergen. Anda mungkin belajar banyak dengan menjalankan kembali kode Anda dengan argumen tambahancontrol=list(maxit=10000)
, merencanakan kecocokannya, dan membandingkan koefisiennya dengan yang asli.Jawaban:
Sepertinya Anda telah memperbaiki masalah dalam contoh khusus Anda, tetapi saya pikir ini masih layak untuk studi yang lebih cermat tentang perbedaan antara kuadrat terkecil dan regresi logistik kemungkinan maksimum.
Mari kita mendapatkan beberapa notasi. LetLS(yi,y^i)=12(yi−y^i)2 danLL(yi,y^i)=yilogy^i+(1−yi)log(1−y^i) . Jika kita melakukan kemungkinan maksimum (atau minimum negatif log kemungkinan seperti yang saya lakukan di sini), kita memiliki
β L:=argminb∈ Rβ^L:=argminb∈Rp−∑i=1nyilogg−1(xTib)+(1−yi)log(1−g−1(xTib))
dengang menjadi fungsi tautan kami.
Atau kita memiliki β S : = argmin b ∈ R p 1β^S:=argminb∈Rp12∑i=1n(yi−g−1(xTib))2
sebagai solusi kuadrat terkecil. Dengan demikian β SmeminimalkanLSdan juga untukLL.β^S LS LL
BiarkanfS dan fL menjadi fungsi objektif yang sesuai dengan meminimalkan LS dan LL masing-masing seperti yang dilakukan untuk β S dan β L . Akhirnya, mari h = g - 1 sehingga y i = h ( x T i b ) . Perhatikan bahwa jika kita menggunakan tautan kanonik, kita mendapat
h ( z ) = 1β^S β^L h=g−1 y^i=h(xTib) h(z)=11+e−z⟹h′(z)=h(z)(1−h(z)).
Untuk regresi logistik biasa kita harus∂fL∂bj=−∑i=1nh′(xTib)xij(yih(xTib)−1−yi1−h(xTib)).
Menggunakanh′=h⋅(1−h) kita dapat menyederhanakan ini menjadi
∂fL∂bj=−∑i=1nxij(yi(1−y^i)−(1−yi)y^i)=−∑i=1nxij(yi−y^i)
jadi
∇fL(b)=−XT(Y−Y^).
Selanjutnya mari kita lakukan turunan kedua. The Hessian
Mari kita bandingkan ini dengan kuadrat terkecil.
This leads us toHS:=∂2fS∂bj∂bk=−∑i=1nxijxikh′(xTib)(yi−2(1+yi)y^i+3y^2i).
LetB=diag(yi−2(1+yi)y^i+3y^2i) . We now have
HS=−XTABX.
Unfortunately for us, the weights inB are not guaranteed to be non-negative: if yi=0 then yi−2(1+yi)y^i+3y^2i=y^i(3y^i−2) which is positive iff y^i>23 . Similarly, if yi=1 then yi−2(1+yi)y^i+3y^2i=1−4y^i+3y^2i which is positive when y^i<13 (it's also positive for y^i>1 but that's not possible). This means that HS is not necessarily PSD, so not only are we squashing our gradients which will make learning harder, but we've also messed up the convexity of our problem.
All in all, it's no surprise that least squares logistic regression struggles sometimes, and in your example you've got enough fitted values close to0 or 1 so that y^i(1−y^i) can be pretty small and thus the gradient is quite flattened.
Connecting this to neural networks, even though this is but a humble logistic regression I think with squared loss you're experiencing something like what Goodfellow, Bengio, and Courville are referring to in their Deep Learning book when they write the following:
and, in 6.2.2,
(both excerpts are from chapter 6).
sumber
I would thank to thank @whuber and @Chaconne for help. Especially @Chaconne, this derivation is what I wished to have for years.
The problem IS in the optimization part. If we set the random seed to 1, the default BFGS will not work. But if we change the algorithm and change the max iteration number it will work again.
As @Chaconne mentioned, the problem is squared loss for classification is non-convex and harder to optimize. To add on @Chaconne's math, I would like to present some visualizations on to logistic loss and squared loss.
We will change the demo data from3 coefficients including the intercept. We will use another toy data set generated from 2 parameters, which is better for visualization.
mtcars
, since the original toy example hasmlbench
, in this data set, we setHere is the demo
The data is shown in the left figure: we have two classes in two colors. x,y are two features for the data. In addition, we use red line to represent the linear classifier from logistic loss, and the blue line represent the linear classifier from squared loss.
The middle figure and right figure shows the contour for logistic loss (red) and squared loss (blue). x, y are two parameters we are fitting. The dot is the optimal point found by BFGS.
From the contour we can easily see how why optimizing squared loss is harder: as Chaconne mentioned, it is non-convex.
Here is one more view from persp3d.
Code
sumber