f-score: ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
f-score: ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
我正在尝试为我的模型所做的预测计算微观 F 度量。我使用带有 Keras 和 Tensorflow 的 word2vec Vectors 训练模型。我使用 scikit 库来计算 mirco F 测量值。
但该函数抛出此消息:
ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
还有,我预测对了吗?我在 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)
)。然后就没有错误了,我得到了大约 0.59 的微 F 测量值……太高了,所以我认为我犯了一个错误。
我的问题是是否有另一种转换数据的方法?我可以将预测转换为多标签指标值吗?
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,这个值太高了。
问题是您仅在输出向量的最高值预测的标签上计算指标,而测试向量只有一个值。
的确,np.argmax
return 只有一个值,即使向量有几个最小值。
例如 np.argmax([0,0,1,0,1,1])
将 return 只有 2.
由于您的问题包含一个多标签分类问题,您希望您的输入可能被分为几个类别。为此,您必须将分类器的输出向量转换为与测试向量相同的形状。
您可以按照以下方式进行操作:
prediction_int = np.zeroes_like(prediction)
prediction_int[prediction > 0.5] = 1
我正在尝试为我的模型所做的预测计算微观 F 度量。我使用带有 Keras 和 Tensorflow 的 word2vec Vectors 训练模型。我使用 scikit 库来计算 mirco F 测量值。
但该函数抛出此消息:
ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
还有,我预测对了吗?我在 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)
)。然后就没有错误了,我得到了大约 0.59 的微 F 测量值……太高了,所以我认为我犯了一个错误。
我的问题是是否有另一种转换数据的方法?我可以将预测转换为多标签指标值吗?
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,这个值太高了。
问题是您仅在输出向量的最高值预测的标签上计算指标,而测试向量只有一个值。
的确,np.argmax
return 只有一个值,即使向量有几个最小值。
例如 np.argmax([0,0,1,0,1,1])
将 return 只有 2.
由于您的问题包含一个多标签分类问题,您希望您的输入可能被分为几个类别。为此,您必须将分类器的输出向量转换为与测试向量相同的形状。
您可以按照以下方式进行操作:
prediction_int = np.zeroes_like(prediction)
prediction_int[prediction > 0.5] = 1