Sie können kategoriale Variablen in der linearen Regression nicht verwenden. Die lineare Regression behandelt alle Variablen wie numerische Variablen. Wenn Sie also Director1 als 1 und Director2 als 2 codieren, versucht die lineare Regression, eine Beziehung basierend auf diesem Codierungsschema zu finden. Es wird angenommen, Director2 ist doppelt so groß wie Director1. In Wirklichkeit bedeuten diese Zahlen nichts. Sie können sie als 143 und 9879 codieren, es sollte keinen Unterschied geben. Sie haben keine numerische Bedeutung. Um sicherzustellen, dass die lineare Regression sie korrekt behandelt, müssen Sie Dummy-Variablen verwenden.
Mit Dummy-Variablen haben Sie eine Variable für jede Kategorieebene. Zum Beispiel, wenn Sie 3 Direktoren haben, haben Sie 3 Variablen: D1, D2 und D3. D1 hat den Wert 1, wenn der entsprechende Film von Director1 und sonst 0; D2 den Wert 1 hat, wenn der Film durch Director2 und 0 sonst gerichtet war ... also mit einem Satz von Werten D2 D1 D2 D3 D1 D2, Dummy Zugriffe auf Variablen werden:
D1 D2 D3
D2 0 1 0
D1 1 0 0
D2 0 1 0
D3 0 0 1
D1 1 0 0
D2 0 1 0
In der linearen Regression Um Multikollinearität zu vermeiden, verwenden wir nur n-1
dieser Variablen, wobei n
die Anzahl der Kategorien ist (Anzahl der Direktoren für dieses Beispiel). Einer der Direktoren wird als Basis ausgewählt und durch die Konstante im Regressionsmodell dargestellt. Es spielt keine Rolle, welcher. Wenn Sie zum Beispiel D3 ausschließen, wissen Sie, dass der Film von Director3 geleitet wurde, wenn D1=0
und D2=0
. Sie müssen D3=1
nicht angeben.
In scikit-learn wird diese Transformation mit OneHotEncoder durchgeführt. Das Beispiel stammt von scikit-learn documentation:
Sie haben drei kategorische Variablen: Geschlecht, Region und Browser. Geschlecht hat 2 Ebenen: ["male", "female"]
, Region hat drei Ebenen: ["from Europe", "from US", "from Asia"]
und Browser hat vier Ebenen: ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
. Angenommen, sie sind mit nullbasierten Zahlen codiert. Also [0, 1, 2]
bedeutet ein Mann aus USA, der Safari benutzt.
>>> enc = preprocessing.OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'float'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.transform([[0, 1, 3]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])
Mit enc.fit
Scikit-Learn folgert die Anzahl der Ebenen für jede Variable. Für eine Beobachtung wie [0, 1, 3], wenn Sie enc.transform
aufrufen, sehen Sie ihre Dummy-Variablen. Beachten Sie, dass die resultierende Array-Länge 2 + 3 + 4 = 9 ist. Die ersten beiden für Geschlecht (wenn männlich, ist die erste 1), die nächsten drei für Region und so weiter.
Sollte es eine lineare Regression oder etwas anderes sein, wenn Sie versuchen, einen Skalar vorherzusagen. Logistische Regression ist die Wahrscheinlichkeit zu klassifizieren, die eine Reihe von Prädiktoren angibt, die y_hat von Typ A oder B –
Sie könnten sagen - verwenden Sie die Movie_revenue um vorherzusagen, ob der Regisseur Director1 oder Director2 war –
Ja, es ist lineare Regression! – KengoTokukawa