Почему бы не использовать OneHotEncoder ?
>>> from sklearn.preprocessing import OneHotEncoder
>>> ohe = OneHotEncoder(categories='auto', sparse=False)
>>> arr = ohe.fit_transform(target[:, np.newaxis])
>>> arr
array([[0., 1.],
[0., 1.],
[1., 0.],
[1., 0.],
[1., 0.],
[0., 1.],
[0., 1.],
[1., 0.],
[1., 0.]])
Он хранит хорошие метаданные о преобразовании:
>>> ohe.categories_
[array(['cat', 'dog'], dtype='<U3')]
Плюс, вы можете легко конвертировать обратно:
>>> ohe.inverse_transform(arr).ravel()
array(['dog', 'dog', 'cat', 'cat', 'cat', 'dog', 'dog', 'cat', 'cat'],
dtype='<U3')