Comment former une régression (logistique?) Dans R en utilisant la fonction de perte L1?

11

Je peux former une régression logistique en Rutilisant

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

mais, IIUC, cela optimise la vraisemblance logarithmique.

Existe-t-il un moyen de former le modèle en utilisant la fonction de perte linéaire ( L1 ) (qui dans ce cas est la même que la distance de variation totale )?

C'est-à-dire, étant donné un vecteur numérique x et un vecteur bit (logique) y , je veux construire une fonction monotone (en fait croissante) ftelle que |f(x)y|est minimisé.

Voir également

sds
la source
Ce que vous voulez n'existe pas, et pour être franc, cela n'a pas beaucoup de sens. Nous pouvons discuter d'alternatives mais vous devez indiquer plus en détail ce que vous essayez de faire. Pourquoi voulez-vous adapter un modèle logistique avec une perte L1?
user603
@ user603: Parce que je veux évaluer mon modèle en utilisant TVD
sds
Vous semblez parler d'ajuster une courbe logistique aux données, plutôt que d'ajuster des données à distribution binomiale - c'est-à-dire une forme de régression non linéaire , mais en utilisant la norme plutôt que L 2 . En effet, la fonction de perte | f ( x ) - y | suggère que le maximum n'est pas 1 (si tel est le cas, il fait référence au GLM binomial trompeur). En revanche, si elle est vraiment limitée à 0-1, la fonction de perte n'a pas de sens. Pouvez-vous donner des détails sur votre situation actuelle, s'il vous plaît? L1L2|F(X)-y|1
Glen_b -Reinstate Monica
Veuillez noter que l' aide vous demande de ne pas publier la même question sur plusieurs sites, mais de choisir plutôt un seul site. Si vous changez plus tard d'avis sur le meilleur site, signalez-le à l'attention du modérateur et demandez-lui de le déplacer.
Glen_b -Reinstate Monica
@Glen_b: Je pense que le "vecteur b (logique) y" implique une réponse 0/1.
sds

Réponses:

21

Ce que vous voulez faire n'existe pas car il est, faute d'un meilleur mot, mathématiquement défectueux.

Mais d'abord, je soulignerai pourquoi je pense que les prémisses de votre question sont valables. J'essaierai ensuite d'expliquer pourquoi je pense que les conclusions que vous en tirez reposent sur une mauvaise compréhension du modèle logistique et, enfin, je proposerai une approche alternative.

Je noterai vosnobservations (les lettres les plus audacieuses désignent des vecteurs) qui se trouvent dans l'espace dimensionnelp(la première entrée de x{(XXje,yje)}je=1nnp est 1) avecp<n, y i[0,1]et f( xXXjep<nyje[0,1] est une fonction monotone de xF(XXje)=F(XXjeββ) , disons comme lacourbe logistiquepour fixer les idées. Par commodité, je suppose simplement que n estsuffisammentgrand par rapport à p .XXjeββnp

Vous avez raison de dire que si vous avez l'intention d'utiliser TVD comme critère pour évaluer le modèle ajusté, alors il est raisonnable de s'attendre à ce que votre ajustement optimise ce même critère parmi tous les candidats possibles, sur vos données. Par conséquent

ββ=argminββRp||yy-F(XXjeββ)||1

Le problème est le terme d'erreur : et si nous appliquons E ( ϵϵje=yje-F(XXjeββ) (nous voulons simplement que notre modèle soit asymptotiquementnon biaisé), alors, ϵ i doitêtrehétéroscédastique. En effet, y i ne peut prendre que deux valeurs, 0 et 1. Par conséquent, étant donné xE(ϵϵ)=0ϵje yje , ϵ i ne peut également prendre que deux valeurs:1-f( xXXjeϵje lorsque y i = 1 , ce qui se produit avec la probabilité f ( x1-F(XXjeββ)yje=1 , et - f ( xF(XXjeββ) lorsque y i = 1 , ce qui se produit avec la probabilité 1 - f ( x-F(XXjeββ)yje=11-F(XXjeββ) .

