見出し画像

友だちPython ep2. matplotlib Axes

はじめに


友だちPython シリーズのご紹介

友だちPython シリーズは、Python の小ネタを短文でお届けします。
小さなエピソードを重ねてPythonと仲良しになれたら、と願ってシリーズ名を付けました。

話題


AI・データサイエンスのための 図解でわかる数学プログラミング

この記事は、書籍「AI・データサイエンスのための 図解でわかる数学プログラミング 初版」(ソーテック社)のコードで生じた問題対処を取り扱います。

問題の概要

第2章、2-7「決定木の分析結果を可視化し、分類精度を評価しよう」の「決定木の分類結果の可視化、および分類精度評価を行う」コード(81ページ)で問題が生じました。
可視化ライブラリ「matplotlib」で描画した散布図が小さくなりました

実行環境
・matplotlib のバージョン: 3.7.1
・VS code の Jupyter Notebook で実行

問題の詳細

事象
散布図の出力結果がとても小さくなりました。
下図の中央付近にとても小さな四角形(点線)がうっすら見えます。

原因

根本原因かどうかは不明ですが、次のコードを変更したところ、正しく動作しました。

 plt.axes().add_artist(circle)

改善後のコード

# 可視化 の部分を抜粋して改善後のコードを記載します。
「fig, ax = plt.subplots ~」を用いて「Axes」を定義する方式に変更しました。

# 可視化
fig, ax = plt.subplots(figsize=(8, 6))
ax.scatter(transformed[:,0], transformed[:,1], c=pred_class)
for i in range(len(transformed)):
    if pred_tree[i]==1:
        if pred_class[i]==target_class:
            temp_color = 'black'
            temp_lw = 1.0
        else:
            temp_color = 'blue'
            temp_lw = 3.0
        circle = pat.Circle(xy=(transformed[i,0], transformed[i,1]), 
                            radius=1.0, ec=temp_color, fill=False,
                            linewidth=temp_lw)
        ax.add_artist(circle)
    else:
        if pred_class[i]==target_class:
            temp_color = 'red'
            temp_lw = 3.0
            circle = pat.Circle(xy=(transformed[i,0], transformed[i,1]),
                                radius=1.0, ec=temp_color, fill=False,
                                linewidth=temp_lw)
            ax.add_artist(circle)
    text = str(i) + '(' + str(pred_class[i]) + ')'
    ax.text(transformed[i,0],transformed[i,1], text)
plt.show()

実行結果

散布図が大きくなって、分類の様子を確認することができました!
赤い輪・青い輪が決定木の分類誤りです。
なお、決定木による分類結果が書籍の結果と異なるため、書籍の分類と異なる内容になりました。

おわり

ブログの紹介


noteで3つのシリーズ記事を書いています。
ぜひ覗いていってくださいね!

1.のんびり統計
統計検定2級の問題集を手がかりにして、確率・統計をざっくり掘り下げるブログです。
雑談感覚で大丈夫です。ぜひ覗いていってくださいね。
統計検定2級公式問題集CBT対応版に対応しています。

2.Python機械学習プログラミング実践記
書籍「Python機械学習プログラミング PyTorch & scikit-learn編」を学んだときのさまざまな思いを記事にしました。
この書籍は、scikit-learnとPyTorchの教科書です。
よかったらぜひ、お試しくださいませ。

3.データサイエンスっぽいことを綴る
統計、データ分析、AI、機械学習、Pythonのコラムを不定期に綴っています。
「統計」「Python」「数学とPython」「R」のシリーズが生まれています。

この記事が気に入ったらサポートをしてみませんか?