什么是OneHot? 这个大家可以自行百度。 这里的前提是你已经了解了这个概念。
使用OneHotEncoder需要安装sklearn包以及scipy包。
使用OneHotEncoder生成OneHot数据总共分为两步
- fit
根据样本适配 - transform
根据适配结果转换
示例代码如下
import numpy as np
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
b = np.array([[3], [8], [1], [1]])
ohe.fit(b) # 样本数据
X = np.array([[0], [0], [1], [0]])
c = ohe.transform(X).toarray()
print("c=", c)
fit实际上是对样本做评估, 从样本数据来看一共有三个值:1,3,8. 所以生成的OneHot将有3列,用来分别表示这三个值;样本数据一共是4个数据,所以生成的OneHot将有4行。所以,OneHot结果将是一个(4,3)矩阵。
结果如下:
c= [[0. 0. 0.]
[0. 0. 0.]
[1. 0. 0.]
[0. 0. 0.]]
从X数据来看,第一个0不在样本中,所以为[0 0 0].
第二位0同理
第三位1,按大小顺序是第一(顺序应该为1,3,8),所以为[1 0 0]
第四位0同理
我们称刚才样例中的1,3,8位一种特征,就好比形容一个人,1,3,8分别代表了白,黄,黑三种肤色。那么现在我们再增加一组特征,如性别。 0,1分别代表男和女。
修改代码如下:
import numpy as np
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
b = np.array([[3, 1], [8, 1], [1, 0], [1, 1]])
ohe.fit(b)
X = np.array([[1,0], [0,0], [1,1], [3,1]])
c = ohe.transform(X).toarray()
print("c=", c)
样本数据[3,1]代表了黄种女性,[8,1]代表了黑种女性,[1,0]代表了白种男性,[1,1]代表了白种女性。
特征1刚才我们已经分析过了是(4,3);同理特征2应该是(4,2),那么最终结果应该是(4,5).
结果如下:
c= [[1. 0. 0. 1. 0.]#[1 0 0]和[1 0]的联合
[0. 0. 0. 1. 0.]
[1. 0. 0. 0. 1.]
[0. 1. 0. 0. 1.]]
每一行是两组特性的联合。前3列是特性1后2列是特性2.
如果再增加一组特征就以此类推。 不知道现在你是否看明白了。如果有帮助,请点个赞吧。