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.
Si vous définissez l'option de suppression de OneHotEncoder sur "first", la première variable factice sera supprimée.
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()
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.