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