Sklearn 中 OneHotEncoder 的使用:
import numpy as np
from sklearn.preprocessing import OneHotEncoder
samples = np.array([ [1, 3, 2], [7, 5, 4], [1, 8, 6], [7, 3, 9] ]) # 独热编码 sparse 是否采用稀疏矩阵 ohe = OneHotEncoder(sparse=False, dtype="int32") # sparse=False 返回数组,True 返回矩阵
result = ohe.fit_transform(samples) # 00列2位,01列 3位,02列4位
result 转为数组的one-hot结果如下:
[[1 0 1 0 0 1 0 0 0]
[0 1 0 1 0 0 1 0 0]
[1 0 0 0 1 0 0 1 0]
[0 1 1 0 0 0 0 0 1]]
samples第一列有两种类别[1,7],第二列有三种类别[3,5,8],第三列有四种类别[2, 4, 6, 9];
result中前两列对应samples中第一列结果,
result中第三到五列对应samples第二列类别,
result中第到六到九列对应samples第三列类别;
使用LabelEncoder编码:
raw_samples = np.array(["audi", "ford", "audi", "toyota","ford", "bmw", "redflag"]) print(raw_samples) # 训练之前 需要标签编码 lbe = LabelEncoder() result = lbe.fit_transform(raw_samples) print("-----编码后\n", result) # 编码 反向推导 test = [0, 0, 1, 1, 4] print("-----编码反推\n", lbe.inverse_transform(test))
注:只能对一维数组编码,否则会报错;