警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数
Posted
技术标签:
【中文标题】警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数【英文标题】:Warning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter 【发布时间】:2021-10-02 16:27:51 【问题描述】:谁能帮我解决这个错误:
警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用
zero_division
参数来控制此行为。 _warn_prf(平均值,修饰符,msg_start,len(结果))
当我添加亚当的调整参数时出现错误。
#tunning parameter from keras.optimizers import Adam
optimize = Adam(learning_rate=0.00001,beta_1=0.9,beta_2=0.99)
model.compile(optimizer=optimize,loss='categorical_crossentropy', metrics=['accuracy'])
有人理解这段代码的错误吗?
from sklearn.metrics import confusion_matrix, classification_report
prediksi = model.predict(test_data_generator)
y_pred = np.argmax(prediksi, axis=1)
print(confusion_matrix(test_data_generator.classes,y_pred))
print(classification_report(test_data_generator.classes,y_pred))
我也尝试过使用labels=np.unique(y_pred)
,但结果没有显示出准确度的值
【问题讨论】:
欢迎来到 ***!您会注意到这实际上不是错误,而是警告。它也不会发生在Adam
行中,而是发生在 classification_report
行中——这是因为分类报告计算 F1。
【参考方案1】:
出现此警告是因为 y_true
包含您的预测 (y_pred
) 中不存在的标签,如下例所示:
import numpy as np
from sklearn.metrics import confusion_matrix, classification_report
y_pred = np.ones(10,)
y_true = np.ones(10,)
y_true[0]=0
print(confusion_matrix(y_true,y_pred))
print(classification_report(y_true,y_pred))
您可以通过设置classification_report
argumentzero_division=1
来消除此警告。
但这并不明智,因为它表明你的分类器有问题。
【讨论】:
以上是关于警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数的主要内容,如果未能解决你的问题,请参考以下文章
为啥针对精度优化模型会引发错误:由于没有预测样本,精度定义不明确并设置为 0.0?
Scikit learn 错误消息“精度和 F 分数定义不明确,在标签中设置为 0.0”[重复]
UndefinedMetricWarning:召回率和 F 分数定义不明确,在没有真实样本的标签中设置为 0.0。 'recall', 'true', 平均, warn_for)
如何避免警告:UndefinedMetricWarning: