独热编码OneHotEncoder简介

在分类和聚类运算中我们经常计算两个个体之间的距离,对于连续的数字(Numric)这一点不成问题,但是对于名词性(Norminal)的类别,计算距离很难。即使将类别与数字对应,例如{‘A’,‘B’,‘C’}与[0,1,2]对应,我们也不能认为A与B,B与C距离为1,而A与C距离为2。独热编码正是为了处理这种距离的度量,该方法认为每个类别之间的距离是一样的。该方法将类别与向量对应,例如{‘A’,‘B’,‘C’}分别与[1,0,0],[0,1,0],[0,0,1]对应,注意现在各个类别之间的欧式距离是相同的。

现在我们说明OneHotEncoder函数的使用

1 data=np.array([[1,0,3.25],
2                [0,0,5.2],
3                [2,1,3.6]])
4 enc=OneHotEncoder(categorical_features=np.array([0,1]),n_values=[3,2])
5 enc.fit(data)
6 data=enc.transform(data).toarray()
7 print(data)

运行结果为

[[ 0.    1.    0.    1.    0.    3.25]
 [ 1.    0.    0.    1.    0.    5.2 ]
 [ 0.    0.    1.    0.    1.    3.6 ]]

  categorical_features是需要独热编码的列索引,n_values是对应categorical_features中各列下类别的数目,也就是原来的列拓展出新的列数。注意这里两个值可以不指定,直接使用fit_transform函数也可以,程序将统计各列中类别的多少。但是只对整数有效,对浮点数会转换为整数之后再统计,也就是对于3.5和3.6默认都是3,也就是同一类。如果指定了这两个参数,就要对未转换的数据提出要求,各列必须是以{0,1,2,3,4......}来编码,而不能以{1,10,100,200.........}这种随意的方式来编码。否则会出现数组越界的错误

  

 

posted @ 2017-11-01 16:48  上官栋  阅读(10956)  评论(0编辑  收藏  举报