方法1
之前寫使用sklearn進行數據挖掘-房價預測(4)—數據預處理一文中處理標簽類特征
時候已經提到過,使用sklearn中提供的LabelEncoder
和OneHotEncoder
方法
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