¿Cómo entreno una regresión (logística) en R usando la función de pérdida L1?

11

Puedo entrenar una regresión logística al Rusar

glm(y ~ x, family=binomial(logit)))

pero, IIUC, esto optimiza la probabilidad de registro.

¿Hay alguna forma de entrenar el modelo utilizando la función de pérdida lineal ( ) (que en este caso es la misma que la distancia de variación total )?L1

Es decir, dado un vector numérico y un bit (lógico) vector , Quiero construir un monotónica (de hecho, aumentar) la función tal quese minimizaxyf|f(x)y|

Ver también

sds
fuente
Lo que quieres no existe, y para ser franco, no tiene mucho sentido. Podemos analizar alternativas, pero debe indicar más a fondo qué está tratando de hacer. ¿Por qué quiere ajustar un modelo logístico con una pérdida L1?
user603
@ user603: Porque quiero evaluar mi modelo usando TVD
sds
Usted parece estar hablando de ajuste de una logística curva a los datos, en lugar de ajustar los datos distribuidos binomialmente-- es decir, una forma de regresión no lineal , pero utilizando en lugar de norma. De hecho, la función de pérdidasugiere que el máximo no es (si ese es el caso, hace referencia al engaño binomial GLM). Por otro lado, si realmente está restringido a 0-1, la función de pérdida no tiene sentido. ¿Puede dar detalles de su situación real por favor? L 2| f ( x ) - y | 1L1L2|f(x)y|1
Glen_b -Reinstate a Monica
Tenga en cuenta que la ayuda le pide que no publique la misma pregunta en varios sitios, sino que elija un solo sitio. Si más tarde cambia de opinión sobre qué sitio es mejor, márquelo para la atención del moderador y solicite que se mueva.
Glen_b -Reinstate a Monica
@Glen_b: Creo que el "bit (lógico) vector y" implica una respuesta 0/1.
sds

Respuestas:

21

Lo que quieres hacer no existe porque es, por falta de una mejor palabra, matemáticamente defectuoso.

Pero primero, destacaré por qué creo que las premisas de su pregunta son sólidas. Luego trataré de explicar por qué creo que las conclusiones que extraes de ellos se basan en un malentendido del modelo logístico y, finalmente, sugeriré un enfoque alternativo.

Voy a denotar sus observaciones (las letras más en negrilla denotan vectores) que se encuentran en espacio tridimensional (la primera entrada de es 1) con , y np x{(xxi,yi)}i=1nnp p<n y i[0,1]xxip<nyi[0,1] es una función monótona de xf(xxi)=f(xxiββ) , digamos como lacurva logísticapara arreglar ideas. Por conveniencia, supondré que n essuficientementegrande en comparación con p .xxiββnp

Tiene razón en que si tiene la intención de utilizar TVD como criterio para evaluar el modelo ajustado, entonces es razonable esperar que su ajuste optimice ese mismo criterio entre todos los posibles candidatos, en sus datos. Por lo tanto

ββ=argminββRp||yyf(xxiββ)||1

