独热编码 (One-Hot)
为样本特征的每个值建立一个由一个1和若干个0组成的序列, 用该序列对所有的特征值进行编码.
1 3 2
7 5 4
1 8 6
7 3 9
为每一个数字进行独热编码:
1-10 3-100 2-1000
7-01 5-010 4-0100
8-001 6-0010
9-0001
使用上述码表, 对原始矩阵编码过后的结果为:
101001000
010100100
100010010
011000001
独热编码相关API:
# 获取独热编码器对象
ohe = sp.OneHotEncoder(sparse=是否采用紧缩格式)
# 对原始样本矩阵进行处理
result = ohe.fit_transform(原始样本矩阵)
# 获取独热编码器对象
ohe = sp.OneHotEncoder(sparse=是否采用紧缩格式)
# 对原始样本矩阵进行训练,得到编码字典
encode_dict = ohe.fit(原始样本矩阵)
# 根据字典对样本矩阵执行独热编码
result = encode_dict.transform(样本矩阵)
案例:
# 构建独热编码器
ohe = sp.OneHotEncoder(sparse=False, dtype=int)
r = ohe.fit_transform(samples)
print(r)
[[1 0 0 0 0 1 1 0 0]
[0 1 0 0 1 0 0 1 0]
[0 0 1 1 0 0 0 0 1]]
标签编码
根据字符串形式的特征值在特征序列中的位置, 为其指定一个数字标签, 用于提供给基于数值算法的学习模型。标签编码是深度学习中非常常用的编码方式。
标签编码相关API:
# 创建标签编码器
lbe = sp.LabelEncoder()
# 执行标签编码
result = lbe.fit_transform(原始样本矩阵)
# 标签解码, 通过result矩阵回推样本矩阵
样本矩阵 = lbe.inverse_transform(result)
案例:
"""
标签编码器
"""
import numpy as np
import sklearn.preprocessing as sp
samples = np.array(['audi', 'ford', 'audi',
'toyota', 'ford', 'bmw', 'toyota',
'ford', 'audi'])
# 标签编码器
lbe = sp.LabelEncoder()
r_samples = lbe.fit_transform(samples)
print(r_samples)
inv_samples = lbe.inverse_transform(r_samples)
print(inv_samples)
[0 2 0 3 2 1 3 2 0]
['audi' 'ford' 'audi' 'toyota' 'ford' 'bmw' 'toyota' 'ford' 'audi']