こんにちは!デジタルマーケターのウマたん(@statistics1012)です!
Kaggleなどのデータ解析コンペでも頻繁に用いられているXGboost。
最近では、LightGBMに王座の場を奪われつつありますが、まだまだ現役で使われている名実ともに最強の教師あり学習手法です。
この記事では、そんなXGboostに関して簡単に見ていきたいと思います!
XGboostとは

XGboostはeXtreme Gradient Boostingの略で2014年に発表された手法です。
勾配ブースティングと呼ばれるアンサンブル学習と決定木を組み合わせた手法で非常に高い汎化能力を誇ります。
アンサンブル学習とは、弱学習器(それほど性能の高くない手法)を複数用いて総合的に結果を出力する方法で、バギングとブースティングというタイプがあります。
バギングは弱学習器を並列に使うイメージ。決定木とバギングを組み合わせたのがランダムフォレストです。
ランダムフォレストの簡単なイメージが以下

並列に決定木モデルを扱ってそれぞれのモデルの結果を総合的に判断します。
一方でブースティングは弱学習器を直列に使います。
ブースティングと決定木を組み合わせたのがXGboostなのです。

最初の学習器で上手く分類・推定できなかった部分に対して重みを付けて次の弱学習器で学習を行います。
そうすることで、上手く推定できない部分もできるようになってきます。
最終的には、それぞれのモデルに対して精度の高さを基に重みを付けて集約し、モデルを作成します。
3人寄れば文殊の知恵的な感じですね!
XGboostの特徴

XGboostの特徴を見ていきましょう!
精度が比較的高い
冒頭でも書きましたが、Kaggleでもまだまだ用いられている精度の高い手法です。
一般的にバギングを用いたランダムフォレストよりも精度は高くなります。
学習に時間がかかる
ブースティングは直列に学習を行うため、バギングよりも学習に時間がかかります。
大規模データを解析するとなると、それなりの学習時間がかかるので注意が必要です。
実は、そんなXGboostの弱点を克服するためにリリースされたのがLightGBM(軽いXGboost的なイメージ)なのです。
XGboostでは決定木の階層が同時に深くなっていきますが、LightGBMでは階層は一定ではありません。片方のノードだけ深くなることもあります。
パラメータの数が多くチューニングが必要
XGboostには数々のパラメータが存在します。
精度を上げるためにはパラメータのチューニングが必要になってきます。
パラメータのチューニングの方法にはグリッドサーチなどがあります。
XGboostをRで実装してみよう!

XGboostはRやPythonで簡単に実装することができます。実際にRを用いてXGboostを実装してみましょう!
今回は、Kaggleの公式サイトで提供されているTitanicのデータを使います。
データのクレンジングを行い、欠損値は削除、不要と考えられる項目は削除します。
生死(Survive)を目的変数としそれ以外を説明変数とします。
サンプル数714のうちランダムに400個のデータを取り出し学習データとし、残りの314を予測データとします。
学習データで予測モデルを作り、予測データにあてはめ真値と予測値の判別率を精度として比較します。
シミュレーション回数は1000回とし、上記の手順を1000回繰り返し、結果を平均したものを最終アウトプットとします。
シミュレーション回数は10回とし、上記の手順を10回繰り返し、結果を平均したものを最終アウトプットとします。シミュレーション回数をもっと増やせば精度の信頼性は上がります。
XGboostをランダムフォレスト、サポートベクターマシン、ナイーブベイズ、ニューラルネットワーク、k近傍法の5手法と比較します!
基本的に引数は全部デフォルトで!果たして結果はどうなるでしょうか!
xgboostというパッケージに入っている関数を用いて解析を行っていきます。
XGboost以外は基本的にパッケージを読み込み関数を記述すれば問題ないのですが、XGboostだけ特別な型にするためにデータ加工をしています。
xgb.data<-xgb.DMatrix(data.matrix(train.data.xg),label=label.data.train)
他の機械学習手法は普通のデータフレーム型で扱えるんですが、XGboostは特殊な型にしなくてはいけないのが少し面倒なんですよねー!
結果は以下のようになりました!

それぞれBayes(ナイーブベイズ)、knn(k近傍法)、NN(ニューラルネットワーク)、RF(ランダムフォレスト)、SVM(サポートベクターマシン)、xgb(XGboost)と表示しています。
k近傍法が一番パフォーマンスが悪く、SVMが最もパフォーマンスが良いという結果になりました!
XGboostにはパラメータが非常にたくさんあるので注意が必要です。
今回は、二値の質的変数が目的変数なので
“objective“ = “binary:logistic“
を使用しています。分類なのか回帰なのか、マルチクラスなのかによってobjectiveを変えるようにしましょう!
他にもたくさんのパラメータがあります。パラメータをチューニングすることで精度がだいぶ変わるので、是非試してみてください!
XGboost まとめ
XGboostについて見てきました。
XGboostは非常に精度の高い手法であり、簡易的に実装してみてもその効果を確かめることはできました。
最後にXGboostについてまとめておきましょう!
・精度が非常に高い
・学習に時間がかかる
・パラメータの数が多くチューニングが大変
是非XGboostを試してみてください!
以下の記事で他の機械学習手法についてもまとめていますので興味があればご覧ください!
