実戦人品予测の二_人気モデルxgboost

4043 ワード

1.紹介
 ある人はデータマイニング試合をGBDT調参大会と戯れている.多くの試合後期には、みんなGBDT類のアルゴリズムを使っているので、特徴は似ているが、モデルパラメータだけが異なり、モデル集積方法が異なり、最終的にはみんなの成績の差も小さい.前編「実戦人柄予測の一つ_国内ビッグデータコンテストプラットフォーム」では、DataCastleプラットフォームの「微額借入ユーザー人柄予測コンテスト」の試合ルールと、いくつかの初歩的な試みを紹介した.本編では,最終的に勝利したのも,GDBTクラスアルゴリズムの中で最も頻度の高いxgboostアルゴリズムの使用とパラメータ調整方法である.
2.xgboost原理
 以前『機械学習_集積アルゴリズム』編(http://www.jianshu.com/p/3c8cca3e1ca2)では、GBDTクラスのアルゴリズムを紹介し、簡単に振り返ると、 Boostingアルゴリズムは同じアルゴリズム(例えば決定ツリー)を用いて新しいモデルを構築し続け、新しいモデルは前回の誤分サンプルより大きな重みに割り当てられ、最終的に成功度重み付けの組み合わせによって結果が得られる.徐々に改善されるという考え方が導入されるため,重要な属性は重み付けされる. Gradient Boosting Machine(GBM)勾配上昇アルゴリズムは現在比較的流行しているデータマイニングモデルであり、損失関数を求めることによって勾配方向に低下する方法、層毎に改善され、汎化能力の強いアルゴリズムであり、各種データマイニング試合によく用いられる.よく使われるツールはXGBoost、LightGBM、sklearnが提供する GradientBoostingClassifierなどです.GBMは常に決定ツリーをベースモデルとしており,我々が見たGBDT勾配向上決定ツリーは,このアルゴリズムを指す.
3.xgboostの簡単な使用
(1)ライブラリのインストール
 xgboostは独立したパッケージで、個別にインストールする必要があります.
$ pip install xgboost

(2)サンプルコード
import xgboost as xgb

model = xgb.XGBClassifier()
model.fit(train_x, train_y)
model.score(test_x, test_y)
test_y = model.predict(test_x)

4.xgboostとsklearn
 xgboostは、自身の呼び出しインタフェースとsklearnの呼び出し方式と同様に、上のコードはsklearn呼び出し方式を使用しており、ユーザーがsklearnのGBDTからxgboostにすぐに移行できるようにしています.(xgboostだけでなく、多くのデータ・マイニング・ライブラリがsklearnのような呼び出し方法を提供している)
5.xgboostパラメータ
 xgboostパラメータは、boostパラメータ、treeパラメータ、その他のパラメータの3つに分類されます.
(1)Treeパラメータ
 xgboostは弱い分類器としてlinearも提供しているが、一般的にはツリー分類器が用いられている.この部分の設定は主にツリーの大きさを制御し、フィッティングを避けるため、具体的なパラメータはインスタンスの多少と分布密度によって決まる.
  • max_depth:最大ツリー深度(デフォルト6、sklearnのmax_depthと同じ)
  • max_leaf_Nodes:ツリー上の最大ノードまたは葉の数(sklearnのmax_leaf_nodesと同じ)
  • (2)Boostパラメータ
  • scale_pos_Weight:正の反例データの重みは、反例を増やす必要はありません.
  • early_stopping_rounds:何輪以内に向上がなければ停止しますか.
  • eta:学習率(デフォルト0.3、sklearnのlearning_rateと同じ).
  • min_child_Weight:最小リーフノードサンプルウェイト和(sklearnのmin_child_leafのようなデフォルト1).
  • max_delta_Step:ツリーごとに重みが変化する最大ステップ(デフォルトは0、コンストレイントなし、一般的には設定されません).
  • subsample:各ツリーで使用されるサブサンプルが総サンプルに占める割合(デフォルト1、一般的に0.8、sklearnのsubsampleと同じ).
  • colsample_bytree:ツリー対フィーチャーサンプリングの割合(sklearnのmax_featuresのようなデフォルト1).
  • colsample_bylevel:各レベルの各分割、列数のサンプリングの割合.
  • lambda:重みのL 2正規化項、フィットしすぎないようにし、複雑さを低減(デフォルト1、非常用)
  • alpha:重みのL 1正規化項、フィットを回避し、複雑さを低減(デフォルト1)
  • gamma:ノード分裂に必要な最小損失関数降下値(デフォルト0)
  • (3)その他のパラメータ
  • booster:分類器タイプツリーまたは線形を選択(デフォルトはgbtree、一般的には変更しない)
  • silent:出力情報を印刷するかどうか(デフォルトは0、出力情報、一般的には変更しない)
  • nthread:最大スレッド数(デフォルトはCPU全コア、一般的には変更しない)
  • seed:ランダムシード、使用後ランダム結果が再現可能(sklearnのrandom_stateのように)
  • objective:損失関数
  • eval_metric:有効なデータのメトリック方法、rmse、mae、logloss、aucなどの
  • があります
    6.パラメータ調整
     sklearnのgdbtを初めてxgboostで置き換えたとき、同様にデフォルトパラメータであり、パラメータを調整しない場合、成績は0.05低下した.主にxgboostのデフォルトパラメータによるもので、その後チャンピオンのパラメータを使用し、0.02の上昇があった.これは、パラメータの調整が必要であることを示しています. パラメータは、全体的に他のパラメータを決定する場合に、あるパラメータを調整することである.このように単独でパラメータを調整すると、特徴を組み合わせた後に最適なパラメータが変化する可能性があるなどの問題があるが、貧乏挙や人の特徴に対する理解以外に方法はないようだ. パラメータ調整時は学習率を0.1以上に調整して運転速度を速め、後期モデルが安定してから値を低くすることに注意してください. sklearnはパラメータ調整ツールGridSearchCVを提供し、xgboostと組み合わせることができ、簡単なルーチンは以下の通りである.
    from sklearn import svm, datasets
    from sklearn.model_selection import GridSearchCV
    import xgboost as xgb 
    
    iris = datasets.load_iris()
    
    parameters = {'max_depth':[4,5,6], 'min_child_weight':[4,5,6]}
    model = xgb.XGBClassifier()
    clf = GridSearchCV(model, parameters)
    clf.fit(iris.data, iris.target)
    
    print(clf.grid_scores_)
    print(clf.best_params_)
    print(clf.best_score_)
    

     参先を調整することも重要です.具体的な方法は以下の通りです.http://blog.csdn.net/han_xiaoyang/article/details/52665396
    7.まとめ
     通过本次实验,明显看到xgboost好处,比如支持多线程,可调节正反例权重,自带交叉验证,处理缺省值,包含了很多预处理的工作.  優勝コードを用いて予測を行い,特徴処理や他のアルゴリズムを一切加えずに反復して50000回行い,線上得点は0.7を超え,この得点と試合終了時の最高得点0.734はあまり差がなかった.AUC値を印刷するたびに、その進化過程が明らかになります.収束するまで反復します.原理的には,このアルゴリズムは基礎パラメータに問題なく,機械計算力も十分な場合に最適に近い成績を得ることができるはずである. 拡張的に見ると、エラーの重みを増やし、反復し続ける統合アルゴリズムは、マルチアルゴリズムと結合する効果があり、具体的にはsklearnのツールAdaBoostを参照することができます.