OrdinalEncoder#
- 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)#
将分类特征编码为整数数组。
该转换器的输入应为整数或字符串的类数组,表示分类(离散)特征的取值。 特征被转换为序数整数。这会为每个特征生成一列整数(0 到 n_categories - 1)。
更多信息请参阅 用户指南 。 有关不同编码器的比较,请参阅: 目标编码器与其他编码器的比较 。
Added in version 0.20.
- Parameters:
- categories‘auto’ 或类数组列表,默认=’auto’
每个特征的类别(唯一值):
‘auto’ : 从训练数据中自动确定类别。
列表 :
categories[i]
包含第 i 列中预期的类别。传递的类别不应混合字符串和数值,数值应按顺序排序。
使用的类别可以在
categories_
属性中找到。- dtype数字类型,默认=np.float64
期望的输出数据类型。
- handle_unknown{‘error’, ‘use_encoded_value’}, 默认=’error’
当设置为 ‘error’ 时,在转换过程中遇到未知分类特征时会引发错误。当设置为 ‘use_encoded_value’ 时,未知类别的编码值将设置为参数
unknown_value
给定的值。在inverse_transform
中,未知类别将表示为 None。Added in version 0.24.
- unknown_valueint 或 np.nan, 默认=None
当参数 handle_unknown 设置为 ‘use_encoded_value’ 时,此参数是必需的,并将设置未知 类别的编码值。它必须与
fit
中使用的任何类别值不同。如果设置为 np.nan,则dtype
参数必须是浮点类型。Added in version 0.24.
- encoded_missing_valueint 或 np.nan, 默认=np.nan
缺失类别的编码值。如果设置为
np.nan
,则dtype
参数必须是浮点类型。Added in version 1.1.
- min_frequencyint 或 float, 默认=None
指定低于此频率的类别将被视为不频繁。
如果
int
,类别数较少的类别将被视为不频繁。如果
float
,类别数少于min_frequency * n_samples
的类别将被视为不频繁。
Added in version 1.3: 更多信息请参阅 用户指南 。
- max_categoriesint, 默认=None
指定每个输入特征在考虑不频繁类别时的输出类别上限。如果有不频繁类别,
max_categories
包括表示不频繁类别的类别以及频繁类别。如果为None
,则对输出特征数量没有限制。max_categories
不考虑缺失或未知类别。设置unknown_value
或encoded_missing_value
为整数将分别增加一个唯一的整数码。这可能导致最多max_categories + 2
个整数码。Added in version 1.3: 更多信息请参阅 用户指南 。
- Attributes:
- categories_数组列表
在
fit
期间确定的每个特征的类别(按 X 中特征的顺序,对应于transform
的输出)。这不包括在fit
期间未见过的类别。- n_features_in_int
在 fit 期间看到的特征数量。
Added in version 1.0.
- feature_names_in_ndarray 形状 (
n_features_in_
,) 在 fit 期间看到的特征名称。仅当
X
的特征名称均为字符串时定义。Added in version 1.0.
infrequent_categories_
ndarray 列表稀有类别对于每个特征。
See also
OneHotEncoder
对分类特征执行独热编码。这种编码适用于低到中基数的分类变量,无论是在监督还是非监督设置中。
TargetEncoder
使用监督信号在分类或回归管道中编码分类特征。这种编码通常适用于高基数的分类变量。
LabelEncoder
将目标标签编码为 0 到
n_classes-1
之间的值。
Notes
在高比例的
nan
值情况下,使用 Python 3.10 之前的版本推断类别会变得很慢。从 Python 3.10 开始,改进了对nan
值的处理(参见 bpo-43475 )。Examples
给定一个包含两个特征的数据集,我们让编码器找到每个特征的唯一值,并将数据转换为序数编码。
>>> 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_categories
或min_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)#
拟合OrdinalEncoder到X。
- Parameters:
- Xarray-like of shape (n_samples, n_features)
用于确定每个特征类别的数据。
- yNone
忽略。此参数仅为与
Pipeline
兼容而存在。
- Returns:
- selfobject
拟合后的编码器。
- fit_transform(X, y=None, **fit_params)#
拟合数据,然后进行转换。
将转换器拟合到
X
和y
,并带有可选参数fit_params
, 并返回X
的转换版本。- Parameters:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认=None
目标值(无监督转换为 None)。
- **fit_paramsdict
其他拟合参数。
- Returns:
- X_new形状为 (n_samples, n_features_new) 的 ndarray 数组
转换后的数组。
- get_feature_names_out(input_features=None)#
获取变换后的输出特征名称。
- Parameters:
- 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_
已定义)。
- Returns:
- feature_names_out字符串对象的ndarray
与输入特征相同。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- property infrequent_categories_#
稀有类别对于每个特征。
- inverse_transform(X)#
将数据转换回原始表示形式。
- Parameters:
- X形状为 (n_samples, n_encoded_features) 的类数组
转换后的数据。
- Returns:
- X_tr形状为 (n_samples, n_features) 的 ndarray
逆转换后的数组。
- set_output(*, transform=None)#
设置输出容器。
请参阅 介绍 set_output API 以了解如何使用API的示例。
- Parameters:
- transform{“default”, “pandas”, “polars”}, 默认=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
Added in version 1.4:
"polars"
选项已添加。
- Returns:
- self估计器实例
估计器实例。
- set_params(**params)#
设置此估计器的参数。
该方法适用于简单估计器以及嵌套对象(例如
Pipeline
)。后者具有形式为<component>__<parameter>
的参数,以便可以更新嵌套对象的每个组件。- Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)#
将X转换为序数代码。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
要编码的数据。
- Returns:
- X_out形状为 (n_samples, n_features) 的 ndarray
转换后的输入。