sklearn.preprocessing.OneHotEncoder

class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

将分类要素编码为one-hot数字数组。

该转换器的输入应为整数或字符串之类的数组,表示分类(离散)特征所采用的值。这些特性使用one hot(也称为“one-of-K”或“dummy”)编码方案进行编码。这将为每个类别创建一个二进制列,并返回一个稀疏矩阵或密集数组(取决于稀疏参数)

默认情况下,编码器会根据每个功能中的唯一值得出类别。或者,您也可以手动指定类别。

需要这种编码才能将分类数据提供给许多scikit学习估计器,尤其是线性模型和具有标准内核的SVM。

注意:y标签的独热编码应该使用LabelBinarizer。

阅读用户指南中的更多信息。

在版本0.20中更改。

参数 说明
categories ‘auto’ or a list of array-like, default=’auto’
每个功能的类别(唯一值):
‘auto’:从训练数据中自动确定类别。
list:category [i]保存第i列中期望的类别。传递的类别不应在单个功能中混合使用字符串和数字值,并且应该对数字值进行排序。
可以在category_属性中找到使用的类别。
0.20版中的新功能。
drop {‘first’, ‘if_binary’} or a array-like of shape (n_features,), default=None
指定一种用于删除每个功能类别之一的方法。这在完美共线特征导致问题的情况下很有用,例如将结果数据输入到神经网络或不规则回归时。
但是,删除一个类别会破坏原始表示形式的对称性,因此可能在下游模型(例如,惩罚线性分类或回归模型)中引起偏差。
None:保留所有功能(默认)。
‘first’:在每个功能中删除第一类。如果仅存在一个类别,则该功能将被完全删除。
‘if_binary’:将具有两个类别的每个特征的第一个类别删除。具有1个或2个以上类别的要素保持不变。
array:drop [i]是要素X [:, i]中应删除的类别。
sparse bool, default=True
如果设置为True,将返回稀疏矩阵,否则将返回数组。
dtype number type, default=np.float
所需的输出dtype。
handle_unknown {‘error’, ‘ignore’}, default=’error’
是在转换过程中引发错误还是忽略是否存在未知分类特征(默认为引发)。当此参数设置为“忽略”并且在转换过程中遇到未知类别时,此功能生成的一键编码列将全为零。在逆变换中,未知类别将表示为“无”。
属性 说明
categories_ list of arrays
拟合期间确定的每个特征的类别(按X中特征的顺序,并与转换的输出相对应)。这包括下拉列表中指定的类别(如果有)。
drop_idx_ array of shape (n_features,)
drop_idx_ [i]是要为每个功能删除的类别的category_ [i]中的索引。
如果不从索引为i的功能中删除类别,则drop_idx_[i]=None,例如,当drop='if_binary'且该功能不是二进制时。
如果将保留所有已转换的要素,则drop_idx_=None。

另见:

sklearn.preprocessing.OrdinalEncoder

对分类特征执行序数(整数)编码。

sklearn.feature_extraction.DictVectorizer

对字典项执行独热编码(也处理字符串值特征)。

sklearn.feature_extraction.FeatureHasher

对字典项或字符串执行近似独热编码。

sklearn.preprocessing.LabelBinarizer

以一对多的方式对标签进行二值化处理。

sklearn.preprocessing.MultiLabelBinarizer

在可迭代的可迭代项和多标签格式之间进行转换,例如表示类标签存在的(样本x类)二进制矩阵。

示例

给定具有两个特征的数据集,我们让编码器找到每个特征的唯一值,然后将数据转换为二进制的独热编码。

>>> from sklearn.preprocessing import OneHotEncoder

可以丢弃拟合期间看不到的类别:

>>> 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([123], dtype=object)]
>>> enc.transform([['Female'1], ['Male'4]]).toarray()
array([[1.0.1.0.0.],
       [0.1.0.0.0.]])
>>> enc.inverse_transform([[01100], [00010]])
array([['Male'1],
       [None2]], dtype=object)
>>> enc.get_feature_names(['gender''group'])
array(['gender_Female''gender_Male''group_1''group_2''group_3'],
  dtype=object)

您可以随时为每个功能删除第一列:

>>> drop_enc = OneHotEncoder(drop='first').fit(X)
>>> drop_enc.categories_
[array(['Female''Male'], dtype=object), array([123], 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.]])

方法

方法 说明
fit(X[, y]) 使OneHotEncoder适应X。
fit_transform(X[, y]) 使OneHotEncoder拟合X,然后变换X。
get_feature_names([input_features]) 返回输出要素的要素名称。
get_params([deep]) 获取此估计量的参数。
inverse_transform(X) 将数据转换回原始表示形式。
set_params(**params) 设置此估算器的参数。
transform(X) 使用one-hot编码转换X。
__init__(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

[源码]

初始化self,有关准确的签名,请参见help(type(self))。

fit(X, y=None)

[源码]

使OneHotEncoder适应X。

参数 说明
X array-like, shape [n_samples, n_features]
该数据确定每个功能的类别。
y None
忽略了。仅存在此参数是为了与sklearn.pipeline.Pipeline.兼容。
返回值 说明
self -
fit_transform(X, y=None)

[源码]

使OneHotEncoder适应X,然后变换X。

等效于fit(X).transform(X),但更方便。

参数 说明
X array-like, shape [n_samples, n_features]
要编码的数据。
y None
忽略了。仅存在此参数是为了与sklearn.pipeline.Pipeline.兼容。
返回值 说明
X_out sparse matrix if sparse=True else a 2-d array
转换后的输入。
get_feature_names(input_features=None)

[源码]

返回输出要素的要素名称。

参数 说明
input_features list of str of shape (n_features,)
输入功能的字符串名称(如果有)。默认情况下,使用“ x0”,“ x1”,……“ xn_features”。
返回值 说明
output_feature_names ndarray of shape (n_output_features,)
功能名称数组。
get_params(deep=True)

[源码]

获取此估计量的参数。

参数 说明
deep bool, default=True
如果为True,则将返回此估算器和作为估算器的所包含子对象的参数。
返回值 说明
params mapping of string to any
参数名称映射到其值。
inverse_transform(X)

[源码]

将数据转换回原始表示形式。

如果遇到未知类别(单次热编码中的全零),则无(None)代表该类别。

参数 说明
X array-like or sparse matrix, shape [n_samples, n_encoded_features]
转换后的数据。
返回值 说明
X_tr array-like, shape [n_samples, n_features]
逆变换数组。
set_params(**params)

[源码]

设置此估算器的参数。

该方法适用于简单的估计器以及嵌套对象(例如管道)。他后者具有以下形式的参数<component>__<parameter>这样就可以更新嵌套对象的每个组件。

参数 说明
**params dict
估算器参数。
返回值 说明
self object
估算器实例。
transform(X)

[源码]

参数 说明
X array-like, shape [n_samples, n_features]
要编码的数据。
返回值 说明
X_out sparse matrix if sparse=True else a 2-d array
转换后的输入。