J'ai obtenu ValueError lors de la prévision de données de test à l'aide d'un modèle RandomForest.
Mon code:
clf = RandomForestClassifier(n_estimators=10, max_depth=6, n_jobs=1, verbose=2)
clf.fit(X_fit, y_fit)
df_test.fillna(df_test.mean())
X_test = df_test.values
y_pred = clf.predict(X_test)
L'erreur:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Comment trouver les mauvaises valeurs dans le jeu de données test? De plus, je ne veux pas supprimer ces enregistrements. Puis-je simplement les remplacer par la moyenne ou la médiane?
Merci.
python
random-forest
pandas
Edamame
la source
la source
.rolling()
pour remplacer la valeur manquante par la valeur moyenne d'une fenêtre glissante. Si vous voulez quelque chose de plus robuste, utilisez le module <b> missingpy </ b>, que vous pouvez utiliserMissForest
pour une imputation aléatoire basée sur une forêt.En supposant qu’il
X_test
s’agisse d’une base de données de pandas, vous pouvez utiliserDataFrame.fillna
pour remplacer les valeurs de NaN par la moyenne:la source
Pour quiconque passe à travers cela, pour réellement modifier l'original:
Pour écraser l'original:
Pour vérifier si vous êtes dans une copie par rapport à une vue:
la source
N'oublie pas
Ce qui retourne un masque booléen indiquant les valeurs np.nan.
Qui retournent les lignes où np.nan est apparu. Ensuite, par simple indexation, vous pouvez marquer tous vos points np.nan.
la source
N'oubliez pas de vérifier également les valeurs inf. La seule chose qui a fonctionné pour moi:
Et encore mieux si vous utilisez Sklearn
Lorsque number_features serait un tableau des étiquettes number_features, par exemple:
la source
J'ai rencontré un problème similaire et j'ai vu que Numpy gère NaN et Inf différemment.
Si vos données ont Inf, essayez ceci:
Cela donnera un tuple d'emplacement des endroits où les valeurs de NA sont présentes.
Incase si vos données ont Nan, essayez ceci:
la source
Dans la plupart des cas, l'élimination des valeurs infinies et nulles résout ce problème.
se débarrasser des valeurs infinies.
éliminez les valeurs nulles comme vous le souhaitez, des valeurs spécifiques telles que 999, la moyenne, ou créez votre propre fonction pour imputer les valeurs manquantes
ou
la source
Si vos valeurs sont supérieures à
float32
, essayez d’exécuter d’abord un scaler . Il serait plutôt inhabituel que la déviation couvre plus quefloat32
.la source
Voici le code pour savoir "Remplacer NaN par zéro et l'infini par de grands nombres finis". en utilisant numpy.nan_to_num .
Voir aussi la réponse de fernando .
la source