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([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(['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([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.]])
方法
方法 | 说明 |
---|---|
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 转换后的输入。 |