Введение в 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 со всеми тремя объяснениями.
Оптимизированный код: Ой ... вы тоже любите обтекаемый свет. Найдите здесь код оптимизации.
Данные: используются данные о жилищном строительстве в Мельбурне.