web-dev-qa-db-fra.com

Pd.get_dummies est-il un encodage à chaud?

Étant donné la différence entre le codage à chaud et le codage factice, est le pandas.get_dummies méthode d'encodage à chaud lors de l'utilisation des paramètres par défaut (c'est-à-dire drop_first=False)?

Dans l'affirmative, est-il logique que je supprime l'interception du modèle de régression logistique? Voici un exemple:

# I assume I have already my dataset in a DataFrame X and the true labels in y
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

X = pd.get_dummies(X)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .80)

clf = LogisticRegression(fit_intercept=False)
clf.fit(X_train, y_train)
10
Mattia Paterna

Les variables muettes sont toutes les variables qui sont soit une, soit zéro pour chaque observation. pd.get_dummies lorsqu'il est appliqué à une colonne de catégories où nous avons ne catégorie par observation produira une nouvelle colonne (variable) pour chaque valeur catégorielle unique. Il en placera un dans la colonne correspondant à la valeur catégorielle présente pour cette observation. Cela équivaut à un encodage à chaud.

Le codage à chaud se caractérise par le fait qu'il n'y en a qu'une par ensemble de valeurs catégorielles par observation.

Considérez la série s

s = pd.Series(list('AABBCCABCDDEE'))

s

0     A
1     A
2     B
3     B
4     C
5     C
6     A
7     B
8     C
9     D
10    D
11    E
12    E
dtype: object

pd.get_dummies produira un encodage à chaud. Et oui! il est absolument approprié de ne pas correspondre à l'interception.

pd.get_dummies(s)

    A  B  C  D  E
0   1  0  0  0  0
1   1  0  0  0  0
2   0  1  0  0  0
3   0  1  0  0  0
4   0  0  1  0  0
5   0  0  1  0  0
6   1  0  0  0  0
7   0  1  0  0  0
8   0  0  1  0  0
9   0  0  0  1  0
10  0  0  0  1  0
11  0  0  0  0  1
12  0  0  0  0  1

Cependant, si vous aviez s incluez des données différentes et utilisiez pd.Series.str.get_dummies

s = pd.Series('A|B,A,B,B,C|D,D|B,A,B,C,A|D'.split(','))

s

0    A|B
1      A
2      B
3      B
4    C|D
5    D|B
6      A
7      B
8      C
9    A|D
dtype: object

Alors get_dummies produit des variables factices qui ne sont pas codées à chaud et vous pourriez théoriquement quitter l'interception.

s.str.get_dummies()

   A  B  C  D
0  1  1  0  0
1  1  0  0  0
2  0  1  0  0
3  0  1  0  0
4  0  0  1  1
5  0  1  0  1
6  1  0  0  0
7  0  1  0  0
8  0  0  1  0
9  1  0  0  1
19
piRSquared

Première question : oui, pd.get_dummies() est un codage à chaud dans son état par défaut; voir l'exemple ci-dessous, de pd.get_dummies docs :

s = pd.Series(list('abca'))
pd.get_dummies(s, drop_first=False)

Deuxième question : [édité maintenant que OP inclut un exemple de code] oui, si vous codez à chaud les entrées d'un modèle de régression logistique, il convient pour sauter l'interception.

4
muskrat