当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn OneHotEncoder用法及代码示例


本文简要介绍python语言中 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’)编码方案进行编码。这将为每个类别创建一个二进制列并返回稀疏矩阵或密集数组(取决于sparse参数)

默认情况下,编码器根据每个特征中的唯一值派生类别。或者,您也可以手动指定categories

将分类数据提供给许多 scikit-learn 估计器需要这种编码,特别是线性模型和具有标准内核的 SVM。

注意:y 标签的 one-hot 编码应使用 LabelBinarizer 代替。

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

参数

categories‘auto’ 或类似数组的列表,默认=’auto’

每个函数的类别(唯一值):

  • ‘auto’:根据训练数据自动确定类别。
  • list : categories[i] 包含第 i 列中预期的类别。传递的类别不应在单个特征中混合字符串和数值,并且应在数值的情况下进行排序。

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

drop{‘first’, ‘if_binary’} 或类似数组的形状 (n_features,),默认=无

指定用于删除每个函数的一个类别的方法。这在完全共线特征导致问题的情况下很有用,例如将结果数据输入神经网络或非正则化回归时。

但是,删除一个类别会破坏原始表示的对称性,因此可能会导致下游模型出现偏差,例如惩罚线性分类或回归模型。

  • 无:保留所有特征(默认)。
  • ‘first’:删除每个特征中的第一个类别。如果只存在一个类别,则该函数将被完全删除。
  • ‘if_binary’:将每个特征中的第一个类别去掉两个类别。具有 1 个或超过 2 个类别的特征保持不变。
  • 数组:drop[i] 是函数X[:, i] 中应该删除的类别。
sparse布尔,默认=真

如果设置为 True 将返回稀疏矩阵,否则将返回一个数组。

dtype数字类型,默认=浮点数

所需的输出数据类型。

handle_unknown{‘error’, ‘ignore’},默认='错误'

如果在转换期间存在未知的分类特征,是否引发错误或忽略(默认为引发)。当此参数设置为 ‘ignore’ 并且在转换过程中遇到未知类别时,生成的此函数的 one-hot 编码列将全为零。在逆变换中,未知类别将表示为无。

属性

categories_数组列表

拟合期间确定的每个特征的类别(按 X 中特征的顺序并与 transform 的输出相对应)。这包括drop(如果有)中指定的类别。

drop_idx_形状数组(n_features,)
  • drop_idx_[i]categories_[i] 中每个特征要删除的类别的索引。
  • drop_idx_[i] = None 如果不从索引为 i 的特征中删除任何类别,例如当drop='if_binary' 并且该函数不是二进制时。
  • drop_idx_ = None 如果将保留所有转换后的特征。
n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

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

例子

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

>>> 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.]])

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.preprocessing.OneHotEncoder。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。