Odpowiedzi:
Załóżmy, że w zestawie danych występuje kategoryczna funkcja (np. Kolor). A twoje próbki mogą być czerwone, żółte lub niebieskie. Aby przekazać ten argument do algorytmu ML, najpierw musisz go zakodować, aby zamiast ciągów znaków były liczby.
Najprostszym sposobem na zrobienie czegoś takiego jest utworzenie mapowania, w którym:
czerwony -> 1
żółty -> 2
niebieski -> 3
i zamień każdy ciąg na jego odwzorowaną wartość.
Może to jednak powodować niepożądane skutki uboczne w naszym modelu ML, ponieważ w przypadku liczb można by pomyśleć, że niebieski> żółty (ponieważ 3> 2) lub że czerwony + żółty = niebieski (ponieważ 1 + 2 = 3). Model nie ma możliwości dowiedzenia się, że dane te były kategoryczne, a następnie zmapowane jako liczby całkowite.
Rozwiązaniem tego problemu jest szybkie kodowanie, w którym tworzymy N nowych funkcji , gdzie N jest liczbą unikalnych wartości w pierwotnej funkcji. W naszym przykładzie N będzie równe 3, ponieważ mamy 3 unikalne kolory (czerwony, żółty i niebieski).
Każda z tych funkcji jest binarna i odpowiada jednej z tych unikalnych wartości. W naszym przykładzie pierwsza funkcja byłaby funkcją binarną, która mówi nam, czy ta próbka jest czerwona, czy nie, druga jest taka sama dla żółtego, a trzecia dla niebieskiego.
Przykład takiej transformacji pokazano poniżej:
Zauważ, że ponieważ takie podejście zwiększa wymiarowość zestawu danych, jeśli mamy funkcję, która przyjmuje wiele unikalnych wartości, możemy chcieć zastosować bardziej rzadkie kodowanie (takie jak to, które przedstawiłem powyżej).
Głębokość: skalar określający głębokość jednego gorącego wymiaru.
indeksy: Tensor indeksów.
To przykład podany w dokumentacji przepływu tensorflow.
1. Tylko określenie wskaźników i głębokości (Domyślne wartości on_value to 1, a off_value to 0)
indices = [0, 1, 2]
depth = 3
tf.one_hot(indices, depth) # output: [3 x 3]
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]
wskaźniki = [0, 2, -1, 1] głębokość = 3 tf.one_hot (wskaźniki, głębokość, wartość on = 5,0, wartość off = 0,0, oś = -1) Wyjście ##: [4 x 3] # [[5,0, 0,0, 0,0], # one_hot (0) # [0,0, 0,0, 5,0], # one_hot (2) # [0,0, 0,0, 0,0], # one_hot (-1) # [0,0, 5,0, 0,0]] # one_hot (1)
Możesz także zobaczyć kod na GitHub