0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NumPy配列をMatplotlibでグラフ化する方法〜初心者向けMatplotlib講座 #11 (応用編)〜

0
Posted at

機械学習ではデータの確認や結果の可視化にグラフを使う場面が多くあります。そのときに欠かせないのがNumPyとMatplotlibの組み合わせです。今回はNumPy配列をグラフのデータとして使う方法を見ていきましょう。

NumPyとは?という方はこちらの記事を見てみてください。(リンク)
Matplotlibとは?という方はこちらの記事を見てみてください。(リンク)

目次

  1. NumPyとMatplotlibを組み合わせる理由
  2. 基本:NumPy配列をそのままグラフに渡す
  3. よく使う場面①:データの分布を確認する
  4. よく使う場面②:学習曲線を可視化する
  5. よく使う場面③:2次元配列を画像として表示する
  6. まとめ

NumPyとMatplotlibを組み合わせる理由

機械学習のコードではデータはほぼNumPy配列として扱われます。そしてMatplotlibのax.plot()ax.scatter()などのメソッドはNumPy配列をそのまま受け取れるように設計されています。

つまり特別な変換は必要なく、NumPy配列を作ったらそのままグラフに渡せます。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])  # NumPy配列
y = np.array([2, 4, 1, 5, 3])  # NumPy配列

fig, ax = plt.subplots()
ax.plot(x, y)  # そのまま渡せる
plt.show()

表示結果

image.png

基本:NumPy配列をそのままグラフに渡す

np.linspace()で連続したデータを作る

np.linspace(start, stop, num)startからstopまでnum個の値を等間隔に生成します。グラフのx軸のデータを作るときによく使います。

x = np.linspace(0, 10, 100)  # 0〜10を100分割
y = np.sin(x)                 # 各xに対してsinを計算

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

表示結果

image.png

NumPyの強みはnp.sin(x)のように配列全体に一括で演算できる点です。
xの全100要素に対して、y = np.sin(x)というたった1行でsin(x)を計算できます。

Pythonのリストではこのような書き方はできません。

# Pythonリストではできない
x = [0, 1, 2, 3]
y = np.sin(x)  # ← これはエラーになる

# NumPy配列ならできる
x = np.array([0, 1, 2, 3])
y = np.sin(x)  # ← OK

np.arange()で整数のデータを作る

np.arange(start, stop, step)はPythonのrange()と似ていますが、NumPy配列を返します。

x = np.arange(0, 10, 1)  # 0, 1, 2, ..., 9
y = x ** 2               # 各xを2乗

fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("y = x²")
plt.show()

表示結果

image.png

よく使う場面①:データの分布を確認する

機械学習でモデルを作る前に、まずデータの分布を確認することが重要です。ヒストグラムを使うとデータがどのような形で分布しているかを把握できます。

import numpy as np
import matplotlib.pyplot as plt

# 平均0・標準偏差1の正規分布に従うデータを1000個生成
np.random.seed(42)
data = np.random.randn(1000)

fig, ax = plt.subplots()
ax.hist(data, bins=30, color="steelblue", edgecolor="white")
ax.set_title("データの分布")
ax.set_xlabel("")
ax.set_ylabel("頻度")
plt.show()

表示結果

image.png

np.random.randn()は平均0・標準偏差1の正規分布に従う乱数を生成します。機械学習では重みの初期値などに正規分布がよく使われます。

edgecolor="white"を指定すると棒と棒の境界が白線で区切られ、見やすくなります。

よく使う場面②:学習曲線を可視化する

機械学習モデルの訓練では、エポック(学習の繰り返し回数)ごとの損失(loss)や精度(accuracy)を記録しておいて、学習がうまく進んでいるかをグラフで確認します。これを学習曲線と呼びます。

import numpy as np
import matplotlib.pyplot as plt

# 学習曲線のサンプルデータ(実際はモデルの訓練から得られる)
epochs = np.arange(1, 21)              # エポック数 1〜20
train_loss = 1.0 / np.sqrt(epochs)    # 訓練データの損失(減少していく)
val_loss = train_loss + np.random.randn(20) * 0.05  # 検証データの損失

fig, ax = plt.subplots()
ax.plot(epochs, train_loss, label="train loss", color="blue")
ax.plot(epochs, val_loss,   label="val loss",   color="red", linestyle="--")

ax.set_title("学習曲線")
ax.set_xlabel("エポック数")
ax.set_ylabel("損失")
ax.legend()
ax.grid(True, linestyle="--", linewidth=0.5)
plt.show()

表示結果

image.png

訓練データの損失(青)と検証データの損失(赤の破線)を重ねて表示することで、過学習(overfitting)が起きていないかを視覚的に確認できます。

  • 2本の線が一緒に下がっていれば正常
  • 検証データの損失だけ上がり始めたら過学習のサイン

よく使う場面③:2次元配列を画像として表示する

画像データは機械学習では2次元(または3次元)のNumPy配列として扱われます。ax.imshow()を使うと2次元配列をそのまま画像として表示できます。

import numpy as np
import matplotlib.pyplot as plt

# 8×8のランダムなグレースケール画像を生成
np.random.seed(0)
image = np.random.randint(0, 256, (8, 8))

fig, ax = plt.subplots()
ax.imshow(image, cmap="gray")
ax.set_title("グレースケール画像(8×8)")
plt.colorbar(ax.imshow(image, cmap="gray"), ax=ax)
plt.show()

表示結果

image.png

引数 説明
cmap="gray" グレースケールで表示する
plt.colorbar() 値と色の対応を示すカラーバーを表示する

cmapを変えると別の配色で表示できます。よく使うものは以下の通りです。

cmap 見た目
"gray" グレースケール
"viridis" 青〜緑〜黄(デフォルト)
"hot" 黒〜赤〜白
"coolwarm" 青〜白〜赤(正負のデータに向く)

まとめ

  • MatplotlibはNumPy配列をそのまま受け取れるため、変換不要で使える
  • np.linspace()np.arange()でx軸のデータを簡単に作れる
  • NumPy配列は一括演算ができるため、グラフ用のyデータも1行で計算できる
  • 機械学習でよく使う組み合わせをまとめると:
場面 NumPy Matplotlib
データの分布確認 np.random.randn() ax.hist()
学習曲線の可視化 np.arange() ax.plot()
画像データの表示 2次元配列 ax.imshow()
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?