Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sklearn度量值与Keras值非常不同_Python_Machine Learning_Keras_Scikit Learn_Neural Network - Fatal编程技术网

Python Sklearn度量值与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[============================

我需要一些帮助,以了解在Keras中拟合模型时如何计算精度。 这是培训模型的示例历史记录:

对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看起来他们已经打开了,我似乎也已经回答了。