Ich habe ein trainiertes logistisches Regressionsmodell, das ich auf einen Testdatensatz anwende. Die abhängige Variable ist binär (boolesch). Für jede Stichprobe im Testdatensatz wende ich das logistische Regressionsmodell an, um eine prozentuale Wahrscheinlichkeit zu generieren, dass die abhängige Variable wahr ist. Dann zeichne ich auf, ob der aktuelle Wert wahr oder falsch war. Ich versuche, eine oder angepasste Zahl wie in einem linearen Regressionsmodell zu berechnen .
Dies gibt mir eine Aufzeichnung für jede Probe im Testsatz wie:
prob_value_is_true acutal_value
.34 0
.45 1
.11 0
.84 0
.... ....
Ich frage mich, wie man die Genauigkeit des Modells prüft. Mein erster Versuch war, eine Kontingenztabelle zu verwenden und "wenn prob_value_is_true
> 0,80, denke, dass der tatsächliche Wert wahr ist" und dann das Verhältnis von korrekten zu falschen Klassifizierungen zu messen. Aber das gefällt mir nicht, weil es sich eher so anfühlt, als würde ich nur die 0,80 als Grenze bewerten, nicht die Genauigkeit des Modells als Ganzes und überhaupt prob_value_is_true
Werte.
Dann habe ich versucht, jeden prob_value_is_true diskreten Wert als Beispiel zu betrachten, indem ich alle Samples mit prob_value_is_true
= 0,34 betrachtete und den Prozentsatz der Samples maß, bei denen der aktuelle Wert wahr ist (in diesem Fall wäre die perfekte Genauigkeit der Prozentsatz der Samples das war wahr = 34%). Ich könnte eine Modellgenauigkeitsbewertung erstellen, indem ich die Differenz bei jedem diskreten Wert von summiere prob_value_is_true
. Die Stichprobengrößen sind hier jedoch ein großes Problem, insbesondere bei den Extremen (nahe 0% oder 100%), so dass die Durchschnittswerte der akuten Werte nicht genau sind. Daher scheint es nicht richtig, sie zur Messung der Modellgenauigkeit zu verwenden.
Ich habe sogar versucht, große Bereiche zu erstellen, um ausreichende Stichprobengrößen (0 - 25, 25 - 50, 50 - 75, 75 - 1,0) sicherzustellen, aber wie man die "Güte" dieses Prozentsatzes des tatsächlichen Werts misst, ist mir ein Rätsel . Angenommen, alle Proben mit prob_value_is_true
Werten zwischen 0,25 und 0,50 haben einen Durchschnitt acutal_value
von 0,45. Ist das gut, da es im Sortiment ist? Schlecht, da es nicht in der Nähe von 37,5% (der Mitte des Bereichs) ist?
Ich bleibe also bei der Frage, wie es scheint, und hoffe, dass jemand mich auf eine Ressource oder Methode hinweisen kann, um eine Genauigkeitsstastik für ein logistisches Regressionsmodell zu berechnen.
quelle
Antworten:
Eine Kennzahl, die häufig zur Validierung der logistischen Regression verwendet wird, ist die AUC der ROC-Kurve (Darstellung der Empfindlichkeit gegenüber der 1-Spezifität - suchen Sie bei Bedarf bei Google nach Begriffen). Dies wertet im Wesentlichen den gesamten Bereich der Schwellenwerte aus.
Ein Nachteil: Die Bewertung des gesamten Bereichs von Schwellenwerten ist möglicherweise nicht das, wonach Sie streben, da dies (normalerweise) Schwellenwerte einschließt, die zu einer sehr großen Anzahl falsch negativer oder falsch positiver Ergebnisse führen. Es gibt Versionen der AUC, die dies berücksichtigen (teilweise AUC). Wenn dies für Sie ein Problem darstellt, können Sie dies überprüfen.
quelle
Es ist richtig, dass Sie sich um das Verhältnis kümmern, das als richtig eingestuft wird, da es hauptsächlich den Effekt einer beliebigen Grenze widerspiegelt. Ich würde zwei Maßnahmen empfehlen. Einer ist der Index- oder ROC-Bereich, wie andere beschrieben haben. Dies hat eine Interpretation, die einfacher ist als das Denken an eine ROC-Kurve und ein Maß für reine prädiktive Diskriminierung ist. Zweitens, schätzen Sie eine kontinuierliche Kalibrierungskurve ohne Datenbündelung. Wenn Vorhersagen für ein unabhängiges Dataset bewertet werden, können Sie bei deaktivierter Ausreißererkennung die Beziehung zwischen vorhergesagtem und tatsächlichem Prob [Y = 1] schätzen. Die Funktion im R- Paket erledigt beides. Andere Funktionen inc
lowess
val.prob
rms
rms
wird dasselbe für die interne Validierung tun und das Resampling verwenden, um die Auswirkungen einer Überanpassung zu beseitigen.quelle
mean(y[x==10]==1)
mean(y[x==20]==1)
Im Allgemeinen ist die Aufgabe, die Sie sich hier gestellt haben, schwierig. Das liegt daran, dass Sie mit logistischer Regression zwei verschiedene Arten von Dingen zu tun haben. Die Vorhersagen des Modells sind eine latente Variable, Ihre beobachtete Antwortvariable (die vermutlich von einer latenten Variablen generiert wird) dagegen nicht. Natürlich werden die Leute oft wissen wollen, wie die vorhergesagte Reaktion aussieht, und das ist absolut vernünftig. Dies ist nur einer dieser Fälle, in denen das Leben nicht fair ist.
quelle
Ich denke, Sie könnten einen Schwellenwert festlegen (z. B. 0,5). Wenn also Ihre Wahrscheinlichkeit gleich oder größer als dieser Schwellenwert ist, wäre Ihre vorhergesagte Klasse 1 und andernfalls 0. Dann könnten Sie ein Maß für Ihre Genauigkeit auf diese Weise erhalten:
Da Ihre Wahrscheinlichkeit die Wahrscheinlichkeit für die Angabe Ihrer Daten (x) ist und Ihr Klassenwert (y) nach Ihrem Modell gleich 1 ist, verstehe ich nicht, warum Sie immer Wahrscheinlichkeitswerte kleiner als 0,5 erhalten. Was ist die Häufigkeit Ihrer tatsächlichen Klassen (actual_value)?
quelle
Vielleicht möchten
softclassval
Sie sich mein Paket ansehen (auf softclassval.r-forge.r-project.org finden Sie auch zwei mündliche Präsentationen, die ich zu den Ideen hinter dem Paket gegeben habe).Ich habe es für ein etwas anderes Problem geschrieben, nämlich wenn der Hinweis (zB Pathologe) "ablehnt", eine klare Klasse zu geben. Sie können es jedoch mit "normalen" harten Klassen verwenden und es vermeidet die Definition eines Schwellenwerts für die Verhärtung der ursprünglich kontinuierlichen Vorhersage - Sie werten also die 0,8 nicht aus.
Ich empfehle jedoch, es zusammen mit beispielsweise einem ROC- oder Spezifitäts-Sensitivitäts-Diagramm zu verwenden: Die Ergebnisse sehen oft ziemlich schlecht aus, da "meine" Methoden bereits geringfügige Abweichungen bestrafen (z. B. 0,9 statt 1 ergeben 0,1 Unterschiede für meine Maße Bei allen Schwellenwerten unter 0,9 wird dies ignoriert. Eigentlich halte ich das eher für einen Vorteil: Das Fehlen dieser Empfindlichkeit gegen kleine Abweichungen ist einer der Hauptkritikpunkte bei solchen "verhärteten" Maßnahmen wie Genauigkeit, Empfindlichkeit, Rückruf usw.
Durch Vergleichen des mittleren absoluten Fehlers (MAE) und des mittleren quadratischen Fehlers (RMSE) können Sie außerdem feststellen, ob Sie viele kleine Abweichungen oder weniger stark falsch eingeschätzte Stichproben haben.
quelle
Führen Sie diese Simulation dann beispielsweise 100 Mal aus. Sie erhalten eine Matrix mit n Zeilen (n ist die Anzahl der Probanden) und k Spalten (in diesem Fall k = 100, die Anzahl der Simulationen). In r Code:
Nun berechnen Sie die Differenz zwischen der in jeder Simulation vorhergesagten und der beobachteten. Berechnen Sie nach der Berechnung dieses Unterschieds einfach die mittlere Anzahl von wahr-positiv und falsch-positiv für jede Zeile (jedes Subjekt) und zeichnen Sie das Histogramm auf. Oder berechnen Sie beides für jede Spalte (Simulation) und zeichnen Sie das Histogramm auf (ich bevorzuge dies).
Ich hoffe es hilft...
quelle
Es gibt viele Möglichkeiten, die Genauigkeit solcher Vorhersagen zu schätzen, und die optimale Auswahl hängt wirklich davon ab, wofür die Schätzung implementiert wird.
Wenn Sie beispielsweise vorhaben, einige Treffer mit hoher Punktzahl für eine teure Folgestudie auszuwählen, möchten Sie möglicherweise die Präzision bei hohen Punktzahlen maximieren. Wenn die Folgestudie jedoch günstig ist, können Sie den Rückruf (die Empfindlichkeit) bei niedrigeren Werten maximieren. Die ROC AUC ist möglicherweise geeignet, wenn Sie eine andere Methode usw. vergleichen.
Auf der praktischen Seite,
R
‚sROCR
enthält Paket 2 nützliche FunktionenZusammen können diese Funktionen eine Vielzahl von Genauigkeitsmaßen berechnen, einschließlich globaler Skalarwerte (z. B. "auc" ) und von der Punktzahl abhängiger Vektoren zum Zeichnen von Rückrufgenauigkeits- und ROC-Kurven ( "prec" , "rec" , "tpr" und "rec") "fpr" usw.)
quelle
Sie müssen definieren, was Sie mit "Genauigkeit" meinen. Was Sie wissen möchten, bitte entschuldigen Sie, dass ich Ihnen die Worte in den Mund genommen habe, wie gut Ihr Modell zu den Trainingsdaten passt und was noch wichtiger ist, wie gut sich dieses Modell auf Proben "verallgemeinert", die nicht zu Ihren Trainingsdaten gehören. Obwohl ROC-Kurven nützlich sein können, um den Kompromiss zwischen Genauigkeit und Wiederaufruf für verschiedene Werte des Schwellenwerts zu analysieren, empfehle ich, der Toolbox den mittleren Fehlerquadrat oder den Brier-Score hinzuzufügen. Die Berechnung ist einfach, und Sie können sofort feststellen, ob sich Änderungen an Features auf die Anpassung des Modells auswirken, wenn sie auf Trainingsdaten angewendet werden. Da in diesem Fall eine Überanpassung möglich ist, ist Ihre Arbeit hier nicht erledigt. Um die Leistung der Generalisierung zu bewerten oder wie gut Sie mit Daten umgehen, die Sie noch nicht gesehen haben, ist dies nicht der Fall. Es reicht nicht aus, um Ihre Leistung anhand der Trainingsmuster zu überprüfen. Natürlich ist Ihr Modell gut darin, denn es sind die Werte, die Sie zur Bestimmung der Koeffizienten für Ihre Logistik verwendet haben. Sie müssen einige Beispiele für Testdaten beiseite legen. Ihre MSE-Leistung für dieses Set sollte Ihre Generalisierungserwartungen entsprechend der Höffding-Ungleichung festlegen. Ihr maximaler Generalisierungsfehler hängt von der Anzahl der Features in Ihrem Modell sowie von der Anzahl der Stichproben ab, die zur Berechnung der Teststatistik verwendet wurden. Denken Sie daran, dass Sie einige Ihrer Trainingsmuster für Testmuster stehlen müssen. Ich empfehle eine 10-fache Kreuzvalidierung, bei der Sie mischen, 90% für das Training und 10% für das Testen auswählen und dann alle Messungen messen, wiederholen und dann mitteln. weil sie die Werte sind, die Sie verwendet haben, um die Koeffizienten für Ihre Logistik zu bestimmen. Sie müssen einige Beispiele für Testdaten beiseite legen. Ihre MSE-Leistung für dieses Set sollte Ihre Generalisierungserwartungen entsprechend der Höffding-Ungleichung festlegen. Ihr maximaler Generalisierungsfehler hängt von der Anzahl der Features in Ihrem Modell sowie von der Anzahl der Stichproben ab, die zur Berechnung der Teststatistik verwendet wurden. Denken Sie daran, dass Sie einige Ihrer Trainingsmuster für Testmuster stehlen müssen. Ich empfehle eine 10-fache Kreuzvalidierung, bei der Sie mischen, 90% für das Training und 10% für das Testen auswählen und dann alle Messungen messen, wiederholen und dann mitteln. weil sie die Werte sind, die Sie verwendet haben, um die Koeffizienten für Ihre Logistik zu bestimmen. Sie müssen einige Beispiele für Testdaten beiseite legen. Ihre MSE-Leistung für dieses Set sollte Ihre Generalisierungserwartungen entsprechend der Höffding-Ungleichung festlegen. Ihr maximaler Generalisierungsfehler hängt von der Anzahl der Features in Ihrem Modell sowie von der Anzahl der Stichproben ab, die zur Berechnung der Teststatistik verwendet wurden. Denken Sie daran, dass Sie einige Ihrer Trainingsmuster für Testmuster stehlen müssen. Ich empfehle eine 10-fache Kreuzvalidierung, bei der Sie mischen, 90% für das Training und 10% für das Testen auswählen und dann alle Messungen messen, wiederholen und dann mitteln. Ihre MSE-Leistung für dieses Set sollte Ihre Generalisierungserwartungen entsprechend der Höffding-Ungleichung festlegen. Ihr maximaler Generalisierungsfehler hängt von der Anzahl der Features in Ihrem Modell sowie von der Anzahl der Stichproben ab, die zur Berechnung der Teststatistik verwendet wurden. Denken Sie daran, dass Sie einige Ihrer Trainingsmuster für Testmuster stehlen müssen. Ich empfehle eine 10-fache Kreuzvalidierung, bei der Sie mischen, 90% für das Training und 10% für das Testen auswählen und dann alle Messungen messen, wiederholen und dann mitteln. Ihre MSE-Leistung für dieses Set sollte Ihre Generalisierungserwartungen entsprechend der Höffding-Ungleichung festlegen. Ihr maximaler Generalisierungsfehler hängt von der Anzahl der Features in Ihrem Modell sowie von der Anzahl der Stichproben ab, die zur Berechnung der Teststatistik verwendet wurden. Denken Sie daran, dass Sie einige Ihrer Trainingsmuster für Testmuster stehlen müssen. Ich empfehle eine 10-fache Kreuzvalidierung, bei der Sie mischen, 90% für das Training und 10% für das Testen auswählen und dann alle Messungen messen, wiederholen und dann mitteln.
quelle
Dies unterliegt keinen willkürlichen Schwellenwerten. Je kleiner das Maß, desto besser.
quelle