我试图使用plot_confusion_matrix函数,它在scikitlearn 0.22中可用。但是,我遇到一个问题,其中一个框中的文本值看不到,因为所有文本颜色似乎都设置为与该框相同的值。无论我选择哪个cmap,都是这种情况。顺便说一句,这个值也是最低的。这在他们提供的示例中不会发生。如何更改文本框的颜色,使所有的值都可以清楚地看到?除非迫不得已,否则我不希望像许多其他解决方案中建议的那样使用seaborn。 下面是一个可重复的示例。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_confusion_matrix
np.random.seed(3851)
# import some data to play with
bc = datasets.load_breast_cancer()
X = bc.data
y = bc.target
class_names = bc.target_names
# Split the data into a training set and a test set
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
np.random.shuffle(y_test)
# Run classifier, using a model that is too regularized (C too low) to see
# the impact on the results
classifier = svm.SVC(kernel='linear', C=0.0001).fit(X_train, y_train)
np.set_printoptions(precision=2)
# Plot non-normalized confusion matrix
titles_options = [("Confusion matrix, without normalization", None),
("Normalized confusion matrix", 'true')]
for title, normalize in titles_options:
disp = plot_confusion_matrix(classifier, X_test, y_test,
cmap=plt.cm.Blues,
normalize=normalize)
disp.ax_.set_title(title)
print(title)
print(disp.confusion_matrix)
plt.show()
问题来源StackOverflow 地址:/questions/59381591/change-text-in-boxes-of-confusion-matrix-plot
我相信你发现了一个漏洞。我已经在github上提交了这个问题,并提供了一个可能的解决方案。 基本上,文本的颜色是根据高于或低于阈值的值来选择的,阈值应该是cmap范围的中间。但是我认为阈值的计算方法有一个问题,所以您的标准化示例中的所有值都低于阈值,并使用较浅的颜色绘制。 如果你想要一个临时的修复,你可以在安装scikit-learn…/site-packages/sklearn/metrics/_plot/confusion_matrix.py的第96行中修改一个文件 thresh = cm.min()+(cm.max() - cm.min() / 2。而不是thresh = (cm.max() - cm.min() / 2。
===================================================================
--- metrics/_plot/confusion_matrix.py (date 1576701552905)
+++ metrics/_plot/confusion_matrix.py (date 1576701552905)
@@ -93,7 +93,7 @@
values_format = '.2g'
# print text with appropriate color depending on background
- thresh = (cm.max() - cm.min()) / 2.
+ thresh = cm.min()+(cm.max() - cm.min()) / 2.
for i, j in product(range(n_classes), range(n_classes)):
color = cmap_max if cm[i, j] < thresh else cmap_min
self.text_[i, j] = ax.text(j, i,
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。