Ensemble, ces considérations impliquent que:

var(ϵϵ)=E(ϵϵ2)=(1-F(XXββ))2F(XXββ)+(-F(XXββ))2(1-F(XXββ))=(1-F(XXββ))F(XXββ)=E(yy|XX)E(1-yy|XX)

d'où n'est pas constant mais en forme de parabole concave et est maximisé lorsque xvar(ϵϵ) est tel que E ( y | xXX .E(y|XX).5

Cette hétéroscédasticité inhérente des résidus a des conséquences . Cela implique entre autres que lorsque vous minimisez la fonction de perte , vous surpondérez asymptotiquement une partie de votre échantillon. Autrement dit, le β ajustél1 ne correspond pas du tout aux données, mais seulement à la partie de celles-ci qui est regroupée autour des endroits où xββ est tel que E ( yXX . À savoir, ce sontles points de données les moins informatifs de votre échantillon: ils correspondent aux observations pour lesquelles la composante de bruit est la plus importante. Par conséquent, votre ajustement est tiré vers βE(yy|XX).5 , p.ex. rendu non pertinent.ββ=ββ:F(XXββ).5

Une solution, comme il ressort de l'exposé ci-dessus, consiste à supprimer l'exigence de non-impartialité. Une façon populaire de biaiser l'estimateur (avec une interprétation bayésienne jointe) est d'inclure un terme de rétrécissement. Si nous redimensionnons la réponse:

yje+=2(yje-.5),1jen

et, pour des raisons de calcul, remplacer par une autre fonction monotone g ( xF(XXββ) --il sera commode pour la suite pour désigner la première composante du vecteur de paramètretant que c et le reste p - 1 les yg(XX,[c,γγ])=XX[c,γγ]cp-1γγ||γγ||2

[c,γγ]=argmin[[c,γγ]Rpje=1nmax(0,1-yje+XXje[[c,γγ])+12||γγ||2

XX[[c,γ] pour un mal classé - comme dans le l1perte. le[c,γγ]solution à ce deuxième problème d'optimisation sont les célèbres coefficients svm linéaires (avec séparation parfaite). Contrairement à laββ, il est logique d'apprendre ces [c,γγ]à partir des données avec une pénalité de type TVD («type» en raison du terme de biais). Par conséquent, cette solution est largement mise en œuvre. Voir par exemple le package R LiblineaR .

user603
la source
J'aimerais pouvoir te donner plus de 25 points :-)
sds
@sds; merci: c'était une excellente question :) Je reviendrai dans la journée et remplirai les détails, corrigera quelques fautes de frappe.
user603
8

Je ne sais pas pourquoi vous voudriez utiliser la perte L1 pour quelque chose contraint entre 0 et 1. Selon votre objectif, vous voudrez peut-être envisager quelque chose comme la perte de charnière, qui est similaire à la perte L1 dans une direction et à plat dans l'autre.

Dans tous les cas, le code ci-dessous devrait faire ce que vous avez demandé. Notez que la réponse optimale est fondamentalement une fonction pas à pas.

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
la source
0

Vous pouvez utiliser le package glmnet pour adapter les modèles L1, L2. Il ne se limite pas à la régression logistique mais l'inclut.

Voici la vignette: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Il existe également un webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear est bon, mais j'ai trouvé glmnet plus facile à démarrer. Glmnet comprend une fonction qui effectue une validation croisée et sélectionne un paramètre de régularisation pour vous en fonction de différentes métriques telles que l'AUC.

Concernant la théorie, je lirais l'article de tibshiarini concernant le lasso (régularisation L1) et le chapitre sur les éléments de l'apprentissage statistique. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

À propos de la perte de journal, c'est juste pour évaluer les modèles. Ce n'est pas une fonction de perte pour l'ajustement du modèle.

marbel
la source