Menu
CoddyTech

学習曲線

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 33/58。

データを増やすと、モデルの性能は向上するでしょうか?学習曲線を見るとわかります。これは、訓練セットが大きくなるにつれてテスト精度がどう変化するかを示します。ここでは、two-moonsデータに対する深い決定木を示します。

訓練データの行数が25から800に増えるときの精度。訓練精度は一貫して1.0で、テスト精度は0.80から0.94に上昇する

この木はすべての訓練セットを記憶しますが、行が増えるたびに実際に役立つことを学習します。柔軟なモデルほど、データから得るものが大きくなります。

最初のn件の訓練データで学習し、毎回同じテストデータでスコアを計算します。

sizes = [25, 50, 100, 200, 400, 800]
test_scores = []
for n in sizes:
    tree = DecisionTreeClassifier(random_state=0)
    tree.fit(X_train[:n], y_train[:n])
    test_scores.append(tree.score(X_test, y_test))
ax.plot(sizes, test_scores, marker="o")

右端でもまだ上昇していますか?データを増やすと役立ちます。

challenge icon

チャレンジ

中級

録音を増やせば、2種類のフクロウを見分けやすくなるでしょうか?スターターコードでは600件の鳴き声を分割し、両方のモデルとグラフを準備しています。

  1. sizes 内の各 n について、最初の n 件の訓練データで両方のモデルを学習させ、テスト精度を記録します。
  2. 各モデルの改善幅(最後のスコアから最初のスコアを引いた値)を、小数点以下3桁で出力します。
  3. sizes を横軸にして両方のモデルをプロットし、marker="o" を使って、ラベルを logistic と tree にし、凡例を表示します。

別の森にいるフクロウでは、次のように出力されます。

Logistic gains 0.053 from more data
Tree gains 0.160 from more data

そして、このグラフが描画されます。次にCoddyがあなたのグラフを説明します。

フクロウの鳴き声:学習曲線。ロジスティックの線は0.64から約0.69まで上昇し、その後横ばいになります。木の線は0.67から0.83まで着実に上昇します

自分で試してみよう

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

# 以下の行は変更しないでください:フクロウの鳴き声600件、音の高さ(Hz)と長さ(s)
rng = np.random.default_rng(23)
pitch = np.round(rng.uniform(300, 900, 600))
length = np.round(rng.uniform(0.2, 2.0, 600), 2)
# 種1のモリフクロウは、音の高さの割に長く鳴きます。ただし、野外での記録には少数の誤りがあります
longer = length > 0.5 + 6.4 * ((pitch - 600) / 600) ** 2
wrong_note = rng.random(600) < 0.05
species = np.where(longer != wrong_note, 1, 0)
X = np.column_stack([pitch, length])
X_train, X_test, y_train, y_test = train_test_split(X, species, test_size=0.25, random_state=0)

sizes = [25, 50, 100, 200, 400]
logistic = LogisticRegression(max_iter=1000)
tree = DecisionTreeClassifier(random_state=0)

fig, ax = plt.subplots()
ax.set_title("Owl Calls: Learning Curves")
ax.set_xlabel("Training rows")
ax.set_ylabel("Test accuracy")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