Wie trainiere ich eine (logistische?) Regression in R mithilfe der L1-Verlustfunktion?

11

Ich kann eine logistische Regression in der RVerwendung trainieren

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

IIUC optimiert dies jedoch für die Protokollwahrscheinlichkeit.

Gibt es eine Möglichkeit, das Modell mit der linearen ( ) Verlustfunktion zu trainieren (die in diesem Fall der gesamten Variationsentfernung entspricht )?L1

Das heißt, wenn ein numerischer Vektor und ein Bit (logischer) Vektor , möchte ich eine monotone (tatsächlich ansteigende) Funktion so konstruieren, dasswird minimiert.xyf|f(x)y|

Siehe auch

sds
quelle
Was Sie wollen, existiert nicht, und um ehrlich zu sein, macht es nicht viel Sinn. Wir können Alternativen besprechen, aber Sie müssen genauer angeben, was Sie versuchen zu tun. Warum möchten Sie ein Logistikmodell mit einem L1-Verlust ausstatten?
user603
@ user603: Weil ich mein Modell mit TVD
sds
Sie scheinen über das Anpassen einer logistischen Kurve an Daten zu sprechen , anstatt binomial verteilte Daten - das heißt, eine Form der nichtlinearen Regression , aber unter Verwendung der Norm anstelle der Norm. In der Tat ist die Verlustfunktionschlägt vor, dass das Maximum nicht (wenn dies der Fall ist, wird auf das irreführende binomische GLM verwiesen). Auf der anderen Seite, wenn es wirklich ist auf 0-1 beschränkt, wird die Verlustfunktion nicht sinnvoll. Können Sie bitte Einzelheiten zu Ihrer tatsächlichen Situation angeben? L 2| f ( x ) - y | 1L1L2|f(x)y|1
Glen_b -State Monica
Bitte beachten Sie, dass in der Hilfe gefragt wird, ob Sie nicht dieselbe Frage auf mehreren Websites veröffentlichen, sondern stattdessen eine einzelne Website auswählen. Wenn Sie später Ihre Meinung darüber ändern, welche Site die beste ist, markieren Sie sie für die Aufmerksamkeit des Moderators und fordern Sie an, sie zu verschieben.
Glen_b -Reinstate Monica
@Glen_b: Ich denke, "Bit (logischer) Vektor y" impliziert eine 0/1-Antwort.
SDS

Antworten:

21

Was Sie tun möchten, existiert nicht, weil es mangels eines besseren Wortes mathematisch fehlerhaft ist.

Aber zuerst möchte ich betonen, warum ich die Prämissen Ihrer Frage für richtig halte. Ich werde dann versuchen zu erklären, warum ich denke, dass die Schlussfolgerungen, die Sie daraus ziehen, auf einem Missverständnis des logistischen Modells beruhen, und schließlich werde ich einen alternativen Ansatz vorschlagen.

Ich werde Ihre Beobachtungen (die kühneren Buchstaben bezeichnen Vektoren) bezeichnen, die im dimensionalen Raum liegen (der erste Eintrag von ist 1) mit , und ist eine monotone Funktion von , etwa wie die logistische Kurve Ideen zu fixieren. Aus Gründen der Zweckmäßigkeit gehe ich nur davon aus, dass im Vergleich zu ausreichend groß ist . np x{(xxi,yi)}i=1nnp p<n y i[0,1]f( xxxip<nyi[0,1]xf(xxi)=f(xxiββ) n pxxiββnp

Sie haben Recht, wenn Sie TVD als Kriterium zur Bewertung des angepassten Modells verwenden möchten , ist es vernünftig zu erwarten, dass Ihre Anpassung dasselbe Kriterium unter allen möglichen Kandidaten für Ihre Daten optimiert. Daher

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

Das Problem ist der Fehlerterm : und wenn wir erzwingen (wir wollen einfach, dass unser Modell asymptotisch unvoreingenommen ist ), dann muss sein heteroskedastischen . Dies liegt daran nur zwei Werte annehmen kann, 0 und 1. Daher gegeben , können auch nur zwei Werte annehmen: , wenn , tritt mit der Wahrscheinlichkeit und wennϵi=yif(xxiββ)E(ϵϵ)=0ϵi yixxiϵi1f(xxiββ)yi=1f(xxiββ)f(xxiββ)yi=1, die mit der Wahrscheinlichkeit .1f(xxiββ)

Diese Überlegungen zusammen implizieren Folgendes:

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

daher ist nicht konstant, sondern konkav und wird maximiert, wenn ist, dass .var(ϵϵ)xxE(y|xx).5

Diese inhärente Heteroskedastizität der Residuen hat Konsequenzen . Dies impliziert unter anderem, dass Sie bei der Minimierung der Verlustfunktion einen Teil Ihrer Stichprobe asymptotisch übergewichten. Das heißt, das angepasste passt überhaupt nicht zu den Daten, sondern nur zu dem Teil davon, der um Orte gruppiert ist, an denen ist, dass . Dies sind die am wenigsten informativen Datenpunkte in Ihrer Stichprobe : Sie entsprechen den Beobachtungen, für die die Rauschkomponente am größten ist. Daher wird Ihre Anpassung in Richtung , z. B. irrelevant gemacht.l1ββxxE(yy|xx).5ββ=ββ:f(xxββ).5

Eine Lösung, wie aus der obigen Darstellung hervorgeht, besteht darin, das Erfordernis der Unparteilichkeit fallen zu lassen. Eine beliebte Methode, den Schätzer zu beeinflussen (mit einigen Bayes'schen Interpretationen), ist das Einfügen eines Schrumpfungsbegriffs. Wenn wir die Antwort neu skalieren:

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

und ersetzen Sie aus durch eine andere monotone Funktion --Es wird bequem sein , für die Fortsetzung der erste Komponente des Vektors der Parameter zu bezeichnen und die restlichen Einsen - und umfasst einen Schrumpfungs Term (zum Beispiel eine der Form ) wird das resultierende Optimierungsproblem:f(xxββ)g(xx,[c,γγ])=xx[c,γγ]cp1γγ||γγ||2

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

Beachten Sie, dass bei diesem neuen (ebenfalls konvexen) Optimierungsproblem die Strafe für korrekt klassifizierte Beobachtungen 0 ist und linear mit für eine klassifizierte Beobachtung wächst - wie in Verlust. Die Lösung für dieses zweite Optimierungsproblem sind die berühmten linearen svm-Koeffizienten (mit perfekter Trennung). Im Gegensatz zu ist es sinnvoll, diese aus den Daten mit einer TVD-Strafe zu lernen ('Typ' wegen des Bias-Terms). . Folglich ist diese Lösung weit verbreitet. Siehe zum Beispiel das R-Paket LiblineaR .xx[[c,γ]l1[c,γγ]ββ[c,γγ]

user603
quelle
Ich wünschte, ich könnte Ihnen mehr als 25 Punkte geben :-)
SDS
@sds; danke: es war eine tolle Frage :) Ich werde tagsüber wiederkommen und die Details eintragen, Tippfehler korrigieren.
user603
8

Ich bin mir nicht sicher, warum Sie den L1-Verlust für etwas verwenden möchten, das zwischen 0 und 1 liegt. Je nachdem, was Ihr Ziel ist, möchten Sie möglicherweise stattdessen einen Scharnierverlust in Betracht ziehen, der dem L1-Verlust in eine Richtung und flach ähnelt in dem anderen.

In jedem Fall sollte der folgende Code das tun, wonach Sie gefragt haben. Beachten Sie, dass die optimale Antwort im Grunde eine Schrittfunktion ist.

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
quelle
0

Sie können das glmnet-Paket für die Montage von L1- und L2-Modellen verwenden. Es ist nicht auf logistische Regression beschränkt, sondern schließt sie ein.

Hier ist die Vignette: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

Es gibt auch ein Webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear ist gut, aber ich habe festgestellt, dass glmnet einfacher zu starten ist. Glmnet enthält eine Funktion, die eine Kreuzvalidierung durchführt und einen Regularisierungsparameter für Sie auswählt, der auf verschiedenen Metriken wie der AUC basiert.

In Bezug auf die Theorie würde ich das Tibshiarini-Papier über Lasso (L1-Regularisierung) und das Kapitel über Elemente des statistischen Lernens lesen. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Über den Protokollverlust geht es nur um die Bewertung von Modellen. Es ist keine Verlustfunktion für die Modellanpassung.

Marbel
quelle