from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
# enc.fit([[0, 0, 3], [0, 1, 2], [2, 2, 2], [2, 0, 2]])
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
print(enc.n_values_) # 每个特征出现的最大值+1
print("***")
print(enc.feature_indices_) # 累加 enc.n_values_
print("***")
print(enc.transform([[0, 0, 0]]).toarray())
[2 3 4]
***
[0 2 5 9]
***
[[1. 0. 1. 0. 0. 1. 0. 0. 0.]]
我们fit进去的数据集是:
[[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]]
每一列代表一个属性,fit 操作之后:
- 对象
enc
的n_values_
成员变量,记录着每一个属性的最大取值数目,如本例第一个属性:0, 1, 0, 1
⇒ 2,0, 1, 2, 0
⇒ 3,3, 0, 1, 2
⇒4
;- 即各个属性(feature)在 one hot 编码下占据的位数;
- 对象
enc
的feature_indices_
,则记录着属性在新 One hot 编码下的索引位置,- feature_indices_ 是对 n_values_ 的累积值,不过 feature_indices 的首位是 0
- 进一步通过 fit 好的 one hot encoder 对新来的特征向量进行编码:
- 前 2 位 1, 0,对 0 进行编码
- 中间 3 位 0, 1, 0 对 1 进行编码;
- 末尾 4 位 0, 1, 0, 0 对 1 进行编码