BQMLのハイパーパラメータチューニングで参考にしたURL

Posted: January 06, 2022

本家ドキュメント

誰かのブログ

XGBoost系で参照したブログ

XGBoostのパラメータチューニングまとめ - Qiita
本記事は、 下記のハイパーパラメータチューニングに関する記事の、XGBoostにおける実装例 を紹介する記事となります。 XGBoostは分類や回帰に用いられる機械学習アルゴリズムで、その性能の高さや使い勝手の良さ(特徴量重要度などが出せる)から、特に 回帰においてはLightBGMと並ぶメジャーなアルゴリズム です。 一方でXGBoostは多くのハイパーパラメータを持つため、その性能を十分に発揮するためには パラメータチューニングが重要 となります。 XGBoostの主なパラメータは、 こちらの記事 で分かりやすく解説されています。 XGBoostのパラメータ数は他の回帰アルゴリズム(例: ラッソ回帰(1種類)、 SVR(3種類))と比べて パラメータの数が多く、また 使用するboosterやAPI( Scikit-learn API or Learning API)によってパラメータの数が変わるなど、 複雑なパラメータ構成 を持っています。 そのため、全てのパラメータをチューニング対象とすると制御が難しく、 一部の重要なパラメータのみを選んでチューニング対象とする ことが一般的です。 本記事では、 Optuna公式サンプルコード のチューニング対象パラメータを使用します。 またチューニングに先立ち、学習に使用するAPIおよび 使用するbooster を選択する必要があります。今回は を採用します この際、Scikit-learn APIとLearning APIで一部パラメータの名称が異なるのでご注意ください 今回使用するパラメータ一覧と、対応する名称を下記に列記します 下図のフロー( こちらの記事と同じ)に基づき、XGBoost回帰におけるチューニングを実装します コードはこちらのGitHub(xgb_tuning_tutorials.py)にもアップロードしております。 チューニングの実装に必要なライブラリ等をインストールします。 私の環境では、以下のライブラリを使用しています ・Python本体 (動作確認時は3.9.5を使用) ・Matplotlibで表示可能な環境 (Jupyter等) ・下記ライブラリ (参考として動作確認時のライブラリバージョンも記載)  xgboost (1.4.2)  scikit-learn (0.24.2)  bayesian-optimization (1.2.0)  optuna (2.7.0)  numpy (1.20.3)  pandas (1.2.4)  seaborn (0.11.0)  matplotlib (3.4.2) ・こちらの回帰可視化ライブラリ (チューニング前後のモデル可視化にのみ使用するので、なくともチューニング自体はできます) こちらの記事 の、大阪都構想選挙データを使用します チューニング速度はCPU等の性能に大きく依存します 参考までに本記事で使用したPC(Lenovoのモバイル)のスペックを下記します コードの実行には VSCodeのJupyter拡張 を使用しております。 CPUやメモリの使用状況にもチューニングは左右されますが、余計なプロセスを終了してからチューニングを開始することで、繰り返してもほぼ同じ所要時間となり、再現性のとれる結果となりました。 前述のフロー に基づき実装を進めていきます こちらのデータセット をCSVからPandasのDataFrame(Jupyterでの表示用)およびNumpyのndarray(XGBoostモデルへの読込用)に読み込みます こちらのライブラリ で、チューニング前モデルの特徴量と目的変数の関係を可視化します 男性比率(3_male_ratio)が高いほど、30-60代(2_between_30to60)が多いほど、北に(latitude)行くほど賛成率(approval_rate)が高い=色が濃いことが分かり、チューニング前でもある程度傾向が捉えられていることが分かります。 XGBRegressorはScikit-Learn APIにおけるXGBoost回帰を実行するクラスで、objectiveが学習時に使用する評価指標、random_stateが使用する乱数シードです。 XGBoostには early_stopping_roundsという便利な機能があります。 XGBoostやLightGBMは学習を繰り返すことで性能を上げていくアルゴリズムですが、学習回数を増やしすぎると性能向上が止まって横ばいとなり、無意味な学習を繰り返して学習時間増加の原因となってしまいます( 参考 ) early_stopping_roundsは、この ...
機械学習アルゴリズム:XGBoost の仕組みとパラメーター - taka5hi's blog
XGBoost は、アンサンブル学習の一種であるブースティングを利用した手法及び実装です。 アンサンブル学習とは、複数のモデル(弱学習器)を組み合わせて、より強力なモデルを作る手法のことです。 XGBoost は、性能的にも優れており、たびたびコンペの上位入賞者が使う手法です。 多数のハイパーパラメーターを持ち、調整するためにはある程度手法について知っている必要があります。 そこで、このページでは、XGBoost のパラメーターの意味を理解できることを目標に、仕組みをまとめます。 なお、このページでは弱学習器に木を使う場合を主に説明します。 仕組みについて パラメーターについて XGBoost はブースティングを木と組み合わせた GBDT (Gradient Boosted Descision Tree) と呼ばれる手法の一種です。 (XGBoost 自体は、木以外と組み合わせて使うこともできるのですが、性能的に木と組み合わせて使われることが多いようです。) 以下では、ブースティングの基本から仕組みを説明していきます。 ほぼ 公式ドキュメント の内容を踏襲するものになっていますが、一部数式は、わかりやすそうな等価な式に変えたりしています。(わかりやすいかは主観によりますが。。。) XGBoost がブースティングを利用した手法であることをすでに説明したので、ブースティングの基本からまとめていきます。 ブースティングは、その時点までに学習済みのモデルを生かして次の弱学習器を作っていくような手法を指します。 これを繰り返すことで性能改善を図ります。 具体的な例を下記に示します。 ある入力 に対して、 を予測することを考えてみましょう。 まず最初に、1つモデル を作ります。 このモデルの出力を に対する予想値 とします。 モデルが予想した結果と実際の の差が発生します。 もし、ここで を出力するようなモデル を作ることを考えます。 がある程度 にフィットしているのなら、以下の予想値は、 よりも良い予想となるはずです。 さらに、 と の残差を予想するモデル を作ることもできます。 これを繰り返していけば、モデルの性能はあげられそうです。