Wie standardisiere ich ein Array, wenn die Standardabweichung Null ist?

8

Ich versuche, Datensatzspalten für die lineare Regression zu standardisieren.

Eine der Spalten hat die Standardabweichung = 0.

def standardize(X):
    return (X - mean(X)) / std(X) 

Dieser Code funktioniert also nicht.

Gibt es irgendwelche Tricks, um dieses Problem zu lösen? Ich habe zwei Dinge versucht

  1. Werfen Sie die Spalte mit der Standardabweichung 0 weg, da dies ein nutzloser Parameter ist.
  2. Fügen Sie einem der Elemente der Spalte ein sehr kleines Rauschen wie , damit die Funktion funktioniert.10- -10standardize

Vielen Dank!

Pratik Deoghare
quelle
Du machst es richtig. Als zweite Option ist es besser, jedem Wert in der Spalte zufälliges normalverteiltes Rauschen mit kleiner Standardabweichung hinzuzufügen. Da die erste Option jedoch einfacher ist, wird sie bevorzugt.
O_Devinyak
16
Wenn die Standardabweichung Null ist, wird die Spalte mit einem Wert gefüllt. Wenn Sie also die Daten für die Regression vorbereiten möchten, können Sie die Spalte wegwerfen, da sie nichts zur Regression beiträgt. Das Hinzufügen von kleinem Rauschen führt nur zu weiteren Problemen.
mpiktas
4
(Mit der Einschränkung, dass @mpiktas implizit davon ausgeht, dass die Regression einen konstanten Term enthält, was normalerweise der Fall ist.) Beachten Sie, dass das Hinzufügen von kleinem Rauschen dazu führt, dass diese Spalte und die Konstante extrem parallel sind und möglicherweise alle Arten von Chaos in der Zahl verursachen Lösungen aufgrund hoher Multikollinearität. Aber warum sollten die Spalten überhaupt standardisiert werden? Dies geschieht automatisch mit fast jeder guten Lösungsmethode.
whuber
5
@Pratik, ich glaube nicht, dass es eine Möglichkeit gibt, eine Variable mit einer Varianz von Null in eine Variable mit einem Mittelwert von 0 und einer Varianz 1 umzuwandeln. Wenn Sie die obige Option (2) ausführen, ersetzen Sie Ihre Variable effektiv nur durch standardisierte Zufallszahlen.
Makro

Antworten:

7

Die von Ihnen beschriebene Situation ergibt sich aus einem dieser beiden Szenarien:

  1. Die Spalte, auf die Sie sich beziehen, ist die Spalte mit Einsen , die Ihrer Kovariatenmatrix hinzugefügt wird, sodass Ihre lineare Regression einen Intercept-Term hat .
  2. Die Spalte ist eine andere Spalte als die zuvor erwähnte Spalte von Einsen, sodass Sie zwei Spalten mit Konstanten [****] erhalten.

Für Szenario 1 : Überspringen Sie diese Spalte, standardisieren Sie alle anderen Spalten und führen Sie die Regression wie gewohnt aus.

In Szenario 2 müssen Sie diese zusätzliche konstante Spalte jedoch vollständig entfernen. Unabhängig von der Frage der Standardisierung können Sie die Regression niemals mit zwei konstanten Spalten ausführen, da Sie dann eine perfekte Kollinearität hätten . Das Ergebnis ist , dass selbst wenn Sie versuchen , die Regression ausgeführt wird , wird das Computerprogramm eine Fehlermeldung ausspucken und auf halbem Weg durch [Anmerkung beenden: Das ist , weil eine OLS Regression der Matrix erfordert X'X sein nicht singulär für Dinge zu erarbeiten , korrekt].

Wie auch immer, viel Glück mit deinem, ähm, rückläufigen!

[****] Nur um zu verdeutlichen: Was ich unter "zwei Spalten von Konstanten" verstehe, ist, dass Sie eine Spalte haben, in der jedes Element '1' ist, und eine zweite Spalte, in der jedes Element eine Konstante 'k' ist. .

Steve S.
quelle
1

Der richtige Weg wäre, die Feature-Spalte aus den Daten zu löschen. Aber als vorübergehender Hack -

Sie können für diese Funktion einfach die 0 std durch 1 ersetzen. Dies würde im Grunde bedeuten, dass der skalierte Wert für alle Datenpunkte für dieses Merkmal Null wäre. Dies ist sinnvoll, da dies impliziert, dass die Merkmalswerte nicht einmal ein bisschen vom Mittelwert abweichen (da die Werte konstant sind, ist die Konstante der Mittelwert).

Zu Ihrer Information: Das macht sklearn! https://github.com/scikit-learn/scikit-learn/blob/7389dbac82d362f296dc2746f10e43ffa1615660/sklearn/preprocessing/data.py#L70

PankajKabra
quelle
Die Standardabweichung von 0 bedeutet, dass das Merkmal konstant ist und daher für die Vorhersage nicht nützlich ist. Das Ändern der Standardabweichung für eine Konstante macht keinen Sinn.
Michael R. Chernick
Ja, aus Modellierungssicht macht es keinen Sinn. Ich habe es nur als Hack vorgeschlagen, nicht jedes Mal, wenn ein konstantes Feature in einem Datensatz enthalten ist, die Mühe zu machen, die Spalte zu löschen.
PankajKabra
0

Die Funktion mit der Varianz Null ist nutzlos. Entfernen Sie sie.

Wenn dies die einzige Funktion wäre, würden Sie aus den Daten nichts über die Reaktion auf diese Funktion erfahren. Im multivariaten Fall ist eine lineare Algebra erforderlich, um zu derselben Schlussfolgerung zu gelangen, aber die Idee ist dieselbe.

Aksakal
quelle