开发者社区> 问答> 正文

更改混乱矩阵图框中的文本

我试图使用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

展开
收起
kun坤 2019-12-28 13:45:01 487 0
1 条回答
写回答
取消 提交回答
  • 我相信你发现了一个漏洞。我已经在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,
    
    2019-12-28 13:45:10
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
用计算和数据去改变整个世界 立即下载
4个迭代,从批量交...1573957773.pdf 立即下载