数据预处理:One-Hot Encoding

机器学习中,在对数据进行训练之前,都会对数据进行预处理,也就是特征提取,个人认为特征提取是训练模型中非常非常重要的一步!
在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有五个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3),x_4 = (4),x_5 = (5)。两个工作之间的距离是,(x_1, x_2) = 1, d(x_2, x_3) = 1, d(x_1, x_3) = 2,d(x_1, x_5) = 4… 那么x_1和x_5工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到x_1 = (1, 0, 0,0,0), x_2 = (0, 1, 0,0,0), x_3 = (0, 0, 1,0,0),x_4 = (0, 0, 0,1,0),x_5 = (0, 0, 0,0,1),那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理。
而各个机器学习、深度学习框架都提供了One-Hot Encoding,这里只提供Keras 的API:

# coding=utf-8
# By author MZ
from keras.utils import np_utils
from numpy.ma import array

y_lable_train=array([[6],[9],[5],[5],[4],[1]])
##使用keras提供的np_utils.to_categorical方法,进行One-Hot Encoding转换
categorical = np_utils.to_categorical(y_lable_train)
##打印输出
print(categorical.shape)
print(categorical)
打印结果是:
Using TensorFlow backend.   这一行是keras默认使用tensorflow作为backend
(6, 10)     共6项,每一项都是由10个0或者1组成
[[0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]]

猜你喜欢

转载自blog.csdn.net/xiaozhaoshigedasb/article/details/84579862