El problema es el término de error : y si aplicamos (simplemente queremos que nuestro modelo sea asintóticamente imparcial ), entonces, debe ser heteroscedastic . Esto se debe a que puede tomar dos valores, 0 y 1. Por lo tanto, dado , también solo puede tomar dos valores: cuando , que ocurre con probabilidad y cuandoE ( ϵϵi=yif(xxiββ)ϵ i y i xE(ϵϵ)=0ϵi yiϵ i 1-f( xxxiϵiy i = 1 f ( x1f(xxiββ)yi=1- f ( xf(xxiββ)y i = 1 1 - f ( xf(xxiββ)yi=1, que ocurre con probabilidad .1f(xxiββ)

Estas consideraciones juntas implican que:

var(ϵϵ)=E(ϵϵ2)=(1f(xxββ))2f(xxββ)+(f(xxββ))2(1f(xxββ))=(1f(xxββ))f(xxββ)=E(yy|xx)E(1yy|xx)

por lo tanto, no es constante sino que tiene forma de parábola cóncava y se maximiza cuando es tal que .xvar(ϵϵ) E ( y | xxxE(y|xx).5

Esta heterocedasticidad inherente de los residuos tiene consecuencias . Implica, entre otras cosas, que al minimizar la función de pérdida , está asintóticamente parte de su muestra. Es decir, los ajustados no se ajustan a los datos en absoluto, sino solo la parte de los mismos que se agrupa alrededor de los lugares donde es tal que . A saber, estos son los puntos de datos menos informativos en su muestra : corresponden a aquellas observaciones para las cuales el componente de ruido es el más grande. Por lo tanto, su ajuste se tira hacia , por ejemplo, irrelevante.βl1xββ E ( yxxβE(yy|xx).5ββ=ββ:f(xxββ).5

Una solución, como queda claro en la exposición anterior, es eliminar el requisito de imparcialidad. Una forma popular de sesgar el estimador (con alguna interpretación bayesiana adjunta) es incluir un término de contracción. Si volvemos a escalar la respuesta:

yi+=2(yi.5),1in

y, por conveniencia computacional, reemplace por otra función monótona - será conveniente que la secuela denote el primer componente del vector de parámetros como y los restantes ones - e incluya un término de contracción (por ejemplo, uno de la forma ), el problema de optimización resultante se convierte en:g ( xf(xxββ)c p - 1 γg(xx,[c,γγ])=xx[c,γγ]cp1| El | γγγ||γγ||2

[c,γγ]=argmin[[c,γγ]Rpi=1nmax(0,1yi+xxi[[c,γγ])+12||γγ||2

Tenga en cuenta que en este nuevo problema de optimización (también convexo), la penalización para una observación clasificada correctamente es 0 y crece linealmente con para una clasificación clasificada, como en el pérdida. La solución para este segundo problema de optimización son los famosos coeficientes lineales svm (con separación perfecta). A diferencia de , tiene sentido aprender estos de los datos con una penalización de tipo TVD ('tipo' debido al término de sesgo) . En consecuencia, esta solución está ampliamente implementada. Ver por ejemplo el paquete R LiblineaR .l 1 [ c , γxx[[c,γ]l1 β[c,γγ] [ c , γββ[c,γγ]

usuario603
fuente
Desearía poder darte más de 25 puntos :-)
sds
@sds; gracias: fue una gran pregunta :) Volveré durante el día y completaré los detalles, corregiré algún error tipográfico.
usuario603
8

No estoy seguro de por qué querría usar la pérdida L1 para algo limitado entre 0 y 1. Dependiendo de cuál sea su objetivo, es posible que desee considerar algo como la pérdida de bisagra, que es similar a la pérdida L1 en una dirección y plana en el otro.

En cualquier caso, el siguiente código debe hacer lo que ha pedido. Tenga en cuenta que la respuesta óptima es básicamente una función de paso.

set.seed(1)

# Fake data
x = seq(-1, 1, length = 100)
y = rbinom(100, plogis(x), size = 1) # plogis is the logistic function

# L1 loss
loss = function(y, yhat){
  sum(abs(y - yhat))
}

# Function to estimate loss associated with a given slope & intercept
fn = function(par){
  a = par[1]
  b = par[2]
  loss(y = y, yhat = plogis(a + b * x))
}

# Find the optimal parameters
par = optim(
  par = c(a = 0, b = 0),
  fn = fn
)$par

# Plot the results
plot(y ~ x)
curve(plogis(par[1] + par[2] * x), add = TRUE, n = 1000)
David J. Harris
fuente
0

Puede usar el paquete glmnet para instalar modelos L1, L2. No se limita a la regresión logística sino que la incluye.

Aquí está la viñeta: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

También hay un seminario web: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear es bueno, pero he encontrado que glmnet es más fácil de comenzar. Glmnet incluye una función que realiza la validación cruzada y selecciona un parámetro de regularización para usted en función de diferentes métricas, como el AUC.

Con respecto a la teoría, leería el artículo de tibshiarini sobre el lazo (regularización L1) y el capítulo sobre elementos de aprendizaje estadístico. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Sobre la pérdida de registro, es solo para evaluar modelos. No es una función de pérdida para el ajuste del modelo.

marbel
fuente