こちらでPythonを学び始めています。今日はグラフの可視化について学びました。ライブラリのインポートの部分ですらお腹いっぱいになりそうです。
# Import statements. import warnings warnings.filterwarnings('ignore') import numpy as np import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import seaborn as sns
上のスクリプトはPythonでデータの可視化やデータ処理を行うためのライブラリをインポートしています。
import warnings
: Pythonの警告メッセージを制御するためのモジュールです。このコードでは、warnings.filterwarnings('ignore')
を使って、警告メッセージを無視する設定をしています。これにより、警告が表示されなくなります。
import numpy as np
: NumPyライブラリをインポートしています。NumPyは、数値計算や配列操作を効率的に行うためのライブラリです。np
は、NumPyを短く呼ぶためのエイリアスです。
import pandas as pd
: Pandasライブラリをインポートしています。Pandasは、データの操作や分析を行うためのライブラリで、特にデータフレーム(表形式データ)を扱うのに便利です。pd
は、Pandasを短く呼ぶためのエイリアスです。
import matplotlib.pyplot as plt
: Matplotlibライブラリのpyplot
モジュールをインポートしています。pyplot
は、データの可視化(グラフや図の作成)を行うためのモジュールです。plt
は、pyplot
を短く呼ぶためのエイリアスです。
from mpl_toolkits.mplot3d import Axes3D
: Matplotlibの3Dプロット機能を提供するAxes3D
クラスをインポートしています。これにより、3次元のグラフやプロットを作成できます。
import seaborn as sns
: Seabornライブラリをインポートしています。Seabornは、Matplotlibを基盤にした高水準のデータ可視化ライブラリで、統計的なグラフや美しいデフォルトスタイルを提供します。sns
は、Seabornを短く呼ぶためのエイリアスです。
# Create a list. my_list = [10, 'gold', 'dollars']
my_list
: これはリストを格納するための変数名です。変数名は自由に設定できますが、ここでは my_list
という名前が付けられています。
[10, 'gold', 'dollars']
: リストは複数のアイテムを順序付けて格納できるデータ構造で、角括弧 []
を使って表現します。
10
: リストの最初の要素で、整数型(int
)の値です。'gold'
: リストの2番目の要素で、文字列型(str
)の値です。'dollars'
: リストの3番目の要素で、文字列型(str
)の値です。
# Use the helper function to calculate F1 score used in the following graphics. def f1_score(precision, recall): score = 2*precision*recall / (precision + recall) score = np.nan_to_num(score) return score
このコードは、F1スコアを計算するためのヘルパー関数を定義しています。F1スコアは、分類モデルの精度を評価するために使用される指標で、精度(Precision)と再現率(Recall)を組み合わせて1つのスコアとして表現します。
この関数 f1_score
は、与えられた精度と再現率からF1スコアを計算します。F1スコアは以下の式で計算されます。
precision
: 精度(Precision)を示す数値。これは、正と予測したサンプルのうち、実際に正であったサンプルの割合です。
recall
: 再現率(Recall)を示す数値。これは、実際に正であったサンプルのうち、正と予測したサンプルの割合です。
score = np.nan_to_num(score)
この行は、計算結果がNaN(Not a Number)である場合に0に置き換える処理を行います。F1スコアの計算中に、precision + recall
が0になると、結果がNaNになることがあります。この処理によって、NaN値を0に変換して数値的な結果が得られるようになります。
return score
計算されたF1スコアを返します。
# xとyの値を生成 x = np.linspace(0, 1, 101) y = np.linspace(0, 1, 101) # メッシュグリッドを作成 X, Y = np.meshgrid(x, y) # F1スコアを計算 Z = f1_score(X, Y) # グラフを作成 fig = plt.figure() fig.set_size_inches(10, 10) # 3Dプロット用のサブプロットを作成 ax = plt.axes(projection='3d') # サーフェスプロットを描画 ax.plot_surface(X, Y, Z, rstride=2, cstride=3, cmap='plasma') # タイトルとラベルを設定 ax.set_title('$F_{1}$ of precision, recall', size=18) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') # ビューの初期設定を行う ax.view_init(35, -65) # グラフを表示 plt.show()
np.linspace(0, 1, 101)
は、0から1までの範囲を101分割した等間隔の数値を生成します。これにより、精度と再現率の範囲を指定します。
np.meshgrid
を使って、精度と再現率のすべての組み合わせを網羅する2次元のメッシュグリッドを生成します。
f1_score
関数を使って、メッシュグリッドの各点についてF1スコアを計算し、結果を Z
に格納します。
plt.figure()
で新しい図を作成し、サイズを10インチ×10インチに設定します。
plt.axes(projection='3d')
で3Dプロット用のサブプロットを作成します。
ax.plot_surface
を使用して、3Dサーフェスプロットを描画します。rstride
と cstride
は、行と列の間隔を指定します。cmap='plasma'
はカラーマップを設定し、プロットの色合いを指定します。
グラフのタイトルと軸ラベルを設定します。ここで、$F_{1}$
は数式をLaTeX形式で表示するための表記です。
グラフの視点を設定します。view_init
の引数は、仰角(35度)と方位角(-65度)を指定します。
まとめ
このコードを実行することで、精度(Precision)と再現率(Recall)のさまざまな組み合わせに対するF1スコアを3Dグラフとして視覚化できます。これにより、F1スコアが精度と再現率のどのような関係にあるかを直感的に理解することができます。
コメント