El porqué de los mínimos cuadrados con restricciones

Avisé en mi entrada del otro día: no me preguntéis por qué (imponer restricciones en un problema de mínimos cuadrados).

Pero cuanto más pienso sobre ello, menos claro lo tengo. ¿Por qué restricciones?

Primero, el contexto. O el casi contexto. Porque no es exactamente así. Pero sí parecido. Supongamos que queremos predecir algo y construimos, p.e., 4 modelos. Se nos ocurre (y hay buenas razones para ello) combinar los predictores.

Uno puede pensar en usar la media de las predicciones. O la mediana. O tratar de usar un peso revelado por los datos.

Para esto último puede hacerse lo siguiente: reservar una serie de observaciones (no usadas ni en entrenamiento ni en nada) y construir las predicciones \hat{y}_1, \hat{y}_2, \hat{y}_3 y \hat{y}_4 de y. Con eso se pueden hacer muchas cosas. Por ejemplo, usar un peso inversamente proporcional cierta distancia \|y - \hat{y}_i\|.

O, y a eso voy, buscar los pesos \alpha_i que minimizan \|y - \sum_i \alpha_i \hat{y}_i\| usando, p.e., la norma euclídea.

La pregunta es: ¿tiene sentido imponer \alpha_i > 0 y \sum_i \alpha_i = 1? Por un lado, no. Se supone que lo aprendido de los datos (eso nos cuentan algunos) es preferible a lo apriorístico. Pero entonces ¿cómo interpretar, por ejemplo, coeficientes negativos?

Por otro lado, sí. Los vectores \hat{y}_i están muy correlacionados entre sí y los coeficientes son muy inestables. Tiene sentido tratar de acotar esa inestabilidad esperada introduciendo restricciones (¿no es así como funciona, p.e., lasso?).

En definitiva, que hay argumentos a favor y en contra y sigo sin tener claro hasta qué punto es conveniente plantear restricciones. Y si habrá algún argumento teórico de peso detrás.

¿Alguien se anima a aportar al debate?

3 comentarios sobre “El porqué de los mínimos cuadrados con restricciones

  1. José Luis 9 Junio, 2014 22:06

    Precisamente acabo de ver en unas transparencias de un curso de coursera una forma de combinar los modelos. Básicamente consiste en guardar las predicciones de los diferentes modelos sobre el testing data set y luego ajustar un modelo (no sé si es indiferente cuál ) tomando como predictores las predicciones de los modelos.

    mod.rf <- train(diagnosis ~ ., method="rf",data=training)
    mod.gbm <- train(diagnosis ~ ., method="gbm",data=training)
    mod.lda <- train(diagnosis ~ ., method="lda",data=training)

    stacked.data <- data.frame(diagnosis=testing$diagnosis,
    pred.rf = predict(mod.rf,newdata=testing),
    pred.gbm = predict(mod.gbm, newdata=testing),
    pred.lda = predict(mod.lda, newdata=testing) )
    mod.stacked <- train(diagnosis ~ . , method="rf", data= stacked.data)

  2. José Luis 9 Junio, 2014 22:07

    Se me olvidaba. He utilizado la función train del paquete caret

Los comentarios están desabilitados.