本文简要介绍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.]])
相关用法
- Python sklearn OneVsRestClassifier用法及代码示例
- Python sklearn OneVsOneClassifier用法及代码示例
- Python sklearn OneClassSVM用法及代码示例
- Python sklearn OAS用法及代码示例
- Python sklearn OrdinalEncoder用法及代码示例
- Python sklearn OrthogonalMatchingPursuit用法及代码示例
- Python sklearn OPTICS用法及代码示例
- Python sklearn OutputCodeClassifier用法及代码示例
- Python sklearn OrthogonalMatchingPursuitCV用法及代码示例
- Python sklearn jaccard_score用法及代码示例
- Python sklearn WhiteKernel用法及代码示例
- Python sklearn CalibrationDisplay.from_predictions用法及代码示例
- Python sklearn VotingRegressor用法及代码示例
- Python sklearn gen_batches用法及代码示例
- Python sklearn ExpSineSquared用法及代码示例
- Python sklearn MDS用法及代码示例
- Python sklearn adjusted_rand_score用法及代码示例
- Python sklearn MLPClassifier用法及代码示例
- Python sklearn train_test_split用法及代码示例
- Python sklearn RandomTreesEmbedding用法及代码示例
- Python sklearn GradientBoostingRegressor用法及代码示例
- Python sklearn GridSearchCV用法及代码示例
- Python sklearn log_loss用法及代码示例
- Python sklearn r2_score用法及代码示例
- Python sklearn ndcg_score用法及代码示例
注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.preprocessing.OneHotEncoder。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。