Comment pandas catégorique https://pandas.pydata.org/pandas-docs/stable/categorical.html gérer des niveaux nouveaux et invisibles? Je pense à une installation de type scikit-learn. À l'heure actuelle, j'ai quelque chose comme: https://gist.github.com/geoHeil/5caff5236b4850d673b2c9b0799dc2cepandas catégories nouveaux niveaux
def: fit()
for each column:
fit a label encoder:
def: transform()
for each column:
check if column was unseen
yes(unseen) replace
no: label encode
mais cela est assez lent. Apparemment, les arbres de décision comme xgboost ou lightbm peuvent directement gérer des données catégorielles, c'est-à-dire que l'on n'aurait pas besoin de manipuler manuellement cette conversion lente. Mais en regardant leur code https://github.com/Microsoft/LightGBM/blob/master/python-package/lightgbm/sklearn.py#L532 ils semblent utiliser LGBMLabelEncoder
qui est un standard scikit-learn LabelEncoder
.
Je me demande comment cela peut gérer les données non-vues.
Si une conversion manuelle est nécessaire serait pandas.Categorical permettre une conversion plus rapide - même si les niveaux inédits sont dans les nouvelles données?
modifier
S'il vous plaît voir https://github.com/geoHeil/pythonQuestions/blob/master/categorical-encoding.ipynb pour un aperçu que je ne pouvais pas travailler scikit-learn suspects habituels de. Toujours à la recherche de quelque chose de plus performant que ma solution. Aussi lightGBM https://github.com/Microsoft/LightGBM/issues/789 suggère d'utiliser une stratégie de codage personnalisée.
Pandas.Categorical suffit de les remplir avec Nan. Scikit-apprendre également ne pas gérer de nouvelles données, ils seront probablement retirés ou remplacés par Nan. Essayez d'utiliser LabelEncoder avec des données invisibles et vous obtiendrez 'ValueError: y contient de nouvelles étiquettes:'. –
pourquoi cette question est downvoted ?? Je suppose qu'un petit ensemble de données reproductible et un peu désiré pourraient aider à mieux comprendre le problème ... – MaxU
@MaxU Peut-être parce qu'à mon avis c'est plus un problème d'approche algorithmique qu'un problème de programmation. C'est un problème fréquent dans l'apprentissage automatique sur la façon de gérer les données invisibles et [Cross-validated] (http://stats.stackexchange.com) est le bon endroit pour cela. –