Python Sklearn度量值与Keras值非常不同
我需要一些帮助,以了解在Keras中拟合模型时如何计算精度。 这是培训模型的示例历史记录:Python Sklearn度量值与Keras值非常不同,python,machine-learning,keras,scikit-learn,neural-network,Python,Machine Learning,Keras,Scikit Learn,Neural Network,我需要一些帮助,以了解在Keras中拟合模型时如何计算精度。 这是培训模型的示例历史记录: 对340个样本进行训练,对60个样本进行验证 纪元1/100 340/340[===============================================================5s 13ms/步-损耗:0.8081-附件:0.7559-val_损耗:0.1393-val_附件:1.0000 纪元2/100 340/340[============================
对340个样本进行训练,对60个样本进行验证
纪元1/100
340/340[===============================================================5s 13ms/步-损耗:0.8081-附件:0.7559-val_损耗:0.1393-val_附件:1.0000
纪元2/100
340/340[========================================================================-3s 9ms/步-损耗:0.7815-附件:0.7647-val_损耗:0.1367-val_附件:1.0000
纪元3/100
340/340[===========================================================================-3s 10ms/步-损耗:0.8042-附件:0.7706-val_损耗:0.1370-val_附件:1.0000
...
纪元25/100
340/340[==================================================================-3s 9ms/步-损耗:0.6006-附件:0.8029-val_损耗:0.2418-val_附件:0.9333
纪元26/100
340/340[==================================================================-3s 9ms/步-损耗:0.5799-附件:0.8235-val\u损耗:0.3004-val\u附件:0.8833
那么,验证准确度在第一个时代是1?验证准确度如何比培训准确度更好
这是显示所有精度和损耗值的数字:
然后,我使用sklearn指标来评估最终结果:
def评估(预测结果、预期结果):
f1评分=指标。f1评分(预期结果、预测结果、平均值=”加权“)
平衡精度分数=度量。平衡精度分数(预期结果、预测结果)
打印(“**********************************”)
打印(“|模型性能报告|”)
打印(“**********************************”)
打印('Average F1 score={:0.2f}.'。格式(F1_score))
打印('Balanced accurity score={:0.2f}.'.格式(Balanced_accurity_score))
打印(‘混淆矩阵’)
打印(度量、混淆矩阵(预期结果、预测结果))
打印(“其他指标”)
打印(度量、分类报告(预期结果、预测结果))
我得到了这个输出(如您所见,结果非常糟糕):
****************************
|模型性能报告|
****************************
F1平均得分=0.25。
平衡准确度得分=0.32。
混淆矩阵
[[ 7 24 2 40]
[ 11 70 4 269]
[ 0 0 0 48]
[ 0 0 0 6]]
其他指标
精确回忆f1分数支持
0 0.39 0.10 0.15 73
1 0.74 0.20 0.31 354
2 0.00 0.00 0.00 48
3 0.02 1.00 0.03 6
微平均值0.17 0.17 0.17 481
宏平均值0.29 0.32 0.12 481
加权平均值0.61 0.17 0.25 481
为什么Keras拟合函数的精度和损失值与sklearn度量值如此不同
这是我的模型,以防有帮助:
model=Sequential()
模型。添加(LSTM)(
单位=100,#隐藏状态的数量
return_sequences=True,
输入_形状=(时间戳、nb_特征),
辍学率=0.2,
经常性辍学=0.2
)
)
模型。添加(辍学(0.2))
model.add(展平())
模型。添加(密度单位=nb_类,
激活(='softmax'))
model.compile(loss=“categorical\u crossentropy”,
指标=[“准确度”],
优化器='adadelta')
输入数据维度:
400列车序列
481测试序列
X_列车形状:(400、20、17)
X_测试形状:(481,20,17)
y_列车形状:(400,4)
y_试验形状:(481,4)
以下是我应用sklearn指标的方式:
testPredict=model.predict(np.array(X_测试))
y_测试=np.argmax(y_测试值,轴=1)
y_pred=np.argmax(testPredict,轴=1)
评估(y_预测,y_测试)
看来我错过了什么。你听起来有点困惑 首先,您将苹果与橙子进行比较,即Keras在60个样本集上报告的验证精度(请注意Keras打印的第一条信息,
Train on 340 samples,validate on 60 samples
)与scikit learn在您的481样本测试集上报告的测试精度
其次,只有60个样本的验证集太小了;在如此小的样本中,计算出的指标(如您报告的指标)的剧烈波动肯定不是意外的(这就是为什么我们需要足够大的数据集,而不仅仅是训练数据集的原因)
第三,至少可以说,您的培训/验证/测试集划分非常不寻常;标准做法要求大约70/15/15%或类似的分配,而您使用的是38/7/55%的分配(即340/60/481个样本)
最后,在不了解数据细节的情况下,很可能只有340个样本不足以适合像您这样的LSTM模型,以完成良好的4级分类任务
对于初学者来说,首先要将数据更合适地分配到培训/验证/测试集中,并确保对各个方面进行比较
PS在类似的问题中,您还应该包括您的
model.fit()
零件。您好,我面临着非常类似的情况。阅读您的答案后,我检查了Sklearn和KERA是否使用相同的val集大小和数据。然而,Keras model.fit输出显示85%的val_acc。同时,在Sklearn metrics.Mission矩阵上,它显示了78%的真阳性和78%的真阴性。我应该问一个新问题,还是重复这个问题?谢谢大家!@我建议你提出一个新问题indeed@JairoAlves一年后,你做了什么?我也有同样的问题。keras和sklearn的数字相等,但其中一个报告了90%,另一个报告了56%。@PolarBear10看起来他们已经打开了,我似乎也已经回答了。