Введение в SciKit Imputer

Большинство алгоритмов машинного обучения не могут работать с отсутствующими значениями в функциях. См. Приведенный ниже пример данных о жилищном строительстве в Мельбурне.

Здесь BuildingArea содержит 7130 строк со значениями, в то время как большинство функций содержат 13580 строк со значениями.

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

1. Избавьтесь от соответствующих данных.

melbourne_data.dropna(subset=["BuildingArea"])

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

2. Избавьтесь от всего атрибута.

melbourne_data.drop("BuildingArea", axis=1)

Это приведет к удалению всей функции / атрибута. См. Ниже: столбец BuildingArea теперь опущен.

3. Установите для пропущенных значений некоторое значение.

Подход А

Если вы считаете, что атрибут достаточно важен и вы должны включить его в тренировку. Вы можете заполнить недостающие значения.

Чем заполнить пропущенные значения ???

Что ж, вы можете заменить отсутствующие значения на медиану, среднее значение или нули.

median = melbourne_data["BuildingArea"].median()
melbourne_data["BuildingArea"].fillna(median, inplace=True)

Это заменит все отсутствующие значения рассчитанной медианой. Кроме того, теперь вы заметите одну вещь: среднее значение атрибута изменилось по мере того, как мы заполнили недостающие значения.

Вы можете выполнить аналогичный процесс и для атрибута «YearBuilt». И вам нужно будет сохранить значение медианы, так как оно понадобится позже для заполнения недостающих значений в Test-Set и новых данных (о да, не думал об этом).

Подход Б: Представляем Imputer

SciKit-Learn предоставляет класс Imputer для легкого использования вышеуказанной задачи. Вы можете использовать его следующим образом:

Во-первых, вам нужно выбрать стратегию, она может быть одной из следующих: среднее, среднее, наиболее_частое.

Во-вторых, создайте импутер, используя выбранную стратегию.

# 1. Remove categorial 
melbourne_data = melbourne_data.select_dtypes(exclude=   
                 ["object"]).copy()
# 2. Fit the numerical data to Imputer
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")
imputer.fit(melbourne_data)
# 3.
X = imputer.transform(melbourne_data)
melbourne_data_tr = pd.DataFrame(X, columns=melbourne_data.columns, 
                    index=melbourne_data.index)

Теперь это вычислит медиану всех атрибутов и заполнит недостающие значения атрибута соответствующими средними значениями.

Примечание. Не заострять внимание на значениях категорий, поскольку они не входят в объем данного руководства.

Код на Github

Код Python: полный код Python со всеми тремя объяснениями.

Оптимизированный код: Ой ... вы тоже любите обтекаемый свет. Найдите здесь код оптимизации.

Данные: используются данные о жилищном строительстве в Мельбурне.