ensemble import GradientBoostingClassifier gbrt = GradientBoostingClassifier(random_state = 0) print ( "訓練セットに対する精度: {:. format ((X_train, y_train))) ## 訓練セットに対する精度: 1. 000 print ( "テストセットに対する精度: {:. format ((X_test, y_test))) ## テストセットに対する精度: 0. 958 過剰適合が疑われる(訓練セットの精度が高すぎる)ので、モデルを単純にする。 ## 枝刈りの深さを浅くする gbrt = GradientBoostingClassifier(random_state = 0, max_depth = 1) ## 訓練セットに対する精度: 0. 991 ## テストセットに対する精度: 0. 972 ## 学習率を下げる gbrt = GradientBoostingClassifier(random_state = 0, learning_rate =. 01) ## 訓練セットに対する精度: 0. GBDTの仕組みと手順を図と具体例で直感的に理解する. 988 ## テストセットに対する精度: 0. 965 この例では枝刈りを強くしたほうが汎化性能が上がった。パラメータを可視化してみる。 ( range (n_features), gbrt. feature_importances_, align = "center") 勾配ブースティングマシンの特徴量の重要度をランダムフォレストと比較すると、いくつかの特徴量が無視されていることがわかる。 基本的にはランダムフォレストを先に試したほうが良い。 予測時間を短くしたい、チューニングによってギリギリまで性能を高めたいという場合には勾配ブースティングを試す価値がある。 勾配ブースティングマシンを大きな問題に試したければ、 xgboost パッケージの利用を検討したほうが良い。 教師あり学習の中で最も強力なモデルの一つ。 並列化できないので訓練にかかる時間を短くできない。 パラメータに影響されやすいので、チューニングを注意深く行う必要がある。 スケール変換の必要がない、疎なデータには上手く機能しないという点はランダムフォレストと同様。 主なパラメータは n_estimators と learning_rate であるが、ランダムフォレストと異なり n_estimators は大きくすれば良いというものではない。大きいほど過学習のリスクが高まる。 n_estimators をメモリや学習時間との兼ね合いから先に決めておき、 learning_rate をチューニングするという方法がよくとられる。 max_depth は非常に小さく、5以下に設定される場合が多い。
LightgbmやXgboostを利用する際に知っておくべき基本的なアルゴリズム 「GBDT」 を直感的に理解できるように数式を控えた説明をしています。 対象者 GBDTを理解してLightgbmやXgboostを活用したい人 GBDTやXgboostの解説記事の数式が難しく感じる人 ※GBDTを直感的に理解してもらうために、簡略化された説明をしています。 GBDTのメリット・良さ 精度が比較的高い 欠損値を扱える 不要な特徴量を追加しても精度が落ちにくい 汎用性が高い(下図を参照) LightgbmやXgboostの理解に役立つ 引用元:門脇大輔、阪田隆司、保坂佳祐、平松雄司(2019)『Kaggleで勝つデータ分析の技術』技術評論社(230) GBDTとは G... Gradient(勾配) B...
それでは実際に 勾配ブースティング手法をPythonで実装して比較していきます! 使用するデータセットは画像識別のベンチマークによく使用されるMnistというデータです。 Mnistは以下のような特徴を持っています。 ・0~9の手書き数字がまとめられたデータセット ・6万枚の訓練データ用(画像とラベル) ・1万枚のテストデータ用(画像とラベル) ・白「0」~黒「255」の256段階 ・幅28×高さ28フィールド ディープラーニング のパフォーマンスをカンタンに測るのによく利用されますね。 Xgboost さて、まずは Xgboost 。 Xgboost は今回比較する勾配ブースティング手法の中でもっとも古い手法です。 基本的にこの後に登場する LightGBM も Catboost も Xgboost をもとにして改良を重ねた手法になっています。 どのモデルもIteration=100, eary-stopping=10で比較していきましょう! 結果は・・・以下のようになりました。 0. 9764は普通に高い精度!! ただ、学習時間は1410秒なので20分以上かかってます Xgboost については以下の記事で詳しくまとめていますのでこちらもチェックしてみてください! 勾配ブースティング決定木を用いたマーケティング施策の選定 - u++の備忘録. XGboostとは?理論とPythonとRでの実践方法! 当ブログ【スタビジ】の本記事では、機械学習手法の中でも非常に有用で様々なコンペで良く用いられるXgboostについてまとめていきたいと思います。最後にはRで他の機械学習手法と精度比較を行っているのでぜひ参考にしてみてください。... Light gbm 続いて、 LightGBM ! LightGBM は Xgboost よりも高速に結果を算出することにできる手法! Xgboost を含む通常の決定木モデルは以下のように階層を合わせて学習していきます。 それをLevel-wiseと呼びます。 (引用元: Light GBM公式リファレンス ) 一方Light GBMは以下のように葉ごとの学習を行います。これをleaf-wise法と呼びます。 (引用元: Light GBM公式リファレンス ) これにより、ムダな学習をしなくても済むためより効率的に学習を進めることができます。 詳しくは以下の記事でまとめていますのでチェックしてみてください! LightGBMの仕組みとPythonでの実装を見ていこう!
05, loss='deviance', max_depth=4, max_features=0. 1, max_leaf_nodes=None, min_impurity_decrease=0. 0, min_impurity_split=None, min_samples_leaf=17, min_samples_split=2, min_weight_fraction_leaf=0. 0, n_estimators=30, presort='auto', random_state=None, subsample=1. 0, verbose=0, warm_start=False) テストデータに適用 構築した予測モデルをテストデータに適用したところ、全て的中しました。 from trics import confusion_matrix clf = st_estimator_ confusion_matrix(y_test, edict(X_test)) array([[3, 0, 0], [0, 8, 0], [0, 0, 4]], dtype=int64) 説明変数の重要度の算出 説明変数の重要度を可視化した結果を、以下に示します。petal lengthが一番重要で、sepal widthが一番重要でないと分かります。 今回の場合は説明変数が四つしかないこともあり「だから何?」という印象も受けますが、説明変数が膨大な場合などでも重要な要素を 機械的 に選定できる点で価値がある手法です。 feature_importance = clf. feature_importances_ feature_importance = 100. 勾配ブースティング木手法をPythonで実装して比較していく!|スタビジ. 0 * (feature_importance / ()) label = iris_dataset. feature_names ( 'feature importance') (label, feature_importance, tick_label=label, align= "center")
こんにちは、ワピアです。😄 今回は、機械学習モデルの紹介をしたいと思います。 この記事では、よく使われる勾配ブースティング木(GBDT)の紹介をします! 勾配ブースティング木とは 基本的には有名な決定木モデルの応用と捉えていただければ大丈夫です。 GBDT(Gradient Boosting Decision Tree)と略されますが、もしかしたらより具体的なライブラリ名であるxgboost、lightgbmの方が知られているかもしれません。コンペとかでよく見ますよね。 コンペでよく見られるほど強力なモデルなので、ぜひ実装できるようにしましょう! GBDTの大まかな仕組み 数式を使って説明すると長~くなりそうなのでざっくり説明になります。 基本原理は以下の2点です。 1. 目的変数(求めたい結果)と予測値との誤差を減らす ように、決定木で学習させる。 2.1を繰り返しまくって、誤差を減らす 前の学習をもとに新たな学習を行うので、繰り返せば繰り返すほど、予測精度は上がります! モデル実装の注意点 良い点 ・欠損値をそのまま扱える ・特徴量のスケーリングの必要なし(決定木なので大小関係しか問わない) スケーリングしても大小は変わらないので効果がないため、、、 ・カテゴリ変数をone-hot encodingしなくてOK これいいですよね、ダミー変数作るとカラムめちゃくちゃ増えますし、、、 ※one-hot encodingとは カテゴリ変数の代表的な変換方法 別の記事で触れます!すみません。 注意すべき点 ・過学習に注意 油断すると過学習します。トレーニングデータでの精度の高さに釣られてはいけません。 いよいよ実装! それでは、今回はxgboostでGBDTを実現しようと思います! import xgboost as xgb reg = xgb. XGBClassifier(max_depth= 5) (train_X, train_y) (test_X, test_y) 元データをトレーニングデータとテストデータに分けたところから開始しています。 これだけ? ?と思ったかもしれません。偉大な先人たちに感謝・平伏しております😌 最後に いかがだったでしょうか。 もう少し加筆したいところがあるので、追記していきたいと思います。 勾配ブースティング木は非常に強力ですし、初手の様子見として非常にいいと思います。パラメータをチューニングせずとも高精度だからです。 ぜひ使ってみてはいかがでしょうか。 何かご質問や訂正等ございましたら、コメントにお願いします!
Notice ログインしてください。
団体名 事業名 1 兵庫県子ども会連合会 日本の伝統の遊び「けん玉」でふるさとの感性を磨こう!
Twilog ホーム @hyogo_yodai 2 フォロー 13 フォロワー 1 リスト 兵庫県神戸市 Stats Twitter歴 3, 666日 (2011/07/25より) ツイート数 356 (0.
」 参加者募集のお知らせ ふるさと兵庫の様々な魅力を記録、発信、作品づくりに、 役に立つワークショップです!