Как предварительно обработать набор данных со многими типами пропущенных данных - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь сделать проект машинного обучения для начинающих Big Mart Sales. Набор данных этого проекта содержит много типов пропущенных значений (NaN) и значений, которые необходимо изменить (lf -> Low Fat, reg -> Regular и т. Д.)

Мой текущий подход к предварительной обработке этогоданные для создания импутера для каждого типа данных должны быть исправлены:

from sklearn.impute import SimpleImputer as Imputer

# make the values consistent
lf_imputer = Imputer(missing_values='LF', strategy='constant', fill_value='Low Fat')
lowfat_imputer = Imputer(missing_values='low fat', strategy='constant', fill_value='Low Fat')
X[:,1:2] = lf_imputer.fit_transform(X[:,1:2])
X[:,1:2] = lowfat_imputer.fit_transform(X[:,1:2])

# nan for a categorical variable
nan_imputer = Imputer(missing_values=np.nan, strategy='most_frequent')
X[:, 7:8] = nan_imputer.fit_transform(X[:, 7:8])

# nan for a numerical variable
nan_num_imputer = Imputer(missing_values=np.nan, strategy='mean')
X[:, 0:1] = nan_num_imputer.fit_transform(X[:, 0:1])

Однако такой подход довольно громоздок. Есть ли более аккуратный способ предварительной обработки этого набора данных?

Кроме того, досадно, что imputer.fit_transform () требует двумерный массив в качестве входных данных, тогда как я хочу зафиксировать значения только в одном столбце (1D). Таким образом, я всегда должен использовать столбец, который я хочу исправить, плюс столбец рядом с ним в качестве входных данных. Есть ли другой способ обойти это? Спасибо.

Вот несколько строк моих данных: enter image description here

1 Ответ

0 голосов
/ 10 октября 2019

Однако такой подход довольно громоздок. Есть ли более аккуратный способ предварительной обработки этого набора данных?

Если у вас есть числовой столбец, вы можете использовать некоторые подходы для заполнения отсутствующих данных:

  • Постоянное значение, имеющее значение в домене, например 0,отличается от всех других значений.
  • Значение из другой случайно выбранной записи.
  • Среднее значение, медиана или значение для столбца.
  • Значение, оцененное другой прогнозной моделью.

Давайте посмотрим, как это работает для среднего значения для одного столбца, например: Один метод будет использовать fillna от панд:

X['Name'].fillna(X['Name'].mean(), inplace=True) 

Для категориальныхданные, пожалуйста, посмотрите здесь: Вменяйте категорические пропущенные значения в scikit-learn

...