OneHotEncoder#

класс sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse_output=True, dtype= 'numpy.float64'>, handle_unknown='error', min_frequency=None, max_categories=None, feature_name_combiner='concat')[источник]#

Закодировать категориальные признаки как однократно закодированный числовой массив.

Входные данные для этого преобразователя должны быть массивоподобными целыми числами или строками, обозначающими значения, принимаемые категориальными (дискретными) признаками. Признаки кодируются с использованием схемы one-hot (также известной как 'one-of-K' или 'dummy'). Это создаёт двоичный столбец для каждой категории и возвращает разреженную матрицу или плотный массив (в зависимости от sparse_output параметр).

По умолчанию кодировщик определяет категории на основе уникальных значений в каждом признаке. Альтернативно, вы также можете указать categories вручную.

Это кодирование необходимо для подачи категориальных данных во многие оценки scikit-learn, в частности, линейные модели и SVM со стандартными ядрами.

Примечание: one-hot кодирование меток y должно использовать LabelBinarizer вместо этого.

Подробнее в Руководство пользователя. Для сравнения различных кодировщиков обратитесь к: Сравнение Target Encoder с другими кодировщиками.

Параметры:
категории'auto' или список array-like, по умолчанию='auto'

Категории (уникальные значения) для каждого признака:

  • 'auto' : Определять категории автоматически на основе обучающих данных.

  • list : categories[i] содержит категории, ожидаемые в i-м столбце. Переданные категории не должны смешивать строки и числовые значения в пределах одного признака и должны быть отсортированы в случае числовых значений.

Используемые категории можно найти в categories_ атрибут.

Добавлено в версии 0.20.

drop{‘first’, ‘if_binary’} или массивоподобный формы (n_features,), по умолчанию=None

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

`cross_val_predict` для обучения `final_estimator`. Возможные входные данные для

  • None : сохранить все признаки (по умолчанию).

  • 'first' : удалить первую категорию в каждом признаке. Если присутствует только одна категория, признак будет полностью удален.

  • 'if_binary': удалить первую категорию в каждом признаке с двумя категориями. Признаки с 1 или более чем 2 категориями остаются без изменений.

  • массив : drop[i] это категория в признаке X[:, i] которые следует удалить.

Когда max_categories или min_frequency настроен на группировку редких категорий, поведение удаления обрабатывается после группировки.

Добавлено в версии 0.21: Параметр drop был добавлен в версии 0.21.

Изменено в версии 0.23: Опция drop='if_binary' был добавлен в версии 0.23.

Изменено в версии 1.1: Поддержка удаления редких категорий.

sparse_outputbool, по умолчанию=True

Когда True, он возвращает scipy.sparse.csr_matrix, т.е. разреженная матрица в формате "Compressed Sparse Row" (CSR).

Добавлено в версии 1.2: sparse был переименован в sparse_output

dtypeтип числа, по умолчанию=np.float64

Желаемый тип данных выходных данных.

handle_unknown{‘error’, ‘ignore’, ‘infrequent_if_exist’, ‘warn’}, default=’error’

Определяет способ обработки неизвестных категорий во время transform.

  • ‘error’ : Вызвать ошибку, если во время преобразования присутствует неизвестная категория.

  • 'ignore': При встрече неизвестной категории во время преобразования, результирующие one-hot кодированные столбцы для этого признака будут содержать все нули. При обратном преобразовании неизвестная категория будет обозначена как None.

  • 'infrequent_if_exist': При обнаружении неизвестной категории во время преобразования, результирующие столбцы с one-hot кодированием для этого признака будут отображаться на редкую категорию, если она существует. Редкая категория будет отображена на последнюю позицию в кодировании. Во время обратного преобразования неизвестная категория будет отображена на категорию, обозначенную 'infrequent' если он существует. Если 'infrequent' категория не существует, тогда transform и inverse_transform будет обрабатывать неизвестную категорию как с handle_unknown='ignore'. Редкие категории существуют на основе min_frequency и max_categories. Подробнее в Руководство пользователя.

  • 'warn': При обнаружении неизвестной категории во время преобразования выдается предупреждение, и кодирование продолжается, как описано для handle_unknown="infrequent_if_exist".

Изменено в версии 1.1: 'infrequent_if_exist' был добавлен для автоматической обработки неизвестных категорий и редких категорий.

Добавлено в версии 1.6: Опция "warn" был добавлен в версии 1.6.

min_frequencyint или float, по умолчанию=None

Задаёт минимальную частоту, ниже которой категория будет считаться редкой.

  • Если int, категории с меньшей мощностью будут считаться редкими.

  • Если float, категории с меньшей мощностью, чем min_frequency * n_samples будет считаться редким.

Добавлено в версии 1.1: Подробнее в Руководство пользователя.

max_categoriesint, default=None

Задает верхний предел количества выходных признаков для каждого входного признака при рассмотрении редких категорий. Если есть редкие категории, max_categories включает категорию, представляющую редкие категории вместе с частыми категориями. Если None, нет ограничения на количество выходных признаков.

Добавлено в версии 1.1: Подробнее в Руководство пользователя.

feature_name_combiner“concat” или callable, default=”concat”

Вызываемый объект с сигнатурой def callable(input_feature, category) которая возвращает строку. Это используется для создания имен признаков, возвращаемых get_feature_names_out.

"concat" объединяет закодированное имя признака и категорию с feature + "_" + str(category)Например, признак X со значениями 1, 6, 7 создает имена признаков X_1, X_6, X_7.

Добавлено в версии 1.3.

Атрибуты:
categories_список массивов

Категории каждого признака, определенные во время обучения (в порядке признаков в X и соответствующие выходным данным transform). Это включает категорию, указанную в drop (если есть).

drop_idx_массив формы (n_features,)
  • drop_idx_[i] является индексом в categories_[i] категории для удаления для каждого признака.

  • drop_idx_[i] = None если ни одна категория не должна быть удалена из признака с индексом i, например, когда drop='if_binary' и признак не является бинарным.

  • drop_idx_ = None если все преобразованные признаки будут сохранены.

Если редкие категории включены путем установки min_frequency или max_categories в нестандартное значение и drop_idx[i] соответствует редкой категории, тогда вся редкая категория удаляется.

Изменено в версии 0.23: Добавлена возможность содержать None значения.

infrequent_categories_list of ndarray

Редкие категории для каждого признака.

n_features_in_int

Количество признаков, замеченных во время fit.

Добавлено в версии 1.0.

feature_names_in_ndarray формы (n_features_in_,)

Имена признаков, наблюдаемых во время fit. Определено только когда X имеет имена признаков, которые все являются строками.

Добавлено в версии 1.0.

feature_name_combinerвызываемый или None

Вызываемый объект с сигнатурой def callable(input_feature, category) которая возвращает строку. Это используется для создания имен признаков, возвращаемых get_feature_names_out.

Добавлено в версии 1.3.

Смотрите также

OrdinalEncoder

Выполняет порядковое (целочисленное) кодирование категориальных признаков.

TargetEncoder

Кодирует категориальные признаки с использованием целевой переменной.

sklearn.feature_extraction.DictVectorizer

Выполняет one-hot кодирование элементов словаря (также обрабатывает строковые признаки).

sklearn.feature_extraction.FeatureHasher

Выполняет приближённое one-hot кодирование элементов словаря или строк.

LabelBinarizer

Бинаризует метки в формате 'один против всех'.

MultiLabelBinarizer

Преобразует между итерируемыми объектами и многометочным форматом, например, бинарной матрицей (образцы × классы), указывающей наличие метки класса.

Примеры

Для набора данных с двумя признаками мы позволяем кодировщику найти уникальные значения для каждого признака и преобразовать данные в бинарное one-hot кодирование.

>>> from sklearn.preprocessing import OneHotEncoder

Можно отбросить категории, не встречавшиеся во время fit:

>>> enc = OneHotEncoder(handle_unknown='ignore')
>>> X = [['Male', 1], ['Female', 3], ['Female', 2]]
>>> enc.fit(X)
OneHotEncoder(handle_unknown='ignore')
>>> enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 1], ['Male', 4]]).toarray()
array([[1., 0., 1., 0., 0.],
       [0., 1., 0., 0., 0.]])
>>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
       [None, 2]], dtype=object)
>>> enc.get_feature_names_out(['gender', 'group'])
array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'], ...)

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

>>> drop_enc = OneHotEncoder(drop='first').fit(X)
>>> drop_enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 0., 0.],
       [1., 1., 0.]])

Или удалить столбец для признака, имеющего только 2 категории:

>>> drop_binary_enc = OneHotEncoder(drop='if_binary').fit(X)
>>> drop_binary_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 1., 0., 0.],
       [1., 0., 1., 0.]])

Можно изменить способ создания названий признаков.

>>> def custom_combiner(feature, category):
...     return str(feature) + "_" + type(category).__name__ + "_" + str(category)
>>> custom_fnames_enc = OneHotEncoder(feature_name_combiner=custom_combiner).fit(X)
>>> custom_fnames_enc.get_feature_names_out()
array(['x0_str_Female', 'x0_str_Male', 'x1_int_1', 'x1_int_2', 'x1_int_3'],
      dtype=object)

Редкие категории включаются установкой max_categories или min_frequency.

>>> import numpy as np
>>> X = np.array([["a"] * 5 + ["b"] * 20 + ["c"] * 10 + ["d"] * 3], dtype=object).T
>>> ohe = OneHotEncoder(max_categories=3, sparse_output=False).fit(X)
>>> ohe.infrequent_categories_
[array(['a', 'd'], dtype=object)]
>>> ohe.transform([["a"], ["b"]])
array([[0., 0., 1.],
       [1., 0., 0.]])
fit(X, y=None)[источник]#

Обучить OneHotEncoder на X.

Параметры:
Xarray-like формы (n_samples, n_features)

Данные для определения категорий каждого признака.

yNone

Игнорируется. Этот параметр существует только для совместимости с Pipeline.

Возвращает:
self

Обученный энкодер.

fit_transform(X, y=None, **fit_params)[источник]#

Обучение на данных с последующим преобразованием.

Обучает преобразователь на X и y с необязательными параметрами fit_params и возвращает преобразованную версию X.

Параметры:
Xarray-like формы (n_samples, n_features)

Входные выборки.

yarray-like формы (n_samples,) или (n_samples, n_outputs), default=None

Целевые значения (None для неконтролируемых преобразований).

**fit_paramsdict

Дополнительные параметры обучения. Передавайте только если оценщик принимает дополнительные параметры в своем fit метод.

Возвращает:
X_newndarray массив формы (n_samples, n_features_new)

Преобразованный массив.

get_feature_names_out(input_features=None)[источник]#

Получить имена выходных признаков для преобразования.

Параметры:
input_featuresarray-like из str или None, по умолчанию=None

Входные признаки.

  • Если input_features является None, затем feature_names_in_ используется как имена признаков в. Если feature_names_in_ не определено, тогда генерируются следующие имена входных признаков: ["x0", "x1", ..., "x(n_features_in_ - 1)"].

  • Если input_features является массивоподобным, тогда input_features должен соответствовать feature_names_in_ if feature_names_in_ определен.

Возвращает:
feature_names_outndarray из str объектов

Преобразованные имена признаков.

6332()[источник]#

Получить маршрутизацию метаданных этого объекта.

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

Возвращает:
маршрутизацияMetadataRequest

A MetadataRequest Инкапсуляция информации о маршрутизации.

get_params(глубокий=True)[источник]#

Получить параметры для этого оценщика.

Параметры:
глубокийbool, по умолчанию=True

Если True, вернет параметры для этого оценщика и вложенных подобъектов, которые являются оценщиками.

Возвращает:
paramsdict

Имена параметров, сопоставленные с их значениями.

inverse_transform(X)[источник]#

Преобразовать данные обратно в исходное представление.

Когда встречаются неизвестные категории (все нули в one-hot кодировании), None используется для представления этой категории. Если признак с неизвестной категорией имеет отброшенную категорию, отброшенная категория будет его инверсией.

Для заданного входного признака, если есть редкая категория, 'infrequent_sklearn' будет использоваться для представления редкой категории.

Параметры:
X{array-like, sparse matrix} формы (n_samples, n_encoded_features)

Преобразованные данные.

Возвращает:
X_originalndarray формы (n_samples, n_features)

Обратно преобразованный массив.

set_output(*, преобразовать=None)[источник]#

Установить контейнер вывода.

См. Введение API set_output для примера использования API.

Параметры:
преобразовать{“default”, “pandas”, “polars”}, по умолчанию=None

Настройка вывода transform и fit_transform.

  • "default": Формат вывода трансформера по умолчанию

  • "pandas": DataFrame вывод

  • "polars": Вывод Polars

  • None: Конфигурация преобразования не изменена

Добавлено в версии 1.4: "polars" опция была добавлена.

Возвращает:
selfэкземпляр estimator

Экземпляр оценщика.

set_params(**params)[источник]#

Установить параметры этого оценщика.

Метод работает как на простых оценщиках, так и на вложенных объектах (таких как Pipeline). Последние имеют параметры вида __ чтобы можно было обновить каждый компонент вложенного объекта.

Параметры:
**paramsdict

Параметры оценщика.

Возвращает:
selfэкземпляр estimator

Экземпляр оценщика.

преобразовать(X)[источник]#

Преобразование X с использованием one-hot кодирования.

Если sparse_output=True (по умолчанию), возвращает экземпляр scipy.sparse._csr.csr_matrix (формат CSR).

Если есть редкие категории для признака, установленные путем указания max_categories или min_frequency, редкие категории группируются в одну категорию.

Параметры:
Xarray-like формы (n_samples, n_features)

Данные для кодирования.

Возвращает:
X_out{ndarray, разреженная матрица} формы (n_samples, n_encoded_features)

Преобразованный ввод. Если sparse_output=True, будет возвращена разреженная матрица.