几种实现one-hot编码的方式

方法1

之前写使用sklearn进行数据挖掘-房价预测(4)—数据预处理一文中处理标签类特征时候已经提到过,使用sklearn中提供的LabelEncoderOneHotEncoder方法

a = ['A','B','A','C']
from sklearn.preprocessing import OneHotEncoder,LabelEncoder
label_value = label_encoder.fit_transform(a)
>>label_encoder.classes_
array(['A', 'B', 'C'], dtype='<U1')
>>label_value 
array([0, 1, 0, 2], dtype=int64)
encoder = OneHotEncoder()
>>one_hot.toarray()
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 1. 0. 0.]
[ 0. 0. 1.]]

方法2

sklearn提供的简单方法,上面两步可以合并为一步

from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
one_hot = encoder.fit_transform(a)
>>one_hot
array([[1, 0, 0],
       [0, 1, 0],
       [1, 0, 0],
       [0, 0, 1]])

方法3

这次需要隆重介绍的是这个方法,在TensorFlow代码中看到一个转为one-hot的实现,方法比较的独特,里面一些numpy方法自己之前也没有接触过,就摘抄下来,反复背诵并默写 =。=

def dense_to_one_hot(labels_dense, num_classes):
   """Convert class labels from scalars to one-hot vectors."""
   num_labels = labels_dense.shape[0]
   index_offset = np.arange(num_labels) * num_classes
   labels_one_hot = np.zeros((num_labels, num_classes))
   labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1
   return labels_one_hot

posted on 2018-03-25 17:29  Wanna_Go  阅读(5271)  评论(0编辑  收藏  举报

导航