在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值。本篇详细讲解该函数的用法,也可以参考官网 sklearn.preprocessing.OneHotEncoder。
该函数在 sklearn.preprocessing 类中,格式为:
下面展示一些 内联代码片
。
oneHotEncoder(n_values=’auto’, categorical_features=’all’, dtype=<class ‘numpy.float64’>, sparse=True, handle_unknown=’error’)
为了方便理解,我们先看下面一个例子:
下面展示一些 内联代码片
。
# -*- coding: utf-8 -*-
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
ans = enc.transform([[0, 1, 3]]).toarray() # 如果不加 toarray() 的话,输出的是稀疏的存储格式,即索引加值的形式,也可以通过参数指定 sparse = False 来达到同样的效果
print(ans) # 输出 [[ 1. 0. 0. 1. 0. 0. 0. 0. 1.]]
下面解释输出结果的意思。对于输入数组,这依旧是把每一行当作一个样本,每一列当作一个特征。
1)我们先来看第一个特征,即第一列 [0,1,0,1],也就是说它有两个取值 0 或者 1,那么 one-hot 就会使用两位来表示这个特征,[1,0] 表示 0, [0,1]表示 1,在上例输出结果中的前两位 [1,0…]也就是表示该特征为 0
2)第二个特征,第二列 [0,1,2,0],它有三种值,那么 one-hot 就会使用三位来表示这个特征,[1,0,0]表示 0, [0,1,0]表示 1,[0,0,1]表示 2,在上例输出结果中的第三位到第五位。 […0,1,0…]也就是表示该特征为 1
3)第三列 [3,0,1,2],它有四种值,那么 one-hot 就会使用四位来表示这个特征,[1,0,0,0]表示 0, [0,1,0,0]表示 1,[0,0,1,0]表示 2,[0,0,0,1]表示 3,在上例输出结果中的最后四位 […0,0,0,1]也就是表示该特征为 3好了
到此相信我们已经很明白它的意思了。值得注意的是,虽然训练样本中的数值仅仅代表类别,但是也必须使用数值格式的数据,如果使用字符串格式的数据会报错。
原网址:https://www.cnblogs.com/zhoukui/p/9159909.html