For example a person could have features 

["male", "female"]

["from Europe", "from US", "from Asia"]

["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"].

Such features can be efficiently coded as integers,

for instance ["male", "from US", "uses Internet Explorer"] could be expressed as [0, 1, 3] 

["female", "from Asia", "uses Chrome"] would be [1, 2, 1].

首先要明白,输入数组转化成如下形式:

特征分布默认为列分布,也就是第一列是一个特征,第二列又是一个。

transform 中 【0,1,3】是一个 1*3 矩阵,代表了一个样本 3个features。

通过fit这个method,分析输入的数组,可以得到n_values 也就是能得到每一个特征 需要多少位来表示。比如第一列,发现范围是 0 1,那么需要两位;第二列 0 1 2 需要三位;第三列 0 1 2 3需要四位。

所以【0,1,3】这个数组表示三个特征值,等价于 [1,0,    0,1,0,    0,0,0,1]

 

但是!!如果fit中只有 0 2 3 5 ,那么只能一一对应为 0-0 / 2-1 / 3- 2 / 5- 3。所以transform 中有不属于fit 的元素时 ,默认为0 。如下 右边为输出。

       

 

 

 再举一个例子:

fit中的feature  [[1]

       [2]

       [3]

       [4]]

 fit代表了 一个feature,transform 4*1 代表 4个样本 1个feature。 fit和transform的数据格式一定要匹配的!!!

 

 

 

我们也可以直接输入 n_values的array

如果你已经知道n_values 那么fit 已经没什么意义了 (测试过 fit中不同数组结果是一样的)

 

 enc.feature_indices_

这个操作呢 是告诉你 新生成的 one hot encode 数组怎么拆解成 n个features

比如上例子, [1,0,    0,1,0,    0,0,0,1] 可以知道 0-1 2-4 5-9 分别代表三个features,所以 enc.feature_indices_  为 [0, 2, 5, 9]

 

labelencoder()网上有比较详细的解释直接看!!!