Ich versuche, einen quadratischen Verlust zu verwenden, um eine binäre Klassifizierung für einen Spielzeugdatensatz durchzuführen.
Ich verwende einen mtcars
Datensatz, verwende Meile pro Gallone und Gewicht, um die Übertragungsart vorherzusagen. Das folgende Diagramm zeigt die zwei Arten von Übertragungstypdaten in verschiedenen Farben und die Entscheidungsgrenze, die durch verschiedene Verlustfunktionen erzeugt werden. Der quadrierte Verlust ist
wobei ist die Grundwahrheits Etikett (0 oder 1) und ist die vorhergesagte Wahrscheinlichkeit . Mit anderen Worten, ich ersetze den logistischen Verlust durch den quadratischen Verlust in der Klassifizierungseinstellung, andere Teile sind die gleichen.p i = Logit - 1 ( β T x i )
Für ein Spielzeugbeispiel mit mtcars
Daten habe ich in vielen Fällen ein Modell erhalten, das der logistischen Regression "ähnlich" ist (siehe folgende Abbildung mit zufälligem Startwert 0).
Aber in einigen Fällen (wenn wir dies tun set.seed(1)
) scheint der Quadratverlust nicht gut zu funktionieren.
Was passiert hier? Die Optimierung konvergiert nicht? Ein logistischer Verlust ist einfacher zu optimieren als ein quadratischer Verlust? Jede Hilfe wäre dankbar.
Code
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))
quelle
optim
sagt dir, dass es noch nicht fertig ist, das ist alles: es konvergiert. Sie können eine Menge lernen, indem Sie Ihren Code mit dem zusätzlichen Argument erneut ausführencontrol=list(maxit=10000)
, seine Passung aufzeichnen und seine Koeffizienten mit den ursprünglichen vergleichen.Antworten:
Anscheinend haben Sie das Problem in Ihrem Beispiel behoben, aber ich denke, es lohnt sich immer noch, den Unterschied zwischen der logistischen Regression der kleinsten Quadrate und der maximalen Wahrscheinlichkeit genauer zu untersuchen.
Lassen Sie uns etwas Notation bekommen. LetLS( yich, y^ich) = 12( yich- y^ich)2 undLL(yi,y^i)=yilogy^i+(1−yi)log(1−y^i) . Wenn wir MaximumLikelihood tun (oder minimalen negativen LogLikelihood wie ich hier tue), haben wir
β L:=arg minb∈ Rβ^L:=argminb∈Rp−∑i=1nyilogg−1(xTib)+(1−yi)log(1−g−1(xTib))
mitG unserer LinkFunktion ist.
Alternativ haben wir β S : = arg min b ∈ R p 1β^S: = Argminb ∈ Rp12∑i = 1n( yich- g- 1( xTichb ) )2
als Lösung der kleinsten Quadrate. So β SminimiertLSundähnlicher Weise fürLL.β^S LS LL
LassenfS und fL sein , die Zielfunktionen zur Minimierung der entsprechenden LS und LL jeweils wie für erfolgt ββ^S und β L . Schließlich sei h = g - 1 so y i = h ( x T i b ) . Beachten Sie, dass bei Verwendung des kanonischen Links
h ( z ) = 1 istβ^L h = g- 1 y^ich= h ( xTichb ) h ( z) = 11 + e- z⟹h′(z) = h (z) ( 1 - h (z) ) .
Für eine regelmäßige logistische Regression haben wir∂fL∂bj= -∑i =1nh′(xTichb ) xich j( yichh (xTichb )- 1 - yich1 - h ( xTichb )) .
Mith′= h ⋅ ( 1 - h ) wir dies zu∂fLvereinfachen
∂fL∂bj=−∑i=1nxij(yi(1−y^i)−(1−yi)y^i)=−∑i=1nxij(yi−y^i)
also
∇fL(b)=−XT(Y−Y^).
Als nächstes machen wir zweite Ableitungen. Der Hessische
Vergleichen wir dies mit den kleinsten Quadraten.
This means we have∇fS(b)=−XTA(Y−Y^).
This is a vital point: the gradient is almost the same except for all i y^i(1−y^i)∈(0,1) so basically we're flattening the gradient relative to ∇fL . This'll make convergence slower.
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).
quelle
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
quelle