Як боротися зі строковими мітками в багатокласовій класифікації з керами?


18

Я новачок у машинному навчанні та керах, і зараз працюю над класовою проблемою класифікації зображень за допомогою керас. Вхід позначено тегом зображення. Після деякої попередньої обробки дані тренінгу представлені в списку Python як:

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

"собака", "кішка" та "птах" - це позначки класу. Я думаю, що для цієї проблеми слід використовувати одне гаряче кодування, але мені не дуже зрозуміло, як боротися з цими рядковими мітками. Я спробував LabelEncoder () sklearn таким чином:

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

А вихід - [2 1 0], що відрізняється від мого очікування виходу подібного типу [[1,0,0], [0,1,0], [0,0,1]]. Це можна зробити за допомогою кодування, але я хотів би знати, чи існує якийсь "стандартний" або "традиційний" спосіб боротьби з цим?

Відповіді:


14

LabelEncoderМодуль Sklearn знаходить усі класи та присвоює кожному числовий ідентифікатор, починаючи з 0. Це означає, що незалежно від того, які представлення вашого класу є в оригінальному наборі даних, тепер у вас є простий послідовний спосіб їх представлення. Він не робить однокольорового кодування, хоча, як ви правильно визначите, він досить близький, і ви можете використовувати ці ідентифікатори, щоб швидко генерувати однокольорові кодування в іншому коді.

Якщо ви хочете однокореневе кодування, ви можете використовувати LabelBinarizerзамість цього. Це працює дуже аналогічно:

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

Вихід:

[[0 0 1]
 [0 1 0]
 [1 0 0]]

Але як міг би допомогти вам hotencoding, коли ви спробуєте передбачити новий колір? Можливо, у вашому випадку вам доведеться перевчити модель. Чи є у вас якесь рішення?
gtzinos

@gtzinos: Це виглядає як інше питання. Можливо, запитайте це на сайті. Якщо ви це робите, уточнюйте, чи турбуєтесь ви про те, що NN прогнозує абсолютно новий елемент (не бачиться в даних про навчання, але логічно це має відбуватися на нових вкладах) або додавати нові уроки під час руху, коли вони зустрічаються в даних онлайн-навчання.
Ніл Слейтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.