Spec-Zone.ru › scikit-learn

OneHotEncoder

classsklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse_output=True, dtype=<class 'numpy.float64'>, handle_unknown='error', min_frequency=None, max_categories=None, feature_name_combiner='concat')[исходный код]

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

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

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

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

Примечание: для унитарного кодирования меток y следует использовать LabelBinarizer.

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

Параметры:
categories‘auto’ или список массивоподобных объектов, по умолчанию=’auto’

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

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

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

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

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

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

Однако удаление одной категории нарушает симметрию исходного представления и поэтому может привести к смещению в последующих моделях, например в моделях линейной классификации или регрессии с регуляризацией.

  • None : сохранить все признаки (значение по умолчанию).
  • ‘first’ : удалить первую категорию в каждом признаке. Если присутствует только одна категория, признак будет удалён полностью.
  • ‘if_binary’ : удалить первую категорию для каждого признака с двумя категориями. Признаки с 1 или более чем 2 категориями остаются без изменений.
  • array : drop[i] — это категория признака X[:, i], которую следует удалить.

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

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

Изменено в версии 0.23: В версии 0.23 добавлен параметр drop='if_binary'.

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

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

Если True, возвращается разреженная матрица/массив SciPy в формате «Compressed Sparse Row» (CSR).

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

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

Требуемый тип данных результата.

handle_unknown{‘error’, ‘ignore’, ‘infrequent_if_exist’, ‘warn’}, по умолчанию=’error’

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

  • ‘error’ : Вызывать ошибку, если во время преобразования присутствует неизвестная категория.
  • ‘ignore’ : Если во время преобразования встречается неизвестная категория, соответствующие столбцы унитарного кодирования для этого признака будут заполнены нулями. При обратном преобразовании неизвестная категория будет обозначена как None.
  • ‘infrequent_if_exist’ : Если во время преобразования встречается неизвестная категория, соответствующие столбцы унитарного кодирования для этого признака будут соответствовать редкой категории, если она существует. Редкая категория будет занимать последнюю позицию в кодировании. При обратном преобразовании неизвестная категория будет сопоставлена категории, обозначенной '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, по умолчанию=None

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

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

feature_name_combiner“concat” или вызываемый объект, по умолчанию=”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_список ndarray

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

n_features_in_int

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

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

feature_names_in_ndarray формы (n_features_in_,)

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

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

feature_name_combinerвызываемый объект или None

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

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

См. также

OrdinalEncoder

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

TargetEncoder

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

sklearn.feature_extraction.DictVectorizer

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

sklearn.feature_extraction.FeatureHasher

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

LabelBinarizer

Бинаризует метки по принципу «один против всех».

MultiLabelBinarizer

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

Примеры

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

>>> 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.

Параметры:
Xмассивоподобный объект формы (n_samples, n_features)

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

yNone

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

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

Обученный кодировщик.

fit_transform(X, y=None, **fit_params)[исходный код]

Обучает на данных, а затем преобразует их.

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

Параметры:
Xмассивоподобный объект формы (n_samples, n_features)

Входные образцы.

yмассивоподобный объект формы (n_samples,) или (n_samples, n_outputs), по умолчанию=None

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

**fit_paramsdict

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

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

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

get_feature_names_out(input_features=None)[исходный код]

Возвращает имена выходных признаков после преобразования.

Параметры:
input_featuresмассивоподобный объект из строк или 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_, если feature_names_in_ определён.
Возвращает:
feature_names_outndarray из строковых объектов

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

get_metadata_routing()[исходный код]

Возвращает маршрутизацию метаданных этого объекта.

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

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

Объект MetadataRequest, содержащий сведения о маршрутизации.

get_params(deep=True)[исходный код]

Возвращает параметры этого оценщика.

Параметры:
deepbool, по умолчанию=True

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

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

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

inverse_transform(X)[исходный код]

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

При обнаружении неизвестных категорий (все нули в унитарном кодировании) для представления этой категории используется None. Если для признака с неизвестной категорией была удалена категория, обратным значением будет удалённая категория.

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

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

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

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

Массив после обратного преобразования.

set_output(*, transform=None)[исходный код]

Задаёт контейнер для выходных данных.

Подробнее см. в руководстве пользователя, а пример использования API — в разделе Знакомство с API set_output.

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

Настраивает вывод методов transform и fit_transform.

  • "default": формат вывода преобразователя по умолчанию
  • "pandas": вывод DataFrame
  • "polars": вывод Polars
  • None: конфигурация преобразования не изменяется

Добавлено в версии 1.4: Добавлен параметр "polars".

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

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

set_params(**params)[исходный код]

Задаёт параметры этого оценщика.

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

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

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

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

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

transform(X)[исходный код]

Преобразует X с помощью унитарного кодирования.

Если sparse_output=True (значение по умолчанию), возвращает разреженную матрицу SciPy в формате CSR.

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

Параметры:
Xмассивоподобный объект формы (n_samples, n_features)

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

Возвращает:
X_out{ndarray, sparse matrix} формы (n_samples, n_encoded_features)

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

Примеры из галереи

Создание признаков на основе времени

ColumnTransformer для данных смешанных типов

Преобразование признаков с помощью ансамблей деревьев

Поддержка категориальных признаков в градиентном бустинге

Распространённые ошибки при интерпретации коэффициентов линейных моделей

Графики частичной зависимости и индивидуального условного математического ожидания

Регрессия Пуассона и ненормальная функция потерь

Регрессия Твиди для страховых выплат

Отображение оценивателей и сложных конвейеров

Оценка оценивателей для обнаружения выбросов

Отображение конвейеров

Представляем API set_output

Сравнение TargetEncoder с другими кодировщиками

Основные нововведения в scikit-learn 0.23

Основные нововведения в scikit-learn 1.0

Основные нововведения в scikit-learn 1.1

Основные нововведения в scikit-learn 1.4

Основные нововведения в scikit-learn 1.5

Основные нововведения в scikit-learn 1.9

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.preprocessing.OneHotEncoder.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API