機械学習ではデータの確認や結果の可視化にグラフを使う場面が多くあります。そのときに欠かせないのがNumPyとMatplotlibの組み合わせです。今回はNumPy配列をグラフのデータとして使う方法を見ていきましょう。
NumPyとは?という方はこちらの記事を見てみてください。(リンク)
Matplotlibとは?という方はこちらの記事を見てみてください。(リンク)
目次
- NumPyとMatplotlibを組み合わせる理由
- 基本:NumPy配列をそのままグラフに渡す
- よく使う場面①:データの分布を確認する
- よく使う場面②:学習曲線を可視化する
- よく使う場面③:2次元配列を画像として表示する
- まとめ
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()
表示結果
基本: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()
表示結果
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()
表示結果
よく使う場面①:データの分布を確認する
機械学習でモデルを作る前に、まずデータの分布を確認することが重要です。ヒストグラムを使うとデータがどのような形で分布しているかを把握できます。
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()
表示結果
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()
表示結果
訓練データの損失(青)と検証データの損失(赤の破線)を重ねて表示することで、過学習(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()
表示結果
| 引数 | 説明 |
|---|---|
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() |





