序数编码器#

class sklearn.preprocessing.OrdinalEncoder(*, categories='auto', dtype=<class 'numpy.float64'>, handle_unknown='error', unknown_value=None, encoded_missing_value=nan, min_frequency=None, max_categories=None)[source]#

将分类特征编码为整数数组。

此转换器的输入应为整数或字符串的数组,表示分类(离散)特征所取的值。特征转换为序数整数。这导致每个特征只有一列整数(0 到 n_categories - 1)。

更多信息请参见用户指南。有关不同编码器的比较,请参阅:比较目标编码器与其他编码器

在0.20版本中添加。

参数:
categories‘auto’ 或 array-like 列表,默认为 ‘auto’

每个特征的类别(唯一值)

  • ‘auto’:从训练数据中自动确定类别。

  • 列表:categories[i] 存储第 i 列中预期的类别。传入的类别不应混合字符串和数值,并且在数值情况下应已排序。

使用的类别可以在 categories_ 属性中找到。

dtype数字类型,默认值=np.float64

输出的所需 dtype。

handle_unknown{'error', 'use_encoded_value'},默认值='error'

设置为 'error' 时,如果在转换过程中存在未知的分类特征,则会引发错误。设置为 'use_encoded_value' 时,未知类别的编码值将设置为参数 unknown_value 给定的值。在 inverse_transform 中,未知类别将表示为 None。

0.24 版本新增。

unknown_value整数或 np.nan,默认值=None

当参数 handle_unknown 设置为 'use_encoded_value' 时,此参数是必需的,它将设置未知类别的编码值。它必须与用于在 fit 中编码任何类别的值不同。如果设置为 np.nan,则 dtype 参数必须是浮点型 dtype。

0.24 版本新增。

encoded_missing_value整数或 np.nan,默认值=np.nan

缺失类别的编码值。如果设置为 np.nan,则 dtype 参数必须是浮点型 dtype。

1.1 版本新增。

min_frequency整数或浮点数,默认值=None

指定类别低于哪个频率将被视为不常见。

  • 如果为 int,则基数较小的类别将被视为不常见。

  • 如果为 float,则基数小于 min_frequency * n_samples 的类别将被视为不常见。

1.3 版本新增: 用户指南 中了解更多信息。

max_categories整数,默认值=None

在考虑不常见类别时,指定每个输入特征的输出类别的上限。如果存在不常见类别,则 max_categories 包括表示不常见类别的类别以及常见类别。如果为 None,则对输出特征的数量没有限制。

max_categories **不**考虑缺失或未知类别。将 unknown_valueencoded_missing_value 设置为整数将分别使唯一整数代码的数量增加一个。这可能导致最多 max_categories + 2 个整数代码。

1.3 版本新增: 用户指南 中了解更多信息。

属性:
categories_数组列表

fit 期间确定的每个特征的类别(按照 X 中特征的顺序,并与 transform 的输出相对应)。这并不包括在 fit 期间未看到的类别。

n_features_in_整数

fit 期间看到的特征数量。

1.0 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

1.0 版本新增。

infrequent_categories_ndarray 列表

每个特征的不常见类别。

另请参阅

独热编码器

执行分类特征的独热编码。此编码适用于监督和非监督设置中的低到中等基数分类变量。

目标编码器

使用监督信号在分类或回归管道中编码分类特征。此编码通常适用于高基数分类变量。

标签编码器

使用 0 到 n_classes-1 之间的数值对目标标签进行编码。

备注

如果 nan 值比例很高,则在 3.10 之前的 Python 版本中,推断类别会变慢。从 Python 3.10 开始,对 nan 值的处理得到了改进(参见 bpo-43475)。

示例

给定一个具有两个特征的数据集,我们让编码器找到每个特征的唯一值并将数据转换为序数编码。

>>> from sklearn.preprocessing import OrdinalEncoder
>>> enc = OrdinalEncoder()
>>> X = [['Male', 1], ['Female', 3], ['Female', 2]]
>>> enc.fit(X)
OrdinalEncoder()
>>> enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 3], ['Male', 1]])
array([[0., 2.],
       [1., 0.]])
>>> enc.inverse_transform([[1, 0], [0, 1]])
array([['Male', 1],
       ['Female', 2]], dtype=object)

默认情况下,OrdinalEncoder 通过传播缺失值来宽容缺失值。

>>> import numpy as np
>>> X = [['Male', 1], ['Female', 3], ['Female', np.nan]]
>>> enc.fit_transform(X)
array([[ 1.,  0.],
       [ 0.,  1.],
       [ 0., nan]])

您可以使用参数 encoded_missing_value 来编码缺失值。

>>> enc.set_params(encoded_missing_value=-1).fit_transform(X)
array([[ 1.,  0.],
       [ 0.,  1.],
       [ 0., -1.]])

通过设置 max_categoriesmin_frequency 来启用不常见类别。在下面的示例中,“a”和“d”被认为是不常见的,并组合成一个类别,“b”和“c”是它们自己的类别,未知值编码为 3,缺失值编码为 4。

>>> X_train = np.array(
...     [["a"] * 5 + ["b"] * 20 + ["c"] * 10 + ["d"] * 3 + [np.nan]],
...     dtype=object).T
>>> enc = OrdinalEncoder(
...     handle_unknown="use_encoded_value", unknown_value=3,
...     max_categories=3, encoded_missing_value=4)
>>> _ = enc.fit(X_train)
>>> X_test = np.array([["a"], ["b"], ["c"], ["d"], ["e"], [np.nan]], dtype=object)
>>> enc.transform(X_test)
array([[2.],
       [0.],
       [1.],
       [2.],
       [3.],
       [4.]])
fit(X, y=None)[source]#

将 OrdinalEncoder 拟合到 X。

参数:
X形状为 (n_samples, n_features) 的类数组

用于确定每个特征类别的数。

yNone

忽略。此参数仅为了与 Pipeline 保持兼容性而存在。

返回值:
self对象

已拟合的编码器。

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

拟合数据,然后转换数据。

使用可选参数fit_params将转换器拟合到Xy,并返回X的转换版本。

参数:
X形状为 (n_samples, n_features) 的类数组

输入样本。

yarray-like 形状为 (n_samples,) 或 (n_samples, n_outputs),默认值=None

目标值(对于无监督转换,则为 None)。

**fit_paramsdict

附加拟合参数。

返回值:
X_new形状为 (n_samples, n_features_new) 的 ndarray 数组

转换后的数组。

get_feature_names_out(input_features=None)[source]#

获取转换的输出特征名称。

参数:
input_features字符串类型的 array-like 或 None,默认值=None

输入特征。

  • 如果input_featuresNone,则使用feature_names_in_作为输入特征名称。如果feature_names_in_未定义,则生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果input_features是 array-like,则如果feature_names_in_已定义,input_features必须与feature_names_in_匹配。

返回值:
feature_names_out字符串对象的 ndarray

与输入特征相同。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看用户指南了解路由机制的工作原理。

返回值:
routingMetadataRequest

一个MetadataRequest 封装路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为 True

如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。

返回值:
paramsdict

参数名称与其值的映射。

property infrequent_categories_#

每个特征的不常见类别。

inverse_transform(X)[source]#

将数据转换回原始表示。

参数:
X形状为 (n_samples, n_encoded_features) 的 array-like

转换后的数据。

返回值:
X_tr形状为 (n_samples, n_features) 的 ndarray

逆转换后的数组。

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

设置输出容器。

查看介绍 set_output API了解如何使用 API 的示例。

参数:
transform{"default", "pandas", "polars"},默认为 None

配置transformfit_transform的输出。

  • "default":转换器的默认输出格式

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置保持不变

版本 1.4 中新增: 添加了"polars"选项。

返回值:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如Pipeline)。后者具有<component>__<parameter>形式的参数,因此可以更新嵌套对象的每个组件。

参数:
参数字典

估计器参数。

返回值:
self估计器实例

估计器实例。

transform(X)[源代码]#

将X转换为序数编码。

参数:
X形状为 (n_samples, n_features) 的类数组

要编码的数据。

返回值:
X_out形状为 (n_samples, n_features) 的ndarray

转换后的输入。