我在试着评估我的定制训练Spacy NER模型。如何用混淆矩阵求出模型的总体精度。
我试着用spacy scorer评估模型,它给出了精确度,召回率和令牌准确度,参考了下面的内容。
Evaluation in a Spacy NER model
我希望输出是混淆矩阵,而不是单个精度、召回率和标记准确性。
发布于 2020-07-21 15:47:15
Here是为Spacy NER模型创建混淆矩阵的一个很好的读物。它基于Spacy使用的BILOU格式。它对小部分文本很好,但是当评估较大的文档时,混淆矩阵很难阅读,因为大多数文本都是O标记的。
您可以做的是创建两个列表,一个包含每个单词的预测值,另一个包含每个单词的真实值,并使用sklearn.metrics.confusion_matrix()函数进行比较。
from sklearn.metrics import confusion_matrix
y_true = [O,O,O,B-PER,I-PER]
y_pred = [O,O,O,B-PER,O]
confusion_matrix(y_true, y_pred, labels=["O", "B-PER", "I-PER"])您也可以使用同一个库中的plot_confusion_matrix()函数来获得可视输出,但是这需要scikit learn 0.23.1或更高版本,并且只能与scikit learn分类器一起使用。
正如在this stackoverflow问题中所写的,这是一种使用confusion_matrix()的方法--学习而不需要绘制它们的图。
from sklearn.metrics import confusion_matrix
labels = ['business', 'health']
cm = confusion_matrix(y_test, pred, labels)
print(cm)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm)
plt.title('Confusion matrix of the classifier')
fig.colorbar(cax)
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()https://stackoverflow.com/questions/56252016
复制相似问题