Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 12, 2018 01:04:26

Belg
Зарегистрирован: 2018-03-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

При действии MinMaxScaler и при самому предсказанию с помощью рандомного леса выдаётся ошибка:

C:\ProgramData\Anaconda3\lib\site-packages\numpy\core_methods.py:32: RuntimeWarning: invalid value encountered in reduce
return umr_sum(a, axis, dtype, out, keepdims)
ValueError Traceback (most recent call last)
in ()
2
3 scaler = MinMaxScaler()
—-> 4 x_train = scaler.fit_transform(x_train)
5 x_validation = scaler.fit_transform(x_validation)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\base.py in fit_transform(self, X, y, **fit_params)
515 if y is None:
516 # fit method of arity 1 (unsupervised transformation)
–> 517 return self.fit(X, **fit_params).transform(X)
518 else:
519 # fit method of arity 2 (supervised transformation)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\preprocessing\data.py in fit(self, X, y)
306 # Reset internal state before fitting
307 self._reset()
–> 308 return self.partial_fit(X, y)
309
310 def partial_fit(self, X, y=None):

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\preprocessing\data.py in partial_fit(self, X, y)
332
333 X = check_array(X, copy=self.copy, warn_on_dtype=True,
–> 334 estimator=self, dtype=FLOAT_DTYPES)
335
336 data_min = np.min(X, axis=0)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
451 % (array.ndim, estimator_name))
452 if force_all_finite:
–> 453 _assert_all_finite(array)
454
455 shape_repr = _shape_repr(array.shape)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py in _assert_all_finite(X)
42 and not np.isfinite(X).all()):
43 raise ValueError(“Input contains NaN, infinity”
—> 44 “ or a value too large for %r.” % X.dtype)
45
46

ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64’).

Не знаю, с этим делать, NaN быть не должно, так как юзал fillna(0). Чисел, которые не влазят во float64 тоже быть не должно. Понимаю, что инфы мало, но, может, кто натолкнёт на мысль, где хотя б искать проблему.

Офлайн

#2 Апрель 12, 2018 02:09:36

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

x_train – вероятно numpy array;
Значит лучше удостовериться, что точно он не содержит Nanов.

 import numpy as np 
print("The number of nans in x_train: ", np.isnan(x_train).sum())
Также может оказаться так, что когда вы применяется MinMaxScaler там происходит деление на 0, что приводит к inf значению…. Например, np.array()/np.array() – не вызовет исключения DivisionByZero, а будет np.array().

Офлайн

#3 Апрель 12, 2018 13:34:12

Belg
Зарегистрирован: 2018-03-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

scidam
x_train – вероятно numpy array;Значит лучше удостовериться, что точно он не содержит Nanов.
Вообще, x_train- результат разбиения на обучающую и валидационную выборки excel таблицы x, в формате csv и импортированной при помощи pandas. Делал это так:

 from sklearn.model_selection import train_test_split
x_train, x_validation, y_train, y_validation = train_test_split(x, y, test_size=.33, random_state=1)

Сразу после этого идёт следующий код, который, по идее, все NaN убирает, верно?

 x_train = x_train.fillna(0)
x_validation = x_validation.fillna(0)

Это дополнительная инфа, мало ли, поможет. Попробую ваш способ - отпишусь.

Офлайн

#4 Апрель 12, 2018 16:59:34

Belg
Зарегистрирован: 2018-03-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

Вот такую фигню выдаёт. При чём это уже не первый такой стоблик, 2 в принципе не нужных я удалил. А этот удалять нельзя. Кстати, в оригинальной таблице всё норм с этим столбиком, не понимаю, почему он тут весь в нулях.

Прикреплённый файлы:
attachment t2.png (124,4 KБ)

Офлайн

#5 Апрель 12, 2018 20:37:55

Belg
Зарегистрирован: 2018-03-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

scidam
x_train – вероятно numpy array;Значит лучше удостовериться, что точно он не содержит Nanов.
Есть идеи что это? А то времени мало, срочно надо.

Офлайн

#6 Апрель 13, 2018 09:15:41

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Срочно! Ошибка ValueError: Input contains NaN, infinity or a value too large for dtype('float64')

Проверьте type(xtrain) – это Pandas DataFrame?
np.isnan(xtrain).sum() – должно возвращать одно число – 0 либо что-то больше нуля.
Скорее всего у вас xtrain это dataframe, попробуйте передать в MinMaxScaler не dataframe,
а матрицу значений, т.е. xtran.dropna(0).values



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version