独热编码
独热编码通常用于处理类别间不具有大小关系的特征。
例如:特征:血型,一共有四种类别(A,B,AB,O),采用独热编码后,会把血型变成有一个4维的稀疏向量,
A表示为(1,0,0,0)
B表示为(0,1,0,0)
AB表示为(0,0,1,0)
O表示为(0,0,0,1)
有几个类别,就会生成几维的稀疏向量。
实现
- OneHotEncoder()
- pandas.get_dummies()
- keras.utils.to_categorical
在sklear中实现:
import numpy as np
from sklearn.preprocessing import OneHotEncoder
data = np.array([['A'],['B'],['A'],['AB'],['O'],['B'],['AB']]) # 假如就是血型的特征
ohe = OneHotEncoder() # 初始化独热编码
ohe.fit_transform(data).toarray() # 拟合
输出:
array([[1., 0., 0., 0.],
[0., 0., 1., 0.],
[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 0., 1.],
[0., 0., 1., 0.],
[0., 1., 0., 0.]])
在pandas中实现:
import pandas as pd
data = ['A','B','AB','O']
oht = pd.get_dummies(data) # 通过pandas中的get_dummies获取独热向量编码
输出:
A AB B O
0 1 0 0 0
1 0 0 1 0
2 0 1 0 0
3 0 0 0 1
在Keras中的实现
import keras
data = [0, 1, 2, 3]
data_one_hot = keras.utils.to_categorical(data)
print(data_one_hot)
输出:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
# 利用numpy.argmax可以将one-hot转化为稀疏标签
data_re = np.argmax(data_one_hot,axis=1)
print(data_re)
输出:
[0 1 2 3]