Как работать со значениями NaN, где вменение не имеет смысла?(для PCA) - PullRequest
2 голосов
/ 03 апреля 2019

Мне трудно понять, как обращаться с переменными NaN, где вменение данных не имеет смысла.Я пытаюсь сделать кластеризацию текста / документа, и есть некоторые пропущенные значения, которые должны оставаться пропущенными, потому что нет разумного способа их заполнить.Мой набор данных содержит некоторые числовые значения, даты, тексты и т. Д. На самом деле DannyDannyDanny '* пример под подзаголовком "Рассмотрим ситуации, когда вменение не имеет смысла".отличный пример для моей проблемы.Сразу после векторизации мне нужно выполнить PCA, чтобы уменьшить размерность, чтобы я мог работать с большими данными без ошибок памяти и сократить время вычислений.Именно здесь начинается проблема, потому что ни один из алгоритмов PCA scikit-learn не может справиться с NaN (или может?).И заполнение пропущенных значений с помощью sklearn.preprocessing.Imputer не имеет смысла, потому что;

-Не все они являются числовыми или непрерывными значениями.И действительно, есть некоторые столбцы с и без дат!

- Некоторые из них должны оставаться как NaN, потому что в противном случае они могут (или могут?) Иметь нежелательные эффекты для кластеризации.

ИЯ не могу просто удалить столбцы (или строки) из-за нескольких пропущенных значений.Слишком много, чтобы потерять ... Мои вопросы:

  1. Как я могу иметь дело со значениями NaN без влияния на результат кластеризации?(разумное вменение данных или что-то еще ...)
  2. Есть ли какой-нибудь алгоритм PCA, который может работать со значениями NaN в python?

PS: извините за мой плохой английский

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

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

Другой подход заключается в отбрасывании столбцов с очень высоким NaN, когда они не очень полезны для модели.в любом случае.

Последний подход, который вы можете рассмотреть, - заполнить эти значения чем-то экстремальным, которого нет в диапазоне для этого столбца, уникальным идентификатором, например, -9999 или чем-то, что вы предпочитаете.Это в основном позволит алгоритму уловить выброс и не учитывать его в модели.

Надеюсь, это поможет!

1 голос
/ 04 апреля 2019

номер

PCA означает, что практически каждая выходная переменная в некоторой степени зависит от каждой входной переменной. Таким образом, после проекции весь вектор станет NaN. Интуитивно понятно, что пропущенное значение (которое вы не можете вписать как 0) означает, что есть какое-то направление, в котором вы можете произвольно перемещать свою точку. Но поскольку вы все еще можете перемещать точку, вы не знаете ее положение ни в одной из координат - она ​​может быть где угодно.

PCA имеет смысл в основном для низкоразмерных непрерывных данных. Ваше описание данных не звучит так, как будто PCA подходит для использования здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...