J'ai un cadre de données Pandas qui a Encoding: latin-1
et est délimité par ;
. La trame de données est très grande presque de size: 350000 x 3800
. Au départ, je voulais utiliser sklearn, mais mon cadre de données a des valeurs manquantes (NAN values
), de sorte que je ne pouvais pas utiliser les forêts aléatoires ni le GBM de sklearn. J'ai donc dû utiliser H2O's
forêts aléatoires distribuées pour la formation de l'ensemble de données. Le problème principal est que le cadre de données n’est pas converti efficacement lorsque je fais h2o.H2OFrame(data)
. J'ai vérifié la possibilité de fournir les options d'encodage mais il n'y a rien dans la documentation.
Quelqu'un a-t-il une idée à ce sujet? Toute piste pourrait m'aider. Je souhaite également savoir s’il existe d’autres bibliothèques, telles que H2O, capables de gérer les valeurs NAN de manière très efficace? Je sais que nous pouvons imputer les colonnes, mais je ne devrais pas le faire dans mon jeu de données car mes colonnes sont des valeurs provenant de différents capteurs. Si les valeurs ne sont pas présentes, cela signifie que le capteur n'est pas présent. Je ne peux utiliser que du Python
import h2o
import pandas as pd
df = pd.DataFrame({'col1': [1,1,2], 'col2': ['César Chávez Day', 'César Chávez Day', 'César Chávez Day']})
hf = h2o.H2OFrame(df)
Étant donné que le problème que vous rencontrez est dû au nombre élevé de NAN dans le jeu de données, cela devrait être traité en premier. Il y a deux façons de le faire.
Remplacez NAN
par une valeur unique, manifestement hors de la plage. Ex. Si une fonctionnalité varie entre 0 et 1, remplacez toutes les NAN
par -1 pour cette fonctionnalité.
Utilisez la classe Imputer pour gérer les valeurs NAN. Ceci remplacera NAN
par la moyenne, la médiane ou le mode de cette caractéristique.
S'il existe un grand nombre de valeurs manquantes dans vos données et que vous souhaitez augmenter l'efficacité de la conversion, nous vous recommandons de spécifier explicitement les types de colonne et les chaînes NA
au lieu de laisser H2O l'interpréter. Vous pouvez passer une liste de chaînes à interpréter en tant que NA
s et un dictionnaire spécifiant les types de colonne à la méthode H2OFrame()
.
Cela vous permettra également de créer des étiquettes personnalisées pour les capteurs qui ne sont pas présents, au lieu d'avoir un "non disponible" générique (imputer les valeurs NaN avec une chaîne personnalisée dans les pandas).
import h2o
col_dtypes = {'col1_name':col1_type, 'col2_name':col2_type}
na_list = ['NA', 'none', 'nan', 'etc']
hf = h2o.H2OFrame(df, column_types=col_dtypes, na_strings=na_list)
Pour plus d'informations - http://docs.h2o.ai/h2o/latest-stable/h2o-py/docs/_modules/h2o/frame.html#H2OFrame
Edit: La suggestion de @ErinLeDell d'utiliser h2o.import_file()
directement avec la spécification des types de colonne et la chaîne NA vous donnera la plus grande vitesse d'accélération.