我正在进行Toxic Comment Text Classification 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 提交的成绩高得多。这让我认为我可能出现了过拟合或误用 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')的类别与真实值进行比较。您认为这就是发生的情况吗?
感谢您提供的任何帮助!
weighted_binary_crossentropy
损失函数,其中存在大量负面预测:https://stats.stackexchange.com/a/313922/198729。然而我也在寻找一个`weighted_binary_accuracy`。 - CMCDragonkai