ブースト決定木回帰

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Python の Scikit-Learn ライブラリを使って、1 次元の正弦波データセットに対してブースト決定木回帰を行います。単一の決定木回帰器と、300 個の決定木回帰器をベース学習器とする AdaBoost 回帰器の性能を比較します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題があった場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

データの準備

まず、正弦波の関係といくつかのガウスノイズを持つダミーデータを準備します。Numpy のlinspace()関数を使って、0 から 6 までの間に 100 個の等間隔の値からなる 1 次元配列を作成します。その後、np.newaxis属性を使って、この 1 次元配列を形状(100,1)の 2 次元配列に変換します。この配列にsin()関数を適用し、配列に 6 を掛けることで得られる 2 つ目の正弦波を加えます。そして、Numpy のnormal()関数を使って、平均 0、標準偏差 0.1 のガウスノイズを加えます。

import numpy as np

rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis]
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0])

決定木と AdaBoost 回帰器を使った学習と予測

ここでは、分類器を定義してデータに適合させます。最初の回帰器をmax_depth=4DecisionTreeRegressorとして定義します。2 番目の回帰器を、max_depth=4DecisionTreeRegressorをベース学習器とするAdaBoostRegressorとして定義します。それらのベース学習器をn_estimators=300で持つ AdaBoost 回帰器を構築します。その後、両方の回帰器をデータに適合させ、同じデータに対して予測を行って、それらがどの程度データに適合するかを見ます。

from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor

regr_1 = DecisionTreeRegressor(max_depth=4)

regr_2 = AdaBoostRegressor(
    DecisionTreeRegressor(max_depth=4), n_estimators=300, random_state=rng
)

regr_1.fit(X, y)
regr_2.fit(X, y)

y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)

結果のプロット

最後に、単一の決定木回帰器と AdaBoost 回帰器の 2 つの回帰器がデータにどの程度適合するかをプロットします。Matplotlib のscatter()関数を使って、学習サンプルと両方の回帰器からの予測値をプロットします。Matplotlib のplot()関数を使って、両方の回帰器に対して予測値とデータを対応させてプロットします。2 つの回帰器を区別するために、プロットに凡例を追加します。

import matplotlib.pyplot as plt
import seaborn as sns

colors = sns.color_palette("colorblind")

plt.figure()
plt.scatter(X, y, color=colors[0], label="training samples")
plt.plot(X, y_1, color=colors[1], label="n_estimators=1", linewidth=2)
plt.plot(X, y_2, color=colors[2], label="n_estimators=300", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Boosted Decision Tree Regression")
plt.legend()
plt.show()

まとめ

この実験では、Python の Scikit-Learn ライブラリを使って、1 次元の正弦波データセットに対してブースト決定木回帰を行う方法を学びました。単一の決定木回帰器と、300 個の決定木回帰器をベース学習器とする AdaBoost 回帰器の性能を比較しました。Matplotlib を使って、両方の回帰器の性能を視覚化しました。