ブースト決定木回帰

Machine LearningMachine LearningBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

VMのヒント

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

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49057{{"ブースト決定木回帰"}} sklearn/ensemble -.-> lab-49057{{"ブースト決定木回帰"}} ml/sklearn -.-> lab-49057{{"ブースト決定木回帰"}} end

データの準備

まず、正弦波の関係といくつかのガウスノイズを持つダミーデータを準備します。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を使って、両方の回帰器の性能を視覚化しました。