OneHotEncoder#
- class sklearn.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')[源代码]#
将类别功能编码为一热数字数组。
此Transformer的输入应该是一个类似数组的数组,表示类别(离散)特征所采用的值。这些特征使用独热(one-hot,也称为“one-of-K”或“dummy”)编码方案进行编码。这将为每个类别创建一个二进制列,并返回稀疏矩阵或密集数组(取决于
sparse_output
参数)。默认情况下,编码器根据每个特征中的唯一值推导类别。或者,您还可以指定
categories
手工需要这种编码来将分类数据提供给许多scikit-learn估计器,特别是线性模型和具有标准内核的支持者。
注意:y标签的一次性编码应该使用LabelBinarizer。
阅读更多的 User Guide .有关不同编码器的比较,请参阅: 比较目标编码器与其他编码器 .
- 参数:
- categories“Auto”或类似数组的列表,默认=“Auto”
每个功能的类别(唯一值):
“自动”:根据训练数据自动确定类别。
列表:
categories[i]
保存第i列中预期的类别。传递的类别不应该在单个特征中混合字符串和数值,并且应该在数值的情况下进行排序。
使用的类别可以在
categories_
属性Added in version 0.20.
- drop'第一'、' if_binary '}或类似数组的形状(n_features,), 默认值=无
指定用于删除每个要素中的一个类别的方法。这在完全共线特征导致问题的情况下很有用,例如将结果数据输入到非正规化线性回归模型中时。
然而,放弃一个类别会破坏原始表示的对称性,因此可能会在下游模型中引起偏差,例如对于惩罚线性分类或回归模型。
无:保留所有功能(默认)。
“第一”:删除每个功能中的第一个类别。如果仅存在一个类别,则该功能将完全删除。
“if_binary”:删除具有两个类别的每个功能中的第一个类别。具有1个或2个以上类别的功能将保持不变。
数组:
drop[i]
是特征中的类别X[:, i]
这个应该被放弃。
当
max_categories
或min_frequency
配置为对不常见的类别进行分组,则在分组后处理删除行为。Added in version 0.21: 参数
drop
是在0.21添加的。在 0.23 版本发生变更: 的选项
drop='if_binary'
是在0.23添加的。在 1.1 版本发生变更: 支持删除不常见的类别。
- sparse_output布尔,默认=True
当
True
,它返回一个scipy.sparse.csr_matrix
,即“压缩稀疏行”(CSR)格式的稀疏矩阵。Added in version 1.2:
sparse
更名为sparse_output
- dtypenumber type, default=np.float64
所需的输出类型。
- handle_unknown请输入'error','error','infrequent_if_exist ','warn'}, default='error'
指定期间处理未知类别的方式
transform
.“错误”:如果转换期间存在未知类别,则引发错误。
“忽略”:当转换过程中遇到未知类别时,此功能生成的一热编码列将全为零。在逆变换中,未知类别将被表示为无。
'infrequent_if_exist' : When an unknown category is encountered during transform, the resulting one-hot encoded columns for this feature will map to the infrequent category if it exists. The infrequent category will be mapped to the last position in the encoding. During inverse transform, an unknown category will be mapped to the category denoted
'infrequent'
if it exists. If the'infrequent'
category does not exist, thentransform
和inverse_transform
将处理未知类别,handle_unknown='ignore'
.不常见的类别基于min_frequency
和max_categories
.阅读更多的 User Guide .“警告”:当在转换过程中遇到未知类别时,会发出警告,然后按照描述的方式继续编码
handle_unknown="infrequent_if_exist"
.
在 1.1 版本发生变更:
'infrequent_if_exist'
自动处理未知类别和不常见类别。Added in version 1.6: 的选项
"warn"
添加到1.6中。- min_frequencyint或float,默认=无
指定最低频率,低于该频率的类别将被视为不频繁。
如果
int
,基数较小的类别将被视为不常见。如果
float
,基数小于min_frequency * n_samples
将被认为不常见。
Added in version 1.1: 阅读更多的 User Guide .
- max_categoriesint,默认=无
指定考虑不常见类别时每个输入要素的输出要素数上限。如果有不常见的类别,
max_categories
包括代表不频繁类别的类别以及频繁类别。如果None
,输出特征的数量没有限制。Added in version 1.1: 阅读更多的 User Guide .
- feature_name_combiner“concat”或可调用,默认=“concat”
可签名致电
def callable(input_feature, category)
返回字符串。这用于创建要由返回的要素名称get_feature_names_out
."concat"
将编码要素名称和类别与feature + "_" + str(category)
。例如,值为1、6、7的要素X创建要素名称X_1, X_6, X_7
.Added in version 1.3.
- 属性:
- categories_list of arrays
匹配过程中确定的每个要素的类别(按照X中要素的顺序并与
transform
).这包括中指定的类别drop
(if任何)。- 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_
ndray列表每个特征的不常见类别。
- n_features_in_int
期间看到的功能数量 fit .
Added in version 1.0.
- feature_names_in_ :nd形状数组 (
n_features_in_
,)nd数组形状( Names of features seen during fit. Defined only when
X
has feature names that are all strings.Added in version 1.0.
- feature_name_combiner可调用或无
可签名致电
def callable(input_feature, category)
返回字符串。这用于创建要由返回的要素名称get_feature_names_out
.Added in version 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)
用于确定每个功能类别的数据。
- y没有一
忽视此参数仅为与兼容而存在
Pipeline
.
- 返回:
- 自我
安装编码器。
- fit_transform(X, y=None, **fit_params)[源代码]#
适应数据,然后对其进行转换。
适合变压器
X
和y
具有可选参数fit_params
并返回的转换版本X
.- 参数:
- X形状类似阵列(n_samples,n_features)
输入样本。
- y形状为(n_samples,)或(n_samples,n_outputs)的阵列状, 默认值=无
目标值(无监督转换)。
- **fit_paramsdict
其他适合参数。
- 返回:
- X_newndray形状数组(n_samples,n_features_new)
变形的数组。
- get_feature_names_out(input_features=None)[源代码]#
获取用于转换的输出要素名称。
- 参数:
- input_features字符串或无的类数组,默认=无
输入功能。
如果
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_out字符串对象的nd数组
转换的功能名称。
- get_metadata_routing()[源代码]#
获取此对象的元数据路由。
请检查 User Guide 关于路由机制如何工作。
- 返回:
- routingMetadataRequest
A
MetadataRequest
封装路由信息。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数:
- deep布尔,默认=True
如果为True,将返回此估计量和包含的作为估计量的子对象的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- inverse_transform(X)[源代码]#
将数据转换回原始表示形式。
当遇到未知类别时(一热编码中全为零),
None
用于代表此类别。如果具有未知类别的要素具有已删除的类别,则已删除的类别将是其逆类别。对于给定的输入功能,如果存在不频繁类别,则将使用“infrequent_sklearn”来表示不频繁类别。
- 参数:
- X形状的{类数组,稀疏矩阵} (n_samples,n_encoded_features)
转换后的数据。
- 返回:
- X_tr形状的nd数组(n_samples,n_features)
逆变换数组。
- set_output(*, transform=None)[源代码]#
设置输出容器。
看到 介绍 set_output API 了解如何使用API的示例。
- 参数:
- transform{“默认”,“pandas”,“polars”},默认=无
配置输出
transform
和fit_transform
."default"
:Transformer的默认输出格式"pandas"
:DataFrame输出"polars"
:两极输出None
:转换配置不变
Added in version 1.4:
"polars"
添加了选项。
- 返回:
- self估计器实例
估计实例。
- set_params(**params)[源代码]#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
).后者具有以下形式的参数<component>__<parameter>
以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计参数。
- 返回:
- self估计器实例
估计实例。
- transform(X)[源代码]#
使用一热编码变换X。
如果
sparse_output=True
(默认),则返回scipy.sparse._csr.csr_matrix
(CSR格式)。如果要素有不常见的类别,请通过指定进行设置
max_categories
或min_frequency
,将不常见的类别分组为一个类别。- 参数:
- X形状类似阵列(n_samples,n_features)
要编码的数据。
- 返回:
- X_out形状的{nd数组,稀疏矩阵} (n_samples,n_encoded_features)
转换的输入。如果
sparse_output=True
,将返回稀疏矩阵。