Какая модель Keras лучше всего подходит для мультиклассовой классификации?

30

Я работаю на исследования, где необходимо классифицировать один из WINNER три события = ( 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

Моя текущая модель:

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. Я не уверен, что это правильный выбор для классификации нескольких классов
  2. Какова наилучшая установка для бинарной классификации?

РЕДАКТИРОВАТЬ: № 2 - Как это?

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
источник
1
Вы имеете в виду «модель» или просто ссылаетесь на выбор последнего слоя activation='softmax'и выбор компиляции loss='categorical_crossentropy'? ИМО, ваш выбор для них хорош для модели, которая предсказывает несколько взаимоисключающих классов. Если вам нужен совет по всей модели, это совсем другое дело, и вы должны объяснить больше о том, что вас беспокоит, иначе в одном ответе слишком много объяснений.
Нил Слэйтер
Я имею в виду о architectureслоях в основном. Любой совет для моего вопроса № 2?
SpanishBoy
1
Редко существует «правильный» способ построения архитектуры, который должен быть чем-то, что вы тестируете с различными мета-параметрами, и должен быть ориентирован на результат (включая любые ограничения, которые вы можете иметь при использовании ресурсов для обучения использованию времени / памяти и т. Д.). Для # 2 вы можете либо просто иметь два выхода с softmax, как сейчас, либо у вас может быть выходной слой с одним выходом, activation='sigmoid'иloss='binary_crossentropy'
Neil Slater
activation='sigmoid'в выходном слое. Скрытый слой может остаться таким, как 'relu'вам нравится (хотя я, вероятно, начну с 'tanh'этой проблемы, это личное предпочтение с очень небольшой поддержкой теории)
Нил Слейтер

Ответы:

35

Ваш выбор activation='softmax'на последнем уровне и выбор компиляции loss='categorical_crossentropy'хороши для модели, чтобы предсказать несколько взаимоисключающих классов.

Что касается более общего выбора, то редко существует «правильный» способ построения архитектуры. Вместо этого это должно быть что-то, что вы тестируете с различными метапараметрами (такими как размеры слоев, количество слоев, количество выпадений) и должны быть ориентированы на результаты (включая любые ограничения, которые вы можете иметь на использование ресурсов для обучения времени / памяти). использовать и т. д.).

Используйте набор перекрестной проверки, чтобы помочь выбрать подходящую архитектуру. После этого, чтобы получить более точную оценку общей производительности вашей модели, вы должны использовать отдельный набор тестов. Для этого следует использовать данные, хранящиеся в вашем учебном наборе отдельно от набора CV. Разумное разделение может составлять 60/20/20 train / cv / test, в зависимости от того, сколько у вас данных и сколько вам нужно, чтобы сообщить точный окончательный показатель.

Для вопроса №2 вы можете либо просто иметь два выхода с финалом softmax, аналогичным текущему, либо у вас может быть последний слой с одним выходом, activation='sigmoid'и loss='binary_crossentropy'.

Чисто из интуитивного ощущения от того, что может работать с этими данными, я бы предложил попробовать 'tanh'или 'sigmoid'активировать в скрытом слое вместо 'relu', и я бы также предложил увеличить количество скрытых нейронов (например, 100) и уменьшить количество выбывших ( например, 0,2). Предостережение: интуитивное восприятие архитектуры нейронной сети не является научным. Попробуйте и проверьте это.

Нил Слэйтер
источник