컴퓨전 매트릭스는 행 합계에 대한 각 요소의 비율도 필요하십니까?

소개



파이썬 데이터 과학 핸드북 공부중에 생각한 것.

seaborn에서 히트 맵 만들어 오분류를 가시화하고 있지만, 이것이 전체 안에서 숫자가 큰 값에 색이 붙는 것은?
(모든 분류에서 샘플 수가 같으면 좋지만 데이터 불균형은 종종 발생하기 때문에)

행의 합계(=각 분류)에 대한, 각 요소의 비율을 알 수 있는 히트 맵도 있는 것이 좋다.
라는 것으로 만들었다.

데이터 로드 및 분류 알고리즘 적용



load_and_modelfitting.py
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix

# サンプルとして今回は手書き文字の画像を分類タスクとしてロード
digits = load_digits()
X = digits.data
y = digits.target

# 訓練用と評価用に分割
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, random_state=0)

# 分類アルゴリズムも適当にガウシアンナイーブベイズを適用
model = GaussianNB()
model.fit(Xtrain, ytrain)
y_model = model.predict(Xtest)
accuracy_score(ytest, y_model)

여기에서 본제



평소 혼동 행렬과 행에 대한 비율의 배열을 히트 맵으로 만듭니다.

create_confmrx.py
# 普通のコンフュージョンマトリックスの2次元配列
mat = confusion_matrix(ytest, y_model)
# 各行合計に対する割合を計算し、小数点第3位を四捨五入した2次元配列
mat_dec = np.round(mat / np.sum(mat, axis=1), decimals=2)

fig, axes = plt.subplots(1, 2, figsize=(10, 10))
kwargs = dict(square=True, annot=True, cbar=False, cmap='RdPu')

# 2つのヒートマップを描画
for i, dat in enumerate([mat, mat_dec]):
    sns.heatmap(dat, **kwargs, ax=axes[i])

# グラフタイトル、x軸とy軸のラベルを設定
for ax, t in zip(axes, ['Real number', 'Percentage(per row)']):
    plt.axes(ax)
    plt.title(t)
    plt.xlabel('predicted value')
    plt.ylabel('true value')



그린 히트맵 정보 해석안


  • 전체를 부감하다
  • 왼쪽 (일반 히트 맵)의 대각선에서 색이 얇은 요소에 주목하여 "전체 안에서 흠집이 많은 행"을 식별
  • 분류 2,9,4,0이 해당

  • 오른쪽 히트 맵을 보고 「행 단위 중에서도 흠집이 많은 요소」를 확인한다
  • 분류 2, 9가 적용될 수 있으므로 샘플 수를 늘리거나 튜닝을 우선적으로 수행합니다
  • 반대로 분류 4,0은 왼쪽 만 보면 색이 얇지만 오른쪽을 보면 색이 짙기 때문에 튜닝 우선 순위가 낮습니다.


  • 결론



    컴퓨전 매트릭스, 견해가 무즈하다…

    좋은 웹페이지 즐겨찾기