一般我们实现ont-hot编码通过sk-lean中的OneHotEncoder来实现,今天发现一个实现one-hot的编码的手动实现方式,感觉比较有意思,给大家分享一下。
下面是手动实现one-hot的过程:
1、首先加载numpy和pandas
import numpy as np
import pandas as pd
2、需要转化成独热编码的数据,假设这里有10个数据,5个不同的值。
# 需要转化为独热编码的数据
labels_dense = pd.Series([2,3,2,1,4,0,3,1,4,1])
labels_dense
需要转化为独热编码的数据
3、偏移量定义量
index_offset=np.arange(labels_dense.shape[0]) * 5
print(index_offset)
输出结果:
[ 0 5 10 15 20 25 30 35 40 45]
4、建一个10行5列的数据,因为我们要把10个数据改成5个值的one-hot编码,形状就是这样样子的
labels_one_hot=np.zeros((10,5))
labels_one_hot
10行5列的0
5、完成one-hot编码赋值
通过numpy.ndarray.flat[]把一个10 * 5的矩阵看成是一个1 * 50的行向量,对这个1 * 50的行向量在index_offset+labels_dense.ravel()位置的值赋值为1即完成了one-hot编码
labels_one_hot.flat[index_offset+labels_dense.ravel()]=1
index_offset+labels_dense.ravel()是什么?
print(index_offset+labels_dense.ravel())
[ 2 8 12 16 24 25 33 36 44 46]
6、看看最后的独热编码结果是什么?
print(labels_one_hot)
one-hot编码结果
特别说明一下扁平化处理
扁平化
网友评论