[PYTHON] Réduisez les variables factices redondantes avec OneHotEndoder

introduction

Si vous utilisez OneHotEncoder de scikit-learn tel quel, des variables factices seront créées pour le nombre de niveaux de variables catégorielles. Dans ce cas, la colinéarité multiple se produit dans la méthode de régression linéaire, nous voulons donc réduire la variable fictive au nombre de niveaux -1. J'ai trouvé comment le faire, alors prenez-en note.

environnement

Méthode

Si vous définissez l'option de suppression de OneHotEncoder sur "first", la première variable factice sera supprimée.

essayons

Ici, extrayons la colonne qui stocke les variables catégorielles suivantes et en faisons des variables catégoriques.

[['D']
 ['D']
 ['D']
 ['T']
 ['T']
 ['T']
 ['N']
 ['N']
 ['N']]

La source est la suivante. Si vous définissez l'option drop sur "first", vous vous fâcherez si vous ne définissez pas handle_unknown = 'error'.

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import OneHotEncoder
import numpy as np

def main():

    X = np.array([
        [1, "D"],
        [3, "D"],
        [5, "D"],
        [2, "T"],
        [4, "T"],
        [6, "T"],
        [1, "N"],
        [8, "N"],
        [2, "N"],
        ])
    y = np.array([2, 6, 10, 6, 12, 18, 1, 8, 2])

    #Sortez la deuxième rangée
    category = X[:, [1]]
    print(category)
    encoder = OneHotEncoder(handle_unknown='error', drop='first')
    encoder.fit(category)
    result = encoder.transform(category)
    print(result.toarray())


if __name__ == "__main__":
    main()

résultat

Lorsque drop = 'first' n'est pas ajouté.

[[1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]
 [0. 0. 1.]
 [0. 0. 1.]
 [0. 0. 1.]
 [0. 1. 0.]
 [0. 1. 0.]
 [0. 1. 0.]]

Lorsque drop = 'fist' est ajouté

[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 1.]
 [0. 1.]
 [0. 1.]
 [1. 0.]
 [1. 0.]
 [1. 0.]]

La première colonne a certainement disparu. Vous pouvez maintenant appeler la méthode fit sans aucune hésitation.

Recommended Posts

Réduisez les variables factices redondantes avec OneHotEndoder
Définir des variables d'environnement avec lambda-uploader
Apprentissage automatique avec python sans perdre aux variables catégorielles (conversion de variable factice)