Einfache binäre Logistische regression mit Hilfe von MATLAB
Ich arbeite dabei eine Logistische regression mit Hilfe von MATLAB eine einfache Klassifizierung problem. Meine kovariable ist eine kontinuierliche variable zwischen 0 und 1, während meine kategorische Antwort ist eine binäre variable mit 0 (falsch) oder 1 (richtig).
Ich bin auf der Suche, um zu führen eine Logistische regression zu etablieren, ein Indikator, dass würde Ausgang die Wahrscheinlichkeit, dass einige input-Beobachtung (z.B. die kontinuierliche variable wie oben beschrieben), wird richtig oder falsch. Obwohl dies ist ein ziemlich einfaches Szenario, ich habe einige Probleme bei der Ausführung dieses in MATLAB.
Mein Ansatz ist wie folgt: ich habe eine Spalte vector X
enthält die Werte der kontinuierlichen Variablen, und eine andere gleich große Spalten-Vektor Y
enthält die bekannte Klassifizierung der einzelnen Werte von X
(z.B. 0 oder 1). Ich bin mit dem folgenden code:
[b,dev,stats] = glmfit(X,Y,'binomial','link','logit');
Aber das gibt mir unsinnige Ergebnisse mit einem p = 1.000
, die Koeffizienten ( b
), die extrem hoch sind (-650.5, 1320.1), und die zugehörigen standard-Fehler-Werte in der Größenordnung von 1e6.
Habe ich dann versucht mit einem zusätzlichen parameter legen Sie die Größe für meine Binomialverteilung Beispiel:
glm = GeneralizedLinearModel.fit(X,Y,'distr','binomial','BinomialSize',size(Y,1));
Dieser gab mir Ergebnisse, die mehr im Einklang mit dem, was ich erwartet hatte. Ich extrahiert die Koeffizienten, die verwendet glmval
zu erstellen Schätzungen (Y_fit = glmval(b,[0:0.01:1],'logit');
), und erstellt ein array für die Montage (X_fit = linspace(0,1)
). Wenn ich überzog die Grundstücke der ursprünglichen Daten und das Modell mit figure, plot(X,Y,'o',X_fit,Y_fit'-')
das resultierende Diagramm des Modells im wesentlichen aussah wie der untere 1/4. der " S " - förmigen Grundstück, das ist typisch mit der logistischen regression plots.
Meine Fragen sind wie folgt:
1) Warum hat meine Verwendung von glmfit
seltsame Ergebnisse?
2) Wie gehe ich bei der Bewältigung meiner ersten Frage: da einige input-Wert, was ist die Wahrscheinlichkeit, dass seine Einstufung richtig ist?
3) Wie bekomme ich die vertrauensbereiche für mein Modell-Parameter? glmval
sollte in der Lage sein, die Eingabe der stats
Ausgabe von glmfit
, aber meine Verwendung der glmfit
gibt nicht die richtigen Ergebnisse.
Kommentare und input wäre sehr hilfreich, danke!
UPDATE (3/18/14)
Fand ich, dass mnrval
zu geben scheint vernünftige Ergebnisse. Ich kann verwenden [b_fit,dev,stats] = mnrfit(X,Y+1);
wo Y+1
macht einfach meine binären Klassifikator in eine Nominale ein.
Kann ich eine Schleife durch [pihat,lower,upper] = mnrval(b_fit,loopVal(ii),stats);
verschiedene pihat
Wahrscheinlichkeitswerte, wo loopVal = linspace(0,1)
oder einige geeignete Eingangsbereich und `ii = 1:length(loopVal)'.
Den stats
parameter hat eine große Korrelation (0.9973), aber die p-Werte für b_fit
sind 0.0847 und 0.0845, die ich bin mir nicht ganz sicher, wie Sie Sie interpretieren. Irgendwelche Gedanken? Auch deshalb würden mrnfit
Arbeit über glmfit
in meinem Beispiel? Ich sollte beachten Sie, dass die p-Werte für die Koeffizienten bei Verwendung GeneralizedLinearModel.fit
waren beide p<<0.001
, und der Koeffizient Schätzungen waren sehr unterschiedlich als gut.
Schließlich, wie macht man das interpretieren die dev
Ausgabe vom mnrfit
Funktion? Die MATLAB-Dokument besagt, dass "die Abweichung von der Passform bei der Lösung von vector. Die Abweichung ist eine Verallgemeinerung der residualen Summe der Quadrate". Ist dies sinnvoll, da eine stand-alone-Wert, oder ist das nur im Vergleich zu dev
Werte aus anderen Modellen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie Ihre Daten Linear trennbar. Kurz gesagt, bedeutet dies, dass, da Ihre Eingabedaten ist eindimensional, dass es einen gewissen Wert von
x
so, dass alle Wertex < xDiv
gehören zu einer Klasse (sageny = 0
) und alle Werte vonx > xDiv
gehören zu der anderen Klasse (y = 1
).Wenn Ihr Daten waren zwei-dimensional, das heißt, Sie könnten zeichnen Sie eine Linie durch Ihre zwei-dimensionalen Raum
X
solche, die allen Instanzen einer bestimmten Klasse sind auf einer Seite der Linie.Dies ist eine schlechte Nachricht für die Logistische regression (LR) als LR ist nicht wirklich bedeutete, um mit Problemen umzugehen, wo die Daten sind Linear trennbar.
Logistischen regression versucht, um fit einer Funktion der folgenden form:
Es werden nur Werte von
y = 0
odery = 1
wenn der Ausdruck in der Exponentialfunktion im Nenner ist negativ unendlich oder unendlich.Nun, weil Ihre Daten Linear trennbar, und Matlab ist LR Funktion versucht zu finden, eine maximum-likelihood-fit der Daten erhalten Sie extreme Gewicht Werte.
Dies ist nicht unbedingt eine Lösung, sondern versuchen, spiegeln die Etiketten nur auf Ihre Daten-Punkte (also für index -
t
woy(t) == 0
sety(t) = 1
). Dies bewirkt, dass Ihre Daten nicht mehr Linear trennbar und das Gelernte Gewicht Werte gezogen werden dramatisch näher an null.