多类分类的最佳 Keras 模型是什么?

数据挖掘 Python 神经网络 分类 聚类 喀拉斯
2021-10-12 21:41:13

我正在研究,需要对三个事件之一进行分类 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')
1个回答

activation='softmax'在最后一层的选择和编译选择loss='categorical_crossentropy'有利于模型预测多个互斥类。

关于更一般的选择,很少有一种“正确”的方式来构建架构。相反,这应该是您使用不同的元参数(例如层大小、层数、辍学量)进行测试的东西,并且应该是结果驱动的(包括您可能对用于训练时间/内存的资源使用的任何限制)使用等)。

使用交叉验证集来帮助选择合适的架构。完成后,为了更准确地衡量模型的一般性能,您应该使用单独的测试集。为此,应使用与 CV 集分开的训练集中的数据。一个合理的分割可能是 60/20/20 train/cv/test,这取决于你有多少数据,以及你需要多少报告一个准确的最终数字。

对于问题 #2,您可以只拥有两个输出与现在类似的 softmax final,或者您可以拥有具有一个输出的最终层,activation='sigmoid'并且loss='binary_crossentropy'.

纯粹从对这些数据可能起作用的直觉来看,我建议尝试在隐藏层中使用'tanh''sigmoid'激活,而不是'relu',我还建议增加隐藏神经元的数量(例如 100)并减少 dropout 的数量(例如 0.2)。警告:对神经网络架构的直觉是不科学的。试试看,测试一下。