onehot理解
看代码,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]
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。