Mam sieć neuronową skonfigurowaną do przewidywania czegoś, gdzie zmienna wyjściowa jest porządkowa. Opiszę poniżej, używając trzech możliwych wyjść A <B <C.
Jest całkiem oczywiste, jak używać sieci neuronowej do generowania danych kategorycznych: dane wyjściowe to tylko softmax ostatniej (zwykle w pełni połączonej) warstwy, jednej na kategorię, a przewidywana kategoria to ta o największej wartości wyjściowej (jest to domyślne w wielu popularnych modelach). Korzystałem z tego samego ustawienia dla wartości porządkowych. Jednak w tym przypadku wyjścia często nie mają sensu, na przykład wyjścia sieciowe dla A i C są wysokie, ale B jest niskie: nie jest to prawdopodobne w przypadku wartości porządkowych.
Mam na to jeden pomysł, który polega na obliczeniu straty na podstawie porównania wyników z 1 0 0 dla A, 1 1 0 dla B i 1 1 1 dla C. Dokładne progi można później wyregulować za pomocą innego klasyfikatora (np. Bayesian ), ale wydaje się, że odzwierciedla to zasadniczą ideę uporządkowania danych wejściowych, bez określania jakiejkolwiek konkretnej skali przedziałów.
Jaki jest standardowy sposób rozwiązania tego problemu? Czy są jakieś badania lub referencje opisujące zalety i wady różnych podejść?
źródło
Odpowiedzi:
Uważam, że większość ludzi robi po prostu traktowanie klasyfikacji porządkowej jako ogólnej klasyfikacji wieloklasowej. Tak więc, jeśli mają klasy , będą mieli wyjścia i po prostu użyją funkcji aktywacji sigmoidalnej (oczywiście nie softmax) i binarnej entropii krzyżowej jako straty.K. K.
Ale niektórym ludziom udało się wymyślić sprytne kodowanie dla twoich klas porządkowych (zobacz odpowiedź na stackoverflow ). To rodzaj kodowania „na gorąco”,
klasa 1 jest reprezentowana jako [0 0 0 0 ...]
klasa 2 jest reprezentowana jako [1 0 0 0 ...]
klasa 3 jest reprezentowana jako [1 1 0 0 ...]
tj. każdy neuron przewiduje prawdopodobieństwo . Nadal musisz użyć sigmoidu jako funkcji aktywacji, ale myślę, że to pomaga sieci zrozumieć ciągłość między klasami, nie wiem. Następnie wykonujesz post-processing ( ), aby przekonwertować dane binarne na klasy.P.( y^< k )
np.sum
Ta strategia przypomina zespół Franka i Halla i myślę, że to pierwsza tego typu publikacja .
źródło