Próbuję użyć straty kwadratowej, aby dokonać klasyfikacji binarnej na zestawie danych zabawki.
Korzystam z mtcars
zestawu danych, wykorzystuję milę na galon i wagę, aby przewidzieć rodzaj transmisji. Poniższy wykres pokazuje dwa typy danych typu transmisji w różnych kolorach oraz granicę decyzji wygenerowaną przez inną funkcję strat. Kwadratowa strata wynosi
gdzie to podstawa prawdy (0 lub 1), a to przewidywane prawdopodobieństwo . Innymi słowy, zastępuję stratę logistyczną stratą kwadratową w ustawieniach klasyfikacji, inne części są takie same.
Na przykład zabawki z mtcars
danymi w wielu przypadkach otrzymałem model „podobny” do regresji logistycznej (patrz poniższy rysunek z losowym ziarnem 0).
Ale w niektórych przypadkach (jeśli to zrobimy set.seed(1)
) kwadratowa strata wydaje się nie działać dobrze.
Co tu się dzieje? Optymalizacja nie jest zbieżna? Utratę logistyczną łatwiej zoptymalizować w porównaniu do straty kwadratowej? Każda pomoc będzie mile widziana.
Kod
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))
źródło
optim
mówi ci, że jeszcze się nie skończył, to wszystko: zbiega się. Możesz się wiele nauczyć, ponownie uruchamiając kod z dodatkowym argumentemcontrol=list(maxit=10000)
, wykreślając jego dopasowanie i porównując jego współczynniki z oryginalnymi.Odpowiedzi:
Wygląda na to, że naprawiłeś problem w swoim konkretnym przykładzie, ale myślę, że nadal warto dokładniej przestudiować różnicę między regresją logistyczną najmniejszych kwadratów i maksymalnego prawdopodobieństwa.
Zdobądźmy notację. NiechL.S.( yja, y^ja)=12(yi−y^i)2 iL.L.( yja, y^ja) = yjalogy^ja+ ( 1 - yja)log(1−y^i) . Jeśli robimy maksymalnego prawdopodobieństwa (lub minimalny negatywny dziennika prawdopodobieństwo jak tu robię), mamy
p L:=argminb∈pβ^L.: = argminb ∈ Rp- ∑i = 1nyjalogsol−1(xTib)+(1−yi)log(1−g−1(xTib))
pomocąg jest naszą funkcją łącza.
Alternatywnie mamy p S : = argmin b ∈ R t 1β^S:=argminb∈Rp12∑i=1n(yi−g−1(xTib))2
jako rozwiązanie najmniejszych kwadratów. Zatem β SminimalizujeLS,podobnie doLl.β^S LS LL
NiechfS i fL być celem funkcje odpowiadające minimalizując LS i LL , odpowiednio, jak to ma miejsce na P S i p L . Ostatecznie, niech H = g - 1 tak, Y i = H ( x T i b ) . Zauważ, że jeśli używamy linku kanonicznego, mamy
h ( z ) = 1β^S β^L h=g−1 y^i=h(xTib) h(z)=11+e−z⟹h′(z)=h(z)(1−h(z)).
Do regularnego regresji logistycznej mamy∂fL∂bj=−∑i=1nh′(xTib)xij(yih(xTib)−1−yi1−h(xTib)).
Używająch′=h⋅(1−h) , możemy uprościć to do
∂fL∂bj=−∑i=1nxij(yi(1−y^i)−(1−yi)y^i)=−∑i=1nxij(yi−y^i)
so
∇fL(b)=−XT(Y−Y^).
Następnie zróbmy drugie pochodne. Hesjan
Let's compare this to least squares.
For the Hessian we can first write∂fS∂bj=−∑i=1nxij(yi−y^i)y^i(1−y^i)=−∑i=1nxij(yiy^i−(1+yi)y^2i+y^3i).
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).
źródło
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
źródło