Jaki jest najlepszy model Keras do klasyfikacji wielu klas?

30

Pracuję na badania, gdzie potrzeba klasyfikowania jednego zwycięzcy trzech zdarzeń = ( win, draw, lose)

WINNER  LEAGUE  HOME    AWAY    MATCH_HOME  MATCH_DRAW  MATCH_AWAY  MATCH_U2_50 MATCH_O2_50
3         13    550      571          1.86        3.34        4.23       1.66     2.11
3         7     322     334           7.55         4.1         1.4       2.17     1.61

Mój obecny model to:

def build_model(input_dim, output_classes):
    model = Sequential()
    model.add(Dense(input_dim=input_dim, output_dim=12, activation=relu))
    model.add(Dropout(0.5))
    model.add(Dense(output_dim=output_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adadelta')
    return model
  1. Nie jestem pewien, czy jest to poprawna klasyfikacja dla wielu klas
  2. Jaka jest najlepsza konfiguracja do klasyfikacji binarnej?

EDYCJA: # 2 - Podoba ci się?

model.add(Dense(input_dim=input_dim, output_dim=12, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(output_dim=output_classes, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adadelta')
SpanishBoy
źródło
1
Masz na myśli „model”, czy tylko nawiązujesz do wyboru ostatniej warstwy activation='softmax'i wyboru kompilacji loss='categorical_crossentropy'? IMO, twoje wybory dla nich są dobre dla modelu do przewidywania wielu wzajemnie wykluczających się klas. Jeśli potrzebujesz porady na temat całego modelu, który jest zupełnie inny, i powinieneś wyjaśnić więcej o swoich obawach, w przeciwnym razie w jednej odpowiedzi jest zbyt wiele do wyjaśnienia.
Neil Slater
Chodzi mi architecturegłównie o warstwy. Jakaś rada na moje pytanie nr 2?
SpanishBoy
1
Rzadko istnieje „właściwy” sposób budowy architektury, który powinien być testowany przy użyciu różnych meta-parametrów, i powinien być oparty na wynikach (w tym wszelkie ograniczenia, które możesz mieć na wykorzystanie zasobów do szkolenia czasu / pamięci itp.). W przypadku # 2 możesz albo mieć dwa wyjścia z softmax podobnym do teraz, albo możesz mieć warstwę wyjściową z jednym wyjściem, activation='sigmoid'iloss='binary_crossentropy'
Neil Slater
activation='sigmoid'w warstwie wyjściowej . Ukryta warstwa może pozostać tak 'relu', jak chcesz (chociaż prawdopodobnie zacznę od 'tanh'tego problemu, to jest osobiste preferencje przy bardzo niewielkim wsparciu teorii)
Neil Slater

Odpowiedzi:

35

Wybory activation='softmax'w ostatniej warstwie i wybór kompilacji loss='categorical_crossentropy'są dobre dla modelu do przewidywania wielu wykluczających się klas.

Jeśli chodzi o bardziej ogólne wybory, rzadko istnieje „właściwy” sposób na zbudowanie architektury. Zamiast tego powinno to być coś, co testujesz przy użyciu różnych meta-parametrów (takich jak rozmiary warstw, liczba warstw, ilość rezygnacji) i powinno być uzależnione od wyników (w tym wszelkich ograniczeń, jakie możesz mieć na wykorzystanie zasobów do szkolenia / pamięci używać itp.).

Użyj zestawu weryfikacji krzyżowej, aby wybrać odpowiednią architekturę. Po zakończeniu, aby uzyskać dokładniejszy pomiar ogólnej wydajności modelu, należy użyć osobnego zestawu testów. W tym celu należy wykorzystać dane wyciągnięte z zestawu treningowego oddzielnie od zestawu CV. Rozsądny podział może wynosić 60/20/20 pociąg / CV / test, w zależności od tego, ile masz danych i ile potrzebujesz, aby podać dokładną końcową liczbę.

W przypadku pytania nr 2 możesz albo mieć dwa wyjścia z końcową wersją softmax podobną do teraz, albo możesz mieć ostatnią warstwę z jednym wyjściem, activation='sigmoid'i loss='binary_crossentropy'.

Z czystego wyczucia co do tego, co może działać z tymi danymi, sugerowałbym próbowanie 'tanh'lub 'sigmoid'aktywację w ukrytej warstwie, zamiast 'relu', i sugerowałbym również zwiększenie liczby ukrytych neuronów (np. 100) i zmniejszenie ilości wypadania ( np. 0,2). Zastrzeżenie: przeczucie, że architektura sieci neuronowej nie jest naukowa. Wypróbuj i przetestuj.

Neil Slater
źródło