看代码,fit代表将传入的数组训练,transform代表转换

fit_transform代表将传入的数组训练并转换返回

enc = OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])
array = enc.transform([[0,1,3],[1,1,1]])
print(array)

# 输出
#  (0, 0)    1.0
#  (0, 3)    1.0
#  (0, 8)    1.0
#  (1, 1)    1.0
#  (1, 3)    1.0
#  (1, 6)    1.0

假设我们有[0,1,3]转换后为

(0, 0)    1.0
(0, 3)    1.0
(0, 8)    1.0

代表 0,0位置是值是1,0,3位置是1,0,8位置是1,其他位置均为0.这是稀疏类型

array = enc.transform([[0,1,3]]).toarray()
print(array)

#输出 [[1. 0. 0. 1. 0. 0. 0. 0. 1.]]

当我们将稀疏类型.toarray()之后,就是稠密类型,即使所在位置是0也会被表示,而不是仅表示有值部分。

下面更好理解为什么转换之后是 [1. 0. 0. 1. 0. 0. 0. 0. 1.]

性别特征:["男","女"],按照N位状态寄存器来对N个状态进行编码的原理,咱们处理后应该是这样的(这里只有两个特征,所以N=2):

男 => 10

女 => 01

祖国特征:["中国","美国,"法国"](这里N=3):

中国 => 100

美国 => 010

法国 => 001

运动特征:["足球","篮球","羽毛球","乒乓球"](这里N=4):

足球 => 1000

篮球 => 0100

羽毛球 => 0010

乒乓球 => 0001

所以,当一个样本为["男","中国","乒乓球"]的时候,完整的特征数字化的结果为:

[1,0,1,0,0,0,0,0,1]

引用:https://blog.csdn.net/zyc88888/article/details/103819604