べくとりうむ.py Written by TicTak(※現在ブログ工事中のため、見づらい点があり申し訳ないです)

【Python Coding】混同行列(Confusion Matrix)

code python

こんにちは、TAKです。
前回「混同行列(Confusion Matrix)」の説明をしたので、今回は実際にpythonを使ってcodingしてみたいと思います。

【こんな人に読んで欲しい記事です】
1. 混同行列(Confusion Matrix)をpythonで実装してみたい方
2. データサイエンスやAIエンジニアの勉強をしている方
python codingなので、Jupyter Notebookを用いてコードを紹介していきます。
必要に応じて、みなさんもご自身の環境で動かしてみてください。
必要ライブラリのインポート①

まず最初に、必要ライブラリをインポートしておきましょう。
インポート用コードは下記の通りですが、簡単に青枠部分でコメントしておきます。

■ from sklearn.datasets import load_breast_cancer
Breast Cancer Wisconsinを使用するために呼び出します。これは乳がんの悪性腫瘍細胞と良性腫瘍細胞に関する569のサンプルデータと30個の特徴量が含まれているデータです。
■ その他
データフレームを扱うためにpandasを、混同行列を図示するためにpyplotをインポートします。
numpyは今回は使用しませんが、クセでインポートしています。
■ from sklearn.linear_model import LogisticRegression
今回の予測タスクは「良性腫瘍」か「悪性腫瘍」かを予測する二値分類タスクのため、オーソドックスにロジスティック回帰モデルを使用します。
■ from sklearn.preprocessing import StandardScaler
入力データを標準化するために使用
■ from sklearn.decomposition import PCA
特徴量が30次元となっているため、次元削減方法としてPCA(主成分分析)を用いる。
■ from sklearn.pipeline import Pipeline
標準化や次元圧縮を組み合わせて使うためにパイプラインをインポートする。
■ from sklearn.model_selection import train_test_split
ホールドアウト法によりデータを訓練データと検証データに分割する。
■ from sklearn.metrics import confusion_matrix
混同行列を使用するためのライブラリ。
モデルからの予測値と正解ラベルを与えることで、2×2のマトリックスをarray形式で出力可能。
■ from sklearn.metrics import accuracy_score
正解率(Accuracy)の評価指標
■ from sklearn.metrics import precision_score,recall_score,f1_score
適合率(Precision)再現率(Recall)F値(F-measure)の評価指標
データセットの準備&確認

ライブラリのインポートが完了したので、データセットの準備と確認をしていきましょう。
下記コーディングで入力データと正解データ(教師データ)のセッティングが可能となります。

shapeの結果より、サンプルデータ数は569個特徴量が30個あることが確認出来ます。
データセットの内容を確認してみると、上図のようになっていることがわかります。
モデリングフェーズ

データセットのセッティングが完了したので、実際にモデルを構築していきます。
その前に、ホールドアウト法を用いて、訓練データと検証データに分割していきましょう。

・訓練データと検証データを分割する割合は「20%」としています。
・検証用データが「114個」あるので、混同行列で114個を4象限に分類していくことになります。
訓練データと検証データへの分割が完了したので、モデリングフェーズに移ります。
最初にインポートしたパイプラインを用いて、「標準化」「PCAによる次元削減」「ロジスティック回帰によるモデル構築」を実現していきます。
・PCAのハイパーパラメータを設定することで、次元数を30個から2個までに次元削減します。
・fitメソッドを用いることで、実際に学習を開始します。
混同行列(Consufion Matrix)の作成

実際にモデルが構築出来たので、未知データ(検証データ)に対する予測結果を出しておきましょう。
最終的に「混同行列による評価指標」を用いていきますが、その前に混同行列をヒートマップで図示出来るようにしていきます。そのために、「confusion_matrix関数」を用いることで、混同行列の結果をarray形式で算出しておきます。

・y_pred:構築モデルに未知データ(検証データ)を予測させた結果
・confmat:混同行列の結果をconfusion_matrix関数を用いて算出
引数「labels」を指定しない場合、クラス「0」「1」の順番でソートされてしまうため、上記で意図的に引数「labels」を指定しています。
下記コーディングによって、ヒートマップを用いた「混同行列」を可視化出来ます。

前回の記事でも紹介した図と比較することで、混同行列っぽくなっていることがわかるかと思います。

スコアリングフェーズ

では最後に、評価指標を用いたコーディングを見ていきましょう。
使いたい評価指標に「正解ラベル」「予測値」をインプットすれば自動的に算出してくれるので難しくありませんね。

■ 正解率(Accuracy):accuracy_score関数を使う
■ 適合率(Precision):precision_score関数を使う
■ 再現率(Recall):recall_score関数を使う
■ F値(F-measure):f1_score関数を使う
書籍の紹介

混同行列のコーディング紹介は以上となりますが、僕が機械学習やデータサイエンスを勉強するにあたって利用している書籍を2冊ほど紹介しておきたいと思います。

1つ目は結構ボリュームもある本なので、辞書代わりに使うといいかもしれません。
ガッツリ勉強していきたい方にオススメの本です。

 [affi id=19]

2つ目は機械学習やデータサイエンスを最初から勉強したい方にオススメです。
実際に手を動かしながら学べるので、最初の一冊にちょうどいいかと思います。

 [affi id=20]
まとめ

以上が「混同行列」を用いたコーディングの紹介でした。
ライブラリに使える指標が格納されているので、目的に応じて使えるようにしておくと便利ですね。

では今回はこのへんで。