Использование pandas get_dummies
:
>>> target = np.random.randint(6, size=(10, 1)) # the original target is of shape (1034892, 1)
>>> target = target.flatten()
array([0, 1, 0, 0, 4, 3, 1, 5, 4, 5])
>>> pd.get_dummies(target).to_numpy()
array([[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 1, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]])
В случае, если ваша цель не имеет всех значений в нужном диапазоне (как в приведенном выше примере, где target
не имеет значение 2), будут отсутствовать столбцы для этих пропущенных значений. Один из обходных путей следующий:
>>> target = pd.Categorical(target, categories=np.arange(6))
>>> pd.get_dummies(target).to_numpy()
array([[1, 0, 0, 0, 0, 0],
[0, 1, 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, 1, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]])
Это очень быстро, даже если у вас есть target
размера (1034892, 1)
.