Estou tentando usar a perda ao quadrado para fazer a classificação binária em um conjunto de dados de brinquedo.
Estou usando o mtcars
conjunto de dados, use milhas por galão e peso para prever o tipo de transmissão. O gráfico abaixo mostra os dois tipos de dados do tipo de transmissão em cores diferentes e o limite de decisão gerado por diferentes funções de perda. A perda ao quadrado é
que é o rótulo de verdade fundamental (0 ou 1) e é a probabilidade prevista . Em outras palavras, substituo a perda logística pela perda ao quadrado na configuração de classificação, outras partes são iguais.
Para um exemplo de brinquedo com mtcars
dados, em muitos casos, recebi um modelo "semelhante" à regressão logística (veja a figura a seguir, com semente aleatória 0).
Mas em algumas situações (se o fizermos set.seed(1)
), a perda ao quadrado parece não estar funcionando bem.
O que esta acontecendo aqui? A otimização não converge? A perda logística é mais fácil de otimizar em comparação com a perda ao quadrado? Qualquer ajuda seria apreciada.
Código
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))
fonte
optim
diz que não terminou, é tudo: está convergindo. Você pode aprender muito reexecutando seu código com o argumento adicionalcontrol=list(maxit=10000)
, plotando seu ajuste e comparando seus coeficientes com os originais.Respostas:
Parece que você resolveu o problema em seu exemplo específico, mas acho que ainda vale a pena um estudo mais cuidadoso da diferença entre mínimos quadrados e regressão logística de máxima probabilidade.
Vamos fazer uma anotação. Seja e . Se estivermos fazendo a máxima probabilidade (ou mínima probabilidade de log negativo como estou fazendo aqui), teremos com sendo nossa função de ligação .LS(yi,y^i)=12(yi−y^i)2 LL(yi,y^i)=yilogy^i+(1−yi)log(1−y^i) β G:=argminb∈ R p- n ∑ i=1yiβ^L:=argminb∈Rp−∑i=1nyilogg−1(xTib)+(1−yi)log(1−g−1(xTib)) g
Como alternativa, temos como a solução dos mínimos quadrados. Assim, minimiza e da mesma forma para .β^S: = argminb ∈ Rp12∑i = 1n( yEu- g- 1( xTEub ) )2 β SGSGGβ^S euS eueu
Seja e as funções objetivas correspondentes à minimização de e respectivamente, como é feito para e . Finalmente, deixe so . Observe que, se estivermos usando o link canônico, temosfS feu euS eueu β S β L h = g - 1 y i = h ( x t i b ) H ( z ) = 1β^S β^eu h = g- 1 y^Eu= h ( xTEub ) h ( z) = 11 + e- z⟹h′( z) = h ( z) ( 1 - h ( z) ) .
Para regressão logística regular, temos Usando , podemos simplificar isso para então∂feu∂bj= - ∑i = 1nh′( xTEub ) xeu j( yEuh ( xTEub )−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^).
Em seguida, vamos fazer as derivadas secundárias. The Hessian
Vamos comparar isso com mínimos quadrados.
Isso significa que temos Este é um ponto vital: o gradiente é quase o mesmo, exceto por todos os portanto, basicamente estamos nivelando o gradiente em relação a . Isso tornará a convergência mais lenta.∇ fS( b ) = - XTA ( Y- Y^) . Eu y^Eu( 1 - y^Eu)∈(0,1) ∇fL
Para o Hessiano, primeiro podemos escrever∂fS∂bj=−∑i=1nxij(yi−y^i)y^i(1−y^i)=−∑i=1nxij(yiy^i−(1+yi)y^2i+y^3i).
Isso nos leva aHS:=∂2fS∂bj∂bk=−∑i=1nxijxikh′(xTib)(yi−2(1+yi)y^i+3y^2i).
Seja . Agora temosB=diag(yi−2(1+yi)y^i+3y^2i) HS=−XTABX.
Infelizmente para nós, não é garantido que os pesos em sejam negativos: se então que é positivo se . Da mesma forma, se então que é positivo quando (também é positivo para mas isso não é possível). Isso significa que não é necessariamente PSD, então não apenas estamos esmagando nossos gradientes, o que tornará o aprendizado mais difícil, mas também confundimos a convexidade do nosso problema.B yi=0 yi−2(1+yi)y^i+3y^2i=y^i(3y^i−2) y^i>23 yEu= 1 yEu- 2 ( 1 + yEu) y^Eu+ 3 anos^2Eu= 1 - 4 y^Eu+ 3 anos^2Eu y^Eu< 13 y^Eu> 1 HS
Em suma, não é nenhuma surpresa que a regressão logística dos mínimos quadrados às vezes lute, e no seu exemplo você tem valores ajustados suficientes próximos de ou para que possa ser bem pequeno e, portanto, o gradiente é bastante achatado.0 0 1 y^Eu( 1 - y^Eu)
Conectando isso a redes neurais, mesmo que seja apenas uma humilde regressão logística, acho que com a perda ao quadrado, você está experimentando algo como o que Goodfellow, Bengio e Courville estão se referindo em seu livro Deep Learning quando escrevem o seguinte:
e, em 6.2.2,
(ambos os trechos são do capítulo 6).
fonte
Agradeço a @whuber e @Chaconne pela ajuda. Especialmente @Chaconne, essa derivação é o que eu queria ter há anos.
O problema está na parte de otimização. Se definirmos a semente aleatória como 1, o BFGS padrão não funcionará. Mas se alterarmos o algoritmo e alterar o número máximo de iterações, ele funcionará novamente.
Como o @Chaconne mencionou, o problema é que a perda ao quadrado da classificação não é convexa e é mais difícil de otimizar. Para adicionar à matemática de @ Chaconne, gostaria de apresentar algumas visualizações sobre a perda logística e a perda ao quadrado.
Mudaremos os dados de demonstração de3 2
mtcars
, uma vez que o exemplo original de brinquedo possui coeficientes, incluindo a interceptação. Usaremos outro conjunto de dados de brinquedo gerado a partir de , nesse conjunto de dados, parâmetros, o que é melhor para visualização.mlbench
Aqui está a demo
Os dados são mostrados na figura da esquerda: temos duas classes em duas cores. x, y são dois recursos para os dados. Além disso, usamos a linha vermelha para representar o classificador linear da perda logística, e a linha azul representa o classificador linear da perda ao quadrado.
A figura do meio e a figura à direita mostram o contorno da perda logística (vermelho) e da perda ao quadrado (azul). x, y são dois parâmetros que estamos ajustando. O ponto é o ponto ideal encontrado pelo BFGS.
A partir do contorno, podemos ver facilmente como é mais difícil otimizar a perda ao quadrado: como Chaconne mencionou, é não convexo.
Aqui está mais uma visão do persp3d.
Código
fonte