Python Классификатор SVM - проблемы с входными NaN и формой данных - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь создать двоичный классификатор SVM с данными ЭКГ для диагностики апноэ во сне. Имея 16 000 нечетных входов, я выполняю вейвлет-преобразование, вручную извлекаю функции HRV и сохраняю их в списке функций, а затем подаю этот список в классификатор.

Это работало нормально с необработанными данными, прежде чем я предварительно обработал их с Шаг вейвлет-преобразования - некоторые значения в списке возможностей стали nan после преобразования, что означало, что я получил эту ошибку для этой строки кода:

clf.fit(X_train, y_train)

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

, поэтому я выполнил этот шаг:

x = pd.DataFrame(data=X_train)
x=x[~x.isin([np.nan, np.inf, -np.inf]).any(1)]

, который решил ValueError, но удалив «ошибочные» входы, означал, что формы X_train и y_train не совпадают:

clf.fit(x, y_train)

#error
Found input variables with inconsistent numbers of samples: [11255, 11627]

Я пытаюсь выяснить, как удалить соответствующие значения из y_train подобрать образцы? Или есть лучший подход к этому?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация о коде.

1 Ответ

2 голосов
/ 01 мая 2020

Без выборочных данных невозможно провести тестирование. Но вы проверяете действительные данные в X_train фрейме данных. И это хорошо. Теперь вам просто нужно удалить соответствующие метки Y_train. Примерно так:

x = pd.DataFrame(data=X_train)
valid_indexes = ~x.isin([np.nan, np.inf, -np.inf]).any(1)
x=x[valid_indexes]

Y_train = Y_train[valid_indexes]

Убедитесь, что вы всегда проверяете действительные данные на данных X_train. Это потому, что, как я полагаю, все метки действительны.

...