友だち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」のシリーズが生まれています。
この記事が気に入ったらサポートをしてみませんか?