Я получил ValueError при прогнозировании тестовых данных с использованием модели RandomForest.
Мой код:
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)
Ошибка:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Как найти неверные значения в тестовом наборе данных? Кроме того, я не хочу отбрасывать эти записи, могу ли я просто заменить их средним или медианным?
Спасибо.
python
random-forest
pandas
Edamame
источник
источник
.rolling()
замены отсутствующего значения на среднее значение скользящего окна. Если вы хотите что-то более надежное, используйте модуль <b> missingpy </ b>, который вы можете использоватьMissForest
для вменения на основе случайного леса.Предполагая,
X_test
что это pandas dataframe, вы можете использоватьDataFrame.fillna
для замены значений NaN на среднее:источник
Для любого, кто сталкивается с этим, чтобы на самом деле изменить оригинал:
Чтобы перезаписать оригинал:
Чтобы проверить, находитесь ли вы в копии против вида:
источник
Не забывай
Который возвращает логическую маску, указывающую значения np.nan.
Которые возвращают строки, где появился np.nan. Затем с помощью простой индексации вы можете пометить все ваши точки, которые являются np.nan.
источник
Не забудьте также проверить значения inf. Единственное, что сработало для меня:
И даже лучше, если вы используете Sklearn
Когда number_features будет массивом меток number_features, например:
источник
Я столкнулся с подобной проблемой и увидел, что numy обрабатывает NaN и Inf по-разному.
Если у вас есть данные Inf, попробуйте это:
Это даст кортеж мест, где присутствуют значения NA.
Если ваши данные содержат Nan, попробуйте это:
источник
В большинстве случаев избавление от бесконечных и нулевых значений решает эту проблему.
избавиться от бесконечных ценностей.
избавьтесь от нулевых значений так, как вам нравится, от конкретного значения, такого как 999, до среднего или создайте свою собственную функцию для вменения пропущенных значений
или
источник
Если ваши значения больше чем
float32
, попробуйте сначала запустить какой-нибудь скейлер . Было бы довольно необычно иметь отклонение, охватывающее более чемfloat32
.источник
Вот код для того, как «Заменить NaN нулем, а бесконечность большими конечными числами». используя numpy.nan_to_num .
Также см . Ответ Фернандо .
источник