木の深さ
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 29/58。
木は、すべての訓練データ行にそれぞれ答えが見つかるまで質問を続けることができます。その場合、学習したのではなく、暗記したことになります。
深い木は自身の訓練データのノイズまで学習するため、テスト精度はピークに達した後、低下します。いくつかの深さを試してみましょう。
train = []
test = []
for d in range(1, 13):
tree = DecisionTreeClassifier(max_depth=d, random_state=0)
tree.fit(X_train, y_train)
train.append(tree.score(X_train, y_train))
test.append(tree.score(X_test, y_test))これらの月では、深さ6が新しい行に対して最も良い結果を出します。今のところはそのままにしておきましょう。深さ8では、木は記憶した行に対しては完璧ですが、それ以外の行では性能が低下します。
チャレンジ
中級望遠鏡による調査では、天体を恒星と銀河に分類します。スターターコードでは、データを分割し、グラフを設定します。
depthsの各深さについて、決定木を学習させ(random_state=0)、訓練精度とテスト精度の両方を記録します。- 以下のように、テスト精度が最も高い深さを出力します。
- 2本の線をプロットし、
trainとtestというラベルを付け、破線のax.axvlineで最適な深さを示し、凡例を追加して表示します。
マンゴーの分類器の場合:
Best depth: 5, test accuracy 0.867その後、Coddyがグラフについて説明します。次のようなグラフです:
自分で試してみよう
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# 望遠鏡による観測データでは、天体ごとに1行:galaxy の値が 1 なら銀河、0 なら恒星
sky = pd.read_csv("sky.csv")
features = ["brightness_mag", "size_arcsec", "roundness", "color_index"]
X_train, X_test, y_train, y_test = train_test_split(sky[features], sky["galaxy"], test_size=0.25, random_state=0)
depths = range(1, 11)
fig, ax = plt.subplots()
ax.set_title("Star or Galaxy?")
ax.set_xlabel("Tree depth")
ax.set_ylabel("Accuracy")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