f分数:ValueError:分类指标无法处理多标签指标和连续多输出目标的混合情况

时间:2019-06-07 10:01:39

标签: python keras model evaluation measure

我正在尝试为模型进行的预测计算micro F度量。我使用带有Keras和Tensorflow的word2vec Vectors训练了模型。我使用scikit库来计算mirco F度量。

但是该函数抛出以下消息: ValueError:分类指标无法同时处理多标签指标和连续多输出目标

我也做正确的预测吗?我在x_train(wordVectors)和y_train(resultVectors)上训练了模型,并通过x_test和y_test进行了验证。

现在,我对x_test进行了预测,并希望使用y_test评估预测。到目前为止,我做得对吗?

预测数组如下:

[[ 1.7533608e-02  5.8055294e+01  2.2185498e-03 ... -1.2394511e-03
   1.0454212e+00 -1.6698670e-03]
 [ 1.7539740e-02  5.8173992e+01  2.1747553e-03 ... -1.2764656e-03
   1.0475068e+00 -1.6941782e-03]
 [ 1.7591618e-02  5.8222389e+01  2.2053251e-03 ... -1.2856000e-03
   1.0484750e+00 -1.6668942e-03] ...

和真实值看起来像这样:

[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]...

我已经尝试将两个数组都转换为二进制值(使用np.argmax(...,axis = 1))。然后没有错误,我得到的微F测度约为0,59 ...这太高了,所以我认为我做错了。 我的问题是是否还有另一种转换数据的方法?我可以将预测值转换为多标签指标值吗?

model = load_model('model.h5')
prediction = model.predict(x_test)

prediction_binary = np.argmax(prediction, axis=1)
y_test_binary = np.argmax(y_test, axis=1)

print(f1_score(y_test_binary, prediction_binary, average='micro'))

我希望输出为<0.20,但我得到的是0.59,这是一个很不错的值。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

问题在于,您只能在输出矢量的最高值和测试矢量的一个值所预测的标签上计算指标。

实际上,com.example.app1.MainActivity仅返回一个值,即使向量具有多个最小值。 例如np.argmax仅返回2。

由于您的问题由多标签分类问题组成,因此您希望将输入内容分为几类。为此,您必须将分类器的输出向量转换为测试向量的相同形状。

您可以按照以下步骤进行操作:

np.argmax([0,0,1,0,1,1])