Wie lässt sich richtig bestimmen, welche Merkmale am meisten zur Vorhersage eines bestimmten Eingabevektors beigetragen haben?

9

Ich verwende die logistische Regression für die binäre Klassifizierung. Ich habe einen großen Datensatz (zufällig sehr unausgeglichen: 19: 1). Also benutze ich Scikit-Learns LogisticRegression(), um 80% meiner beschrifteten Daten zu trainieren, und validierte dann mit den anderen 20% (ich habe mir den Bereich unter ROC sowie den Präzisionsrückruf angesehen, weil die Daten so unausgewogen waren; ich habe auch das Modell mit verwendet class_weight='auto').

Meine Hauptfrage lautet wie folgt: Wenn ich mit der Erstellung von Vorhersagen für unbeschriftete Eingabevektoren (unter Verwendung predict_proba()) beginne , wie kann ich feststellen, welche der Funktionen am meisten zur Vorhersage dieser bestimmten Eingabe beigetragen haben ? Ich stelle mir vor, dass dies anders sein könnte als die "wichtigsten Merkmale", die im Allgemeinen für das Modell basierend auf den gekennzeichneten Trainingsdaten (z. B. Koeffizientengröße) bestimmt werden.

Ich hatte eine sehr grundlegende Idee:

  1. Nehmen Sie das komponentenweise Produkt meiner eingegebenen Merkmalswerte mit dem absoluten Wert meiner Merkmalskoeffizienten. Das am meisten beitragende Merkmal ist dann dasjenige, das dem Eintrag mit dem größten Wert entspricht.

  2. Tun Sie (1), aber verwenden Sie Z-Scores für alles (Trainings- und Eingabefunktionen). Ich dachte, dies wäre wichtig, weil ich befürchtete, dass einige Funktionsbereiche sich stark von anderen unterscheiden könnten und die bloße Einnahme von Produkten dies möglicherweise nicht erfasst. Aber ich denke, die Koeffizienten sollten Bereiche widerspiegeln, also spielt das vielleicht keine Rolle.

Alle Gedanken wären sehr dankbar, da ich neu in diesem Bereich bin. Dinge, die für die logistische Regression spezifisch sind (dh Sigmoid statt nur lineare Funktion), und Hinweise darauf, wie bestimmte Aktionen (z. B. Transformationen) in Scikit-Learn implementiert werden, wären sehr willkommen, da ich tatsächlich ein Projekt mit realen Daten durchführe.

Kilgoretrout
quelle
Ist die logistische Regression nicht eher ein Vorhersagemodell als ein erklärender Typ?
Tagoma
@tagoma es ist beides, oder?
Firebug

Antworten:

2

Es gibt eine Möglichkeit, nur die Regressionskoeffizienten zu verwenden. Sie können verstehen, welche Merkmale am meisten zur Vorhersage eines bestimmten Eingabevektors beitragen.

Sie müssen jedoch zuerst jede Variable standardisieren und skalieren (dh den Mittelwert subtrahieren und durch die Standardabweichung dividieren). Wenn Sie dann Ihr Modell mit den standardisierten und skalierten Daten umrüsten, ist das Merkmal mit dem größten Regressionskoeffizienten das Merkmal, das am meisten zu zukünftigen Vorhersagen beiträgt.

Die Regressionskoeffizienten sind nach der Skalierung vergleichbar, da wir die Einheiten der Merkmale irrelevant gemacht haben. Daher entspricht eine Erhöhung des Merkmals eine Einheit dem Springen um 1 Standardabweichung des nicht skalierten Merkmals.X.1

Alejandro Ochoa
quelle
Alejandro, danke für deine Antwort. Es gibt ein Problem beim Training mit normalisierten Daten. Ich erhalte eine weitaus schlechtere Modellleistung. Meine Fläche unter der ROC-Kurve ist ungefähr 10% kleiner und meine Fläche unter der Präzisionsrückrufkurve ist ebenfalls schlechter. Daher zögere ich, meine Modellanpassung auf normalisierte Daten umzustellen. Sind dies die Kosten, um die von mir gesuchte individuelle Funktionsbedeutung zu erhalten? Gibt es eine andere Art und Weise? Spiegelt die Größe der Koeffizienten nicht ihre Bedeutung wider?
Kilgoretrout
Hmm das ist sehr seltsam. Ich würde nicht erwarten, dass die Normalisierung der Daten Ihre Schätzungen beeinflusst, da die Normalisierung die zugrunde liegenden Beziehungen zwischen Variablen nicht beeinflusst. Ich bin mir nicht sicher, wie ich den prädiktiven Wert einzelner Merkmale auf andere Weise vergleichen kann
Alejandro Ochoa,
2
Wenn Sie nach dem Normalisieren von Features eine schlechtere Leistung in einer linearen Regression feststellen, liegt ein Fehler vor. Die Modelle für normalisierte und normalisierte Prädiktoren sollten genau die gleichen Vorhersagen liefern. Ein Regularisierungsterm kann dies beeinflussen, aber regulierte Modelle sollten immer normalisierte Prädiktoren verwenden.
Matthew Drury
2

Eine Methode, die ich gerne verwende, um zu sehen, welche Funktion zu einer bestimmten Vorhersage beiträgt, besteht darin, alle Funktionen einzeln auf ihren Mittelwert zurückzusetzen und dann zu sehen, wie sich die Vorhersage ändert. Ich habe diese Methode von dieser Seite aufgegriffen . Aber ich werde es auch mit einem eigenen Beispiel erklären.

Nehmen wir zum Beispiel an, wir haben ein Modell, das vorhersagt, ob ein Tag ein guter Tag ist, um Shorts zu tragen, basierend auf einigen Wetterinformationen, sagen wir Temperatur, Wind und Regen. Nehmen wir an, wir verwenden eine Methode, die uns Klassenwahrscheinlichkeiten gibt.

Jetzt haben wir einen Tag, an dem das Modell 50/50 für einen bestimmten Tag vorhersagt, aber wir wollen nicht wissen, was dies verursacht. Wir werden also jedes der Features durchgehen, sie auf ihren Mittelwert (oder 0) zurücksetzen und sehen, was das Modell jetzt vorhersagt.

  • Angenommen, wir haben eine Temperatur von 20 ° C, aber die mittlere Temperatur beträgt 10 ° C. Wenn wir das Modell erneut vorhersagen, wobei die Temperatur für diesen Tag auf den Mittelwert von 10 ° C eingestellt ist, aber Regen und Wind auf den gleichen Werten bleiben, beträgt die Vorhersage 80% für keine Kurzschlüsse. Die Temperatur hat eindeutig einen großen Einfluss! Jetzt können wir dasselbe für die anderen Variablen tun.

  • Die Windgeschwindigkeit liegt leicht über dem Durchschnitt. Wenn Sie den Wind auf den Mittelwert zurücksetzen und die anderen gleich halten, ändert sich die Vorhersage für Shorts nur geringfügig auf 55%. Die Temperatur scheint eine größere Sache zu sein.

  • Jetzt ist der Regen etwas seltsam, da der Regen bereits im Mittel liegt. Ein Zurücksetzen auf den Mittelwert hätte also offensichtlich keine Auswirkung. Aber wir wollen immer noch wissen, ob Regen die Vorhersage beeinflusst. Wir können also stattdessen den Regen auf 0 setzen. Und siehe da, sobald wir den Regen auf 0 setzen, sagt das Modell 75% für Shorts voraus. Wieder ein ziemlich großer Effekt.

Indem wir jedes Merkmal durchgingen und auf ihren Mittelwert oder 0 setzten, konnten wir auf einer Vorhersageebene identifizieren, welche Merkmale wichtig waren. Wind und Temperatur hatten beide einen großen Effekt in beide Richtungen, während der Wind einen viel geringeren Effekt hatte.

Warum haben wir den Regen auf 0 zurückgesetzt? Dies für Temperatur oder Wind zu tun, wäre seltsam gewesen, da für diese 0 ein Wert ist, der kaum jemals vorkommt und wenig Bedeutung hat, aber für Regen ist 0 relativ häufig und bedeutet etwas Bestimmtes, einen trockenen Tag. Das heißt, es ist sinnvoll, auf 0 zurückzusetzen. Sie müssen sich also wirklich eine Feature-für-Feature-Basis ansehen, was Sinn macht.

Marijn Stevering
quelle