0
votes

Encoder une fonctionnalité catégorielle avec plusieurs catégories par exemple

Je travaille sur un ensemble de données qui a une fonctionnalité qui a plusieurs catégories pour un seul exemple. La fonctionnalité ressemble à ceci: -

                              Feature
0   [Category1, Category2, Category2, Category4, Category5]
1                     [Category11, Category20, Category133]
2                                    [Category2, Category9]
3                [Category1000, Category1200, Category2000]
4                                              [Category12]

Le problème est similaire à la question posée: - Encodez des caractéristiques catégorielles avec plusieurs catégories par exemple - sklearn

Maintenant, je veux vectoriser cette fonctionnalité. Une solution consiste à utiliser MultiLabelBinarizer comme suggéré dans la réponse à la question similaire ci-dessus. Mais, il y a environ 2000 catégories, ce qui donne des données codées clairsemées et très dimensionnelles.

Y a-t-il un autre codage qui peut être utilisé? Ou toute solution possible à ce problème. Merci.


0 commentaires

3 Réponses :


0
votes

Dans de nombreux cas, lorsque j'ai rencontré le problème de générer trop de fonctionnalités à partir d'une colonne avec de nombreuses catégories, j'ai opté pour encodage binaire et cela a fonctionné très bien la plupart du temps et vaut donc peut-être une chance pour vous.

Imaginez que vous avez 9 fonctionnalités, que vous les marquez de 1 à 9 et que vous les encodez maintenant en binaire, vous obtiendrez:

cat 1 - 0 0 0 1
cat 2 - 0 0 1 0
cat 3 - 0 0 1 1
cat 4 - 0 1 0 0 
cat 5 - 0 1 0 1
cat 6 - 0 1 1 0
cat 7 - 0 1 1 1
cat 8 - 1 0 0 0
cat 9 - 1 0 0 1

C'est l'intuition de base derrière Binary Encoder .


PS:

Étant donné que 2 puissance 11 est 2048 et que vous pouvez avoir 2000 catégories environ, vous pouvez réduire vos catégories à 11 des colonnes de fonctionnalités au lieu de plusieurs (par exemple, 1999 dans le cas de one-hot)!


0 commentaires

1
votes

Étant donné un tableau incroyablement clairsemé, on pourrait utiliser une technique de réduction de dimensionnalité telle que l'ACP (analyse en composantes principales) pour réduire l'espace des caractéristiques aux k caractéristiques les plus élevées qui décrivent le mieux la variance.

En supposant que les fonctionnalités MultiLabelBinarizered 2000 = X

model.explained_variance_

Et puis vous pouvez utiliser les K principaux composants comme un espace de fonctionnalités dimensionnel plus petit qui peut expliquer une grande partie de la variance pour l'espace de fonctionnalités d'origine.

Si vous voulez comprendre dans quelle mesure le nouvel espace de fonctionnalités plus petit décrit la variance, vous pouvez utiliser la commande suivante

from sklearn.decomposition import PCA
k = 5
model = PCA(n_components = k, random_state = 666)
model.fit(X)
Components = model.predict(X)


0 commentaires

0
votes

J'ai également rencontré ces mêmes problèmes mais j'ai résolu en utilisant Countvectorizer de sklearn.feature_extraction.text simplement en donnant binary = True , c'est-à-dire < code> CounterVectorizer (binaire = Vrai)


0 commentaires