Я пытаюсь использовать квадратичные потери, чтобы выполнить двоичную классификацию для набора данных игрушек.
Я использую mtcars
набор данных, использую милю на галлон и вес, чтобы предсказать тип передачи. На приведенном ниже графике показаны два типа данных типа передачи в разных цветах и границы решения, сформированные различными функциями потерь. Квадратный убыток равен
где - метка истинности земли (0 или 1), а - прогнозируемая вероятность . Другими словами, я заменяю логистические потери квадратом потерь в настройках классификации, остальные части такие же.y i p i p i = Logit - 1 ( β T x i )
Для игрушечного примера с mtcars
данными во многих случаях я получил модель, «похожую» на логистическую регрессию (см. Следующий рисунок со случайным начальным числом 0).
Но в некоторых случаях (если мы это делаем set.seed(1)
) квадрат потери, кажется, не работает хорошо.
Что здесь происходит? Оптимизация не сходится? Логистические потери легче оптимизировать по сравнению с квадратом потерь? Любая помощь будет оценена.
Код
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))
источник
optim
говорит вам, что это еще не закончено, вот и все: это сходится. Вы можете многому научиться, перезапустив свой код с дополнительным аргументомcontrol=list(maxit=10000)
, построив график его подгонки и сравнив его коэффициенты с исходными.Ответы:
Похоже, что вы исправили проблему в своем конкретном примере, но я думаю, что все же стоит более тщательно изучить разницу между наименьшими квадратами и логистической регрессией с максимальной вероятностью.
Давайте получим некоторые обозначения. ПустьLS(yi,y^i)=12(yi−y^i)2 иLL(yi,y^i)=yilogy^i+(1−yi)log(1−y^i) . Если мы делаем максимальную вероятность (или минимальный журнал вероятность негативногокак я делаю здесь), мы имеем
& beta ; L:=argminб∈ Rβ^L:=argminb∈Rp−∑i=1nyilogg−1(xTib)+(1−yi)log(1−g−1(xTib))
гдеg является нашей функцией связи.
В качестве альтернативы мы имеем & beta ; S : = argmin б ∈ R р 1β^S:=argminb∈Rp12∑i=1n(yi−g−1(xTib))2
как решение наименьших квадратов. Таким образом , β SминимизируетLSи аналогично дляLL.β^S LS LL
ПустьfS и fL быть объективные функции , соответствующие минимуму LS и LL , соответственно , как это делается для бета S и & beta ; L . Пусть , наконец, ч = г - 1 , так у я = ч ( х Т я б ) . Обратите внимание, что если мы используем каноническую ссылку, мы получаем
h ( z ) = 1β^S β^L h=g−1 y^i=h(xTib) h(z)=11+e−z⟹h′(z)=h(z)(1−h(z)).
Для регулярной логистической регрессии имеем∂fL∂bj=−∑i=1nh′(xTib)xij(yih(xTib)−1−yi1−h(xTib)).
Используяh′=h⋅(1−h) мы можем упростить это до
∂fL∂bj=−∑i=1nxij(yi(1−y^i)−(1−yi)y^i)=−∑i=1nxij(yi−y^i)
так
∇fL(b)=−XT(Y−Y^).
Далее давайте сделаем вторые производные. Гессиан
Let's compare this to least squares.
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).
источник
Я хотел бы поблагодарить @whuber и @Chaconne за помощь. Особенно @Chaconne, этот вывод - то, что я хотел иметь в течение многих лет.
Проблема в части оптимизации. Если мы установим случайное начальное число в 1, BFGS по умолчанию не будет работать. Но если мы изменим алгоритм и изменим максимальное число итераций, он снова будет работать.
Как упомянул @Chaconne, проблема в квадрате потерь для классификации невыпуклая и ее сложнее оптимизировать. Чтобы добавить к математике @ Chaconne, я хотел бы представить некоторые визуализации логистических потерь и квадратов потерь.
Мы изменим демонстрационные данные с3 коэффициенты, включая перехват. Мы будем использовать другой игрушечный набор данных, сгенерированный из 2 параметры, которые лучше для визуализации.
mtcars
, так как оригинальный примерmlbench
этого набора данныхВот демо
Данные показаны на левом рисунке: у нас есть два класса в двух цветах. х, у две функции для данных. Кроме того, мы используем красную линию для представления линейного классификатора от логистических потерь, а синяя линия представляет линейный классификатор от квадрата потерь.
Средняя и правая цифры показывают контур логистических потерь (красный) и квадрата потерь (синий). х, у два параметра, которые мы подгоняем. Точка является оптимальной точкой, найденной BFGS.
Из контура мы можем легко увидеть, почему оптимизация квадрата потерь сложнее: как уже упоминал Чакон, он не выпуклый.
Вот еще один вид из persp3d.
Код
источник