我试图通过Python和Scikit-learn来了解onehotencoding过程的输出。我相信我有一个热门编码的想法。即,将离散值转换为具有" ON"值的扩展特征向量,以识别分类的成员身份。也许我错了,这让我感到困惑,但这是我的理解。
so,从这里的文档中:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.onehotencoder.html
我看到以下示例:
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
有人可以解释数据[[0,0,3],[1,1,0],[0,2,1],[1,0,2]]最终被转换为[[[[[[0,0,3],[1,1,0]1.,0.,0.,1。,0.,0.,1。,0。,0。]?
如何使用转换参数[0,1,1]?
非常感谢您对此的任何帮助
乔恩
一个热编码的主要目标是分类特征,在数字之间没有空间关系的情况下,它们不是连续的。因此,如果功能具有值1,则不意味着它接近2。
。为避免,我们必须为功能可以以二进制方式具有的每个值创建列。将分类功能转换为可以与scikit-learn
估计器一起使用的功能的一种可能性是使用独一无二的K或单热编码。该估计器将每个分类特征用m
转换为m
二进制特征,只有一个活动。
因此,在您的示例中,请注意,您要转换的是数组:[0, 1, 1]
。
请记住,转换将使此数组二进制于可能的编码,从而导致数组:[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]
第一个和第二个值可以具有2个值,而第三个值可以具有4个值(请注意,要适合我们仅通过3(0、2、3),在转换中,我们也通过1。
因此,前两个元素解释了第一个功能,接下来的两个解释了第二个功能,最后四个功能解释了第三个功能。
所以...在进一步挖掘之后,这是我尝试澄清一种理解这种方法并为他人回答的方法。
1)原始数据集为[0,0,3],[1,1,0],[0,2,1],[1,0,2]
2)然后,您需要将这些(按位置)减少到唯一有序值的列表:
所以...
For position 1 (0, 1, 0, 1) --> [0, 1]
For position 2 (0, 1, 2, 0) --> [0, 1, 2]
For position 3 (3, 0, 1, 2) --> [0, 1, 2, 3]
现在,在转换时,您只需将转换的数组中的每个位置项目与唯一有序项目列表中的位置进行比较
用于转换的阵列[0,1,1]
The first '0' generates a [1, 0] ('0' matches value in position one, not position two)
The next '1' generates a [0, 1, 0] ('1' only matches value in position two)
the last '1' generates a [0, 1, 0, 0] ('1' only matches value in position two)
组合,这等于[1、0、0、1、0、0、1、0、0、0]。
我已经尝试了许多其他数据集,并且逻辑是一致的。