はじめに
この実験では、追加のノイズ付き観測値を持つサインカーブに対して決定木回帰アルゴリズムを使用する方法を学びます。決定木は、サインカーブを近似する局所的な線形回帰を学習するために使用されます。木の最大深さを設定が高すぎる場合、決定木は訓練データの細かすぎる詳細を学習し、ノイズから学習してしまい、つまり過学習してしまうことがわかります。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
numpy、matplotlib、および DecisionTreeRegressor を含む必要なライブラリとモジュールをインポートします。
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
ランダムなデータセットを作成する
NumPy を使ってランダムなデータセットを作成し、それにいくらかのノイズを加えます。
rng = np.random.RandomState(1)
X = np.sort(5 * rng.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - rng.rand(16))
回帰モデルを適合させる
2 つの異なる最大深さ:2 と 5 を持つ回帰モデルを適合させます。
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)
予測する
0 から 5 までの値の範囲で予測を行うためにモデルを使用します。
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
結果をプロットする
モデルがデータにどのように適合するかを視覚化するために結果をプロットします。
plt.figure()
plt.scatter(X, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(X_test, y_1, color="cornflowerblue", label="max_depth=2", linewidth=2)
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()
まとめ
この実験では、追加のノイズ付きの観測値を持つサインカーブに対して決定木回帰アルゴリズムをどのように使用するかを学びました。木の最大深さを設定が高すぎる場合、決定木は訓練データの細かすぎる詳細を学び、ノイズから学習してしまい、つまり過学習してしまうことがわかりました。また、モデルがデータにどのように適合するかを視覚化するために結果をプロットする方法も学びました。