はじめに
混同行列は、分類アルゴリズムの性能を評価するためのツールです。予測されたクラスラベルと実際のクラスラベルを比較することで、分類モデルの性能をまとめた表です。このチュートリアルでは、scikit-learn ライブラリを使用して混同行列を生成し、その結果を可視化する方法を示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
まず、必要なライブラリをインポートする必要があります。scikit-learn、matplotlib、numpy、および datasets を使用します。
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 ConfusionMatrixDisplay
データの読み込み
scikit-learn の iris データセットを使用します。このデータセットには 150 個のサンプルが含まれており、それぞれが 4 つの特徴量とターゲットラベルを持っています。
iris = datasets.load_iris()
X = iris.data
y = iris.target
class_names = iris.target_names
データの分割
データセットを訓練セットとテストセットに分割します。訓練セットはモデルの訓練に使用され、テストセットはモデルの性能評価に使用されます。
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
モデルの訓練
線形カーネルを使用してサポートベクターマシン(SVM)分類器を訓練します。結果に与える影響を見るために、正則化パラメータ C を非常に低く設定します。
classifier = svm.SVC(kernel="linear", C=0.01).fit(X_train, y_train)
混同行列の生成
scikit-learn の ConfusionMatrixDisplay クラスを使用して混同行列を生成します。混同行列は、各クラスに対する正解予測と不正解予測の数を示します。
np.set_printoptions(precision=2)
disp = ConfusionMatrixDisplay.from_estimator(
classifier,
X_test,
y_test,
display_labels=class_names,
cmap=plt.cm.Blues,
normalize=None,
)
混同行列の可視化
matplotlib を使用して混同行列を可視化します。正規化していない混同行列と正規化した混同行列の両方をプロットします。
titles_options = [
("Confusion matrix, without normalization", None),
("Normalized confusion matrix", "true"),
]
for title, normalize in titles_options:
disp = ConfusionMatrixDisplay.from_estimator(
classifier,
X_test,
y_test,
display_labels=class_names,
cmap=plt.cm.Blues,
normalize=normalize,
)
disp.ax_.set_title(title)
print(title)
print(disp.confusion_matrix)
plt.show()
まとめ
このチュートリアルでは、scikit-learn ライブラリを使って混同行列を生成し、その結果を可視化する方法を学びました。アイリスデータセットを読み込み、訓練セットとテストセットに分割し、サポートベクターマシン分類器を訓練し、混同行列を生成して可視化しました。混同行列は各クラスに対する正解予測と不正解予測の数を示し、可視化により結果の解釈が容易になりました。