2016-10-26 4 views
1

나는 scikit에서 혼란 행렬을 사용하고 있습니다. 하지만 음모에서는 소수점 1 자리 만 필요합니다 (그림 A). 배열로 (그림 B) 어떤 코드로 변경할 수 있습니까? !!!!!!!!!!!!!!!어떻게 파이썬에서 혼돈 행렬 플롯을 십진수로 1 개만 만들 수 있습니까?

그림 A

Figure A

그림 B

enter image description here

import itertools 
import numpy as np 
import matplotlib.pyplot as plt 

from sklearn import svm, datasets 
from sklearn.model_selection import train_test_split 
from sklearn.metrics import confusion_matrix 

# import some data to play with 
iris = datasets.load_iris() 
X = iris.data 
y = iris.target 
class_names = iris.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) 

# 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.01) 
y_pred = classifier.fit(X_train, y_train).predict(X_test) 


def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Oranges): 
    plt.imshow(cm, interpolation='nearest', cmap=cmap) 
    plt.title(title) 
    plt.colorbar() 
    tick_marks = np.arange(len(iris.target_names)) 
    plt.xticks(tick_marks, rotation=45) 
    ax = plt.gca() 
    ax.set_xticklabels((ax.get_xticks() +1).astype(str)) 
    plt.yticks(tick_marks) 

    thresh = cm.max()/2. 
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): 
     plt.text(j, i, cm[i, j], 
       horizontalalignment="center", 
       color="white" if cm[i, j] > thresh else "black") 

    plt.tight_layout() 
    plt.ylabel('True label') 
    plt.xlabel('Predicted label') 

cm = confusion_matrix(y_test, y_pred) 
np.set_printoptions(precision=1) #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
print('Confusion matrix, without normalization') 
print(cm) 
fig, ax = plt.subplots() 
plot_confusion_matrix(cm) 

plt.show() 

답변

1

변경

plt.text(j, i, cm[i, j], 

plt.text(j, i, format(cm[i, j], '.1f'), 

.1f 정밀도의 소수와 문자열로, 플로트, cm[i, j] 변환 format을 알려줍니다.


import itertools 
import numpy as np 
import matplotlib.pyplot as plt 

def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Oranges): 
    plt.imshow(cm, interpolation='nearest', cmap=cmap) 
    plt.title(title) 
    plt.colorbar() 
    tick_marks = np.arange(cm.shape[1]) 
    plt.xticks(tick_marks, rotation=45) 
    ax = plt.gca() 
    ax.set_xticklabels((ax.get_xticks() +1).astype(str)) 
    plt.yticks(tick_marks) 

    thresh = cm.max()/2. 
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])): 
     plt.text(j, i, format(cm[i, j], '.1f'), 
       horizontalalignment="center", 
       color="white" if cm[i, j] > thresh else "black") 

    plt.tight_layout() 
    plt.ylabel('True label') 
    plt.xlabel('Predicted label') 

cm = np.array([(1,0,0), (0,0.625,0.375), (0,0,1)]) 
np.set_printoptions(precision=1) 
print('Confusion matrix, without normalization') 
print(cm) 
fig, ax = plt.subplots() 
plot_confusion_matrix(cm) 

plt.show() 

enter image description here