66 lines
1.4 KiB
Python
Executable File
66 lines
1.4 KiB
Python
Executable File
import numpy as np
|
|
|
|
|
|
class LabelTransformer(object):
|
|
"""
|
|
Label encoder decoder
|
|
|
|
Attributes
|
|
----------
|
|
n_classes : int
|
|
number of classes, K
|
|
"""
|
|
|
|
def __init__(self, n_classes:int=None):
|
|
self.n_classes = n_classes
|
|
|
|
@property
|
|
def n_classes(self):
|
|
return self.__n_classes
|
|
|
|
@n_classes.setter
|
|
def n_classes(self, K):
|
|
self.__n_classes = K
|
|
self.__encoder = None if K is None else np.eye(K)
|
|
|
|
@property
|
|
def encoder(self):
|
|
return self.__encoder
|
|
|
|
def encode(self, class_indices:np.ndarray):
|
|
"""
|
|
encode class index into one-of-k code
|
|
|
|
Parameters
|
|
----------
|
|
class_indices : (N,) np.ndarray
|
|
non-negative class index
|
|
elements must be integer in [0, n_classes)
|
|
|
|
Returns
|
|
-------
|
|
(N, K) np.ndarray
|
|
one-of-k encoding of input
|
|
"""
|
|
if self.n_classes is None:
|
|
self.n_classes = np.max(class_indices) + 1
|
|
|
|
return self.encoder[class_indices]
|
|
|
|
def decode(self, onehot:np.ndarray):
|
|
"""
|
|
decode one-of-k code into class index
|
|
|
|
Parameters
|
|
----------
|
|
onehot : (N, K) np.ndarray
|
|
one-of-k code
|
|
|
|
Returns
|
|
-------
|
|
(N,) np.ndarray
|
|
class index
|
|
"""
|
|
|
|
return np.argmax(onehot, axis=1)
|