Jak radzić sobie z etykietami ciągów w klasyfikacji wielu klas za pomocą keras?

18

Jestem początkującym w uczeniu maszynowym i keras, a teraz pracuję nad problemem klasyfikacji klas obrazów za pomocą keras. Wejście jest oznaczone obrazem. Po wstępnym przetworzeniu dane szkoleniowe są reprezentowane na liście Python jako:

[["dog", "path/to/dog/imageX.jpg"],["cat", "path/to/cat/imageX.jpg"], ["bird", "path/to/cat/imageX.jpg"]]

„pies”, „kot” i „ptak” to oznaczenia klasy. Wydaje mi się, że w przypadku tego problemu należy zastosować kodowanie jednorazowe, ale nie bardzo wiem, jak sobie z tym poradzić z tymi etykietami ciągów. Próbowałem skearn's LabelEncoder () w następujący sposób:

encoder = LabelEncoder()
trafomed_label = encoder.fit_transform(["dog", "cat", "bird"])
print(trafomed_label)

A wynik to [2 1 0], co jest inne niż moje oczekiwane wyjście czegoś takiego jak [[1,0,0], [0,1,0], [0,0,1]]. Można to zrobić za pomocą kodowania, ale chciałbym wiedzieć, czy istnieje jakiś „standardowy” czy „tradycyjny” sposób radzenia sobie z tym?

Dracarys
źródło

Odpowiedzi:

14

LabelEncoderModuł Sklearn znajduje wszystkie klasy i przypisuje każdej z nich numeryczny identyfikator zaczynający się od 0. Oznacza to, że bez względu na to, jakie reprezentacje znajdują się w oryginalnym zestawie danych, masz teraz prosty spójny sposób reprezentowania każdej z nich. Nie wykonuje kodowania „na gorąco”, chociaż jak poprawnie zidentyfikujesz, jest dość blisko i możesz użyć tych identyfikatorów, aby szybko wygenerować kodowanie „na gorąco” w innym kodzie.

Jeśli chcesz kodować na gorąco, możesz użyć LabelBinarizerzamiast tego. Działa to bardzo podobnie:

 from sklearn.preprocessing import LabelBinarizer
 encoder = LabelBinarizer()
 transfomed_label = encoder.fit_transform(["dog", "cat", "bird"])
 print(transfomed_label)

Wynik:

[[0 0 1]
 [0 1 0]
 [1 0 0]]
Neil Slater
źródło
Ale w jaki sposób kodowanie na gorąco może ci pomóc, gdy spróbujesz przewidzieć nowy kolor? Może w twoim przypadku musisz przekwalifikować model. Czy masz jakieś rozwiązanie?
gtzinos
@gtzinos: To wygląda na inne pytanie. Być może zapytaj o to na stronie. Jeśli to zrobisz, wyjaśnij, czy obawiasz się, że NN przewiduje nowe przedmioty (niewidoczne w danych treningowych, ale logicznie powinno się to zdarzyć przy nowych danych wejściowych), czy też dodajesz nowe zajęcia w locie, gdy napotkasz je w danych szkoleniowych online.
Neil Slater