One-Hot vs Dummy-Codierung in Scikit-Learn

50

Es gibt zwei verschiedene Möglichkeiten, kategoriale Variablen zu codieren. Angenommen, eine kategoriale Variable hat n Werte. One-Hot-Codierung konvertiert es in n Variablen, während Dummy-Codierung es in n-1 Variablen konvertiert . Wenn wir k kategoriale Variablen haben, von denen jede n Werte hat. Eine heiße Codierung endet mit kn- Variablen, während die Dummy-Codierung mit kn-k- Variablen endet .

Ich höre, dass bei One-Hot-Codierung das Abfangen zu Kollinearitätsproblemen führen kann, wodurch das Modell nicht klingt. Jemand nennt es " Dummy-Variablenfalle ".

Meine Fragen:

  1. Mit dem linearen Regressionsmodell von Scikit-learn können Benutzer das Abfangen deaktivieren. Soll ich für One-Hot-Codierung immer fit_intercept = False setzen? Für die Dummy-Codierung sollte fit_intercept immer auf True gesetzt werden. Ich sehe keine "Warnung" auf der Website.

  2. Hat One-Hot-Codierung mehr Freiheitsgrade als Dummy-Codierung, da sie mehr Variablen generiert?

Munichong
quelle

Antworten:

35

Mit dem linearen Regressionsmodell von Scikit-learn können Benutzer das Abfangen deaktivieren. Soll ich für One-Hot-Codierung immer fit_intercept = False setzen? Für die Dummy-Codierung sollte fit_intercept immer auf True gesetzt werden. Ich sehe keine "Warnung" auf der Website.

Ja, für ein unregelmäßiges lineares Modell mit One-Hot-Codierung müssen Sie den Achsenabschnitt auf "Falsch" setzen, um eine perfekte Kollinearität zu erzielen. sklearnErlaubt auch eine Gratschrumpfungsstrafe, und in diesem Fall ist dies nicht erforderlich, und tatsächlich sollten Sie sowohl den Achsenabschnitt als auch alle Ebenen einbeziehen. Für die Dummy-Codierung sollten Sie einen Achsenabschnitt einschließen, es sei denn, Sie haben alle Variablen standardisiert. In diesem Fall ist der Achsenabschnitt Null.

Hat One-Hot-Codierung mehr Freiheitsgrade als Dummy-Codierung, da sie mehr Variablen generiert?

Der Achsenabschnitt ist ein zusätzlicher Freiheitsgrad. In einem gut spezifizierten Modell ist also alles gleich.

Was ist beim zweiten, wenn es k kategoriale Variablen gibt? k Variablen werden bei der Dummy-Codierung entfernt. Ist der Freiheitsgrad immer noch der gleiche?

x1,x2,,xn

x1+x2++xn=1

x

x1+x2++xk=1

und so haben Sie eine lineare Abhängigkeit erstellt

x1+x2+xnx1x2xk=0

Sie müssen also ein Level in der zweiten Variablen weglassen, und alles ist richtig ausgerichtet.

Angenommen, ich habe 3 kategoriale Variablen, von denen jede 4 Ebenen hat. Bei der Dummy-Codierung werden 3 * 4-3 = 9 Variablen mit einem Abschnitt erstellt. Bei der One-Hot-Codierung werden 3 * 4 = 12 Variablen ohne Intercept erstellt. Hab ich recht?

3×4=12

Matthew Drury
quelle
Vielen Dank. Was ist beim zweiten, wenn es k kategoriale Variablen gibt? k Variablen werden bei der Dummy-Codierung entfernt. Ist der Freiheitsgrad immer noch der gleiche?
Munichong
@ChongWang Ich habe eine Antwort auf Ihren Kommentar in meine Antwort eingefügt.
Matthew Drury
Entschuldigung, ich verliere mich hier ein wenig. Angenommen, ich habe 3 kategoriale Variablen, von denen jede 4 Ebenen hat. Bei der Dummy-Codierung werden 3 * 4-3 = 9 Variablen mit einem Abschnitt erstellt. Bei der One-Hot-Codierung werden 3 * 4 = 12 Variablen ohne Intercept erstellt. Hab ich recht? Hier ist also der DF der Dummy-Codierung 9-1, während der DF der One-Hot-Codierung 12 ist. Bin ich richtig?
Munichong
@ ChongWang erneut bearbeitet.
Matthew Drury
@MatthewDrury Ich habe das gleiche Problem mit linear_model in sklearn. Nach der Dummy-Codierung funktionieren Decision Tree und KNN in Ordnung, aber die lineare Regression fällt in die Singularität. Ich verstehe aus Ihrer Antwort, dass ich eine "Ebene aus der zweiten Variablen" entfernen sollte, aber ich weiß nicht, was es praktisch bedeutet? Zum Beispiel habe ich 3 numerische Merkmale und 3 kategorische (Hersteller, Modell und Kraftstofftyp). Das Modell ist natürlich vom Hersteller abhängig, da ein Hersteller n Modelle haben kann. Wie gehe ich in einem solchen allgemeinen Szenario vor, wenn ich die lineare Regression verwenden möchte?
Harvey