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]