【发布时间】:2018-11-14 02:55:15
【问题描述】:
我正在做有毒评论文本分类 Kaggle 挑战。有 6 个类:['threat', 'severe_toxic', 'obscene', 'insult', 'identity_hate', 'toxic']。一条评论可以是这些类中的多个,因此这是一个多标签分类问题。
我用 Keras 构建了一个基本的神经网络如下:
model = Sequential()
model.add(Embedding(10000, 128, input_length=250))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(len(classes), activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我运行这一行:
model.fit(X_train, train_y, validation_split=0.5, epochs=3)
并在 3 个 epoch 后获得 99.11% 的准确率。
但是,99.11% 的准确率比最好的 Kaggle 提交要高一点。这让我觉得我要么(可能两者兼有)a) 过度拟合,要么 b) 滥用 Keras 的准确性。
1) 当我使用 50% 的数据作为验证拆分并且只有 3 个 epoch 时,似乎有点难以过度拟合。
2) 这里的准确率是否只是模型获得每个类别正确的时间百分比?
所以如果我输出[0, 0, 0, 0, 0, 1],而正确的输出是[0, 0, 0, 0, 0, 0],那么我的准确率就是5/6?
经过一番思考,我有点认为这里的 accuracy 指标只是查看我的模型以最高置信度预测的类别,并与基本事实进行比较。
因此,如果我的模型输出[0, 0, 0.9, 0, 0, 0],它会将索引 2('obscene')处的类与真实值进行比较。你认为这是正在发生的事情吗?
感谢您提供的任何帮助!
【问题讨论】:
标签: python machine-learning keras