OneHotEncoder函数
- 一、函数功能与参数
- 二、函数使用
- 参考
- 修改时间
一、函数功能与参数
将分类特征编码为one-hot数字数组。
这个转换器的输入应该是一个类似数组的整数或字符串,表示分类(离散)特征所采用的值。使用 one-hot(又名“one-of-K”或“dummy”)编码方案对特征进行编码。这将为每个类别创建一个二进制列并返回一个稀疏矩阵或密集数组(取决于sparse 参数)。
默认情况下,编码器根据每个特征中的唯一值派生类别。或者,您也可以categories 手动指定。
注意:y 标签的 one-hot 编码应该使用 LabelBinarizer。
使用说明:
from sklearn.preprocessing import OneHotEncoder
OneHotEncoder(categories='auto', sparse='True', dtype='float')
函数参数 | 参数说明 |
categories | 默认’auto’,根据根据训练数据自动确认类别;默认数组的列表,categories[i]保存第 i 列中预期的类别。传递的类别不应在单个特征中混合字符串和数值,并且应在数值的情况下进行排序。使用的类别可以在categories_属性中找到。 |
sparse | 默认为True,如果设置为 True 将返回稀疏矩阵,否则将返回一个数组。 |
dtype | 默认为float,所需的输出数据类型。 |
函数属性 | 属性说明 |
categories_ | 属性名称和类型 |
函数方法 | 方法说明 |
get_feature_names() | 查看拟合后的特征名称 |
fit(X) | 使X拟合OneHotEncoder |
fit_transform(X) | 使X拟合OneHotEncoder,并且转换X |
二、函数使用
生成OneHotEncoder类模型。
import pandas as pd
data = {'degree':['master','master','PHD'],'grade':['A', 'B', 'C']}
df = pd.DataFrame(data)
from sklearn.preprocessing import OneHotEncoder
# 拟合模型
enc = OneHotEncoder()
enc.fit(df)
# 展示原始每个特征的不同种类
enc.categories_
# [array(['PHD', 'master'], dtype=object), array(['A', 'B', 'C'], dtype=object)]
# 不同特征的不同属性值列举出来
enc.get_feature_names()
"""
array(['x0_PHD', 'x0_master', 'x1_A', 'x1_B', 'x1_C'], dtype=object)
"""
# 输出稀疏矩阵,指出矩阵中1的坐标位置,其余位置为 0。
print(enc.transform(df))
"""
(0, 1) 1.0
(0, 2) 1.0
(1, 1) 1.0
(1, 3) 1.0
(2, 0) 1.0
(2, 4) 1.0
"""
# 加上toarray()转换为数组形式,直观的结果,类似与 get_dummy()
print(enc.transform(df).toarray())
"""
[[0. 1. 1. 0. 0.]
[0. 1. 0. 1. 0.]
[1. 0. 0. 0. 1.]]
"""
注意: 如果OneHotEncoder模型设置了sparse=False,则直接transform可以得到数组矩阵而不在需要用到toarray()。
from sklearn.preprocessing import OneHotEncoder
# 拟合模型
# 注意这里设置了参数sprase=False,即直接返回数组
enc = OneHotEncoder(sparse=False)
enc.fit(df)
print(enc.transform(df))
"""
[[0. 1. 1. 0. 0.]
[0. 1. 0. 1. 0.]
[1. 0. 0. 0. 1.]]
"""
测试:
根据训练好的已有OneHotEncoder模型去OneHot测试样本:
da1 = {'degree':['master'],'grade':['C']}
dd1 = pd.DataFrame(da1)
print(enc.transform(dd1))
"""
[[0. 1. 0. 0. 1.]]
"""
注意:测试样本仅限于训练样本中的特征及其对应的特征值,并且按照顺序给定特征值,如下:
# 新的特征值
da1 = {'degree':['master'],'grade':['D']}
# Found unknown categories ['D'] in column 1 during transform
# 特征值混合
da1 = {'degree':['C'],'grade':['C']}
# Found unknown categories ['C'] in column 0 during transform
# 新的特征
da1 = {'height':['master'],'weather':['C']}
# 正常输出:[[0. 1. 0. 0. 1.]]
# 然而
da1 = {'height':['C'],'weather':['C']}
# Found unknown categories ['C'] in column 0 during transform
# 同前面第二个错误
说明OneHot与特征标签无关,特征按顺序进行OneHot,且与特征值有关。
参考
sklearn.preprocessing.OneHotEncoder (scikit-learn)