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, будет возвращена разреженная матрица.
Примеры из галереи
© 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