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')[source]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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’}, по умолчанию=’error’

Указывает, как обрабатываются неизвестные категории во время transform.

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

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

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

min_frequencyцелое или вещественное число, по умолчанию=None

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

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

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

max_categoriesцелое число, по умолчанию=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_целое число

Количество признаков, увиденных во время 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

Бинаризует метки в стиле one-vs-all.

MultiLabelBinarizer

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

Примеры

Предположим, у нас есть набор данных с двумя признаками. Мы даём кодировщику возможность найти уникальные значения для каждого признака и преобразуем данные в бинарное 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)[source]

Обучение OneHotEncoder на основе X.

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

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

yNone

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

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

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

fit_transform(X, y=None, **fit_params)[source]

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

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

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

Входящие образцы.

yarray-like формы (n_samples,) или (n_samples, n_outputs), по умолчанию=None

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

**fit_paramsdict

Дополнительные параметры обучения.

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

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

get_feature_names_out(input_features=None)[source]

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

Параметры:
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_ если feature_names_in_ определено.

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

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

get_metadata_routing()[source]

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

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

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

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

get_params(deep=True)[source]

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

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

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

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

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

свойствоinfrequent_categories_

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

inverse_transform(X)[source]

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

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER
set_output(*, transform=None)[source]

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

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

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

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

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

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

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

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

set_params(**params)[source]

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

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

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

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

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

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

transform(X)[source]

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

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

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

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

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

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

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

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

Основные моменты выпуска scikit-learn 1.5

Основные моменты выпуска scikit-learn 1.4

Основные моменты выпуска scikit-learn 1.1

Основные моменты выпуска scikit-learn 1.0

Основные моменты выпуска scikit-learn 0.23

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

Объединение предикторов с помощью стекинга

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

Инженерия временных признаков

Регрессия Пуассона и потери, не являющиеся нормальными

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

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

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

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

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

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

Введение в API set_output

ColumnTransformer с разнородными типами

Сравнение Target Encoder с другими кодерами

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

Spec-Zone.ru

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