Python実装Xgboostモデル

著作権:この記事は疑問を持っているとして、著者のマイクロ文字kxymxzs、歓迎ハラスメントに連絡してください!https://blog.csdn.net/MG_ApinG/article/details/87934052

1.ダウンロードxgboostパッケージファイル: https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost

2.インストールパッケージのxgboost:コマンド入力マネージャはGをインストールPIP:\ GoogleDownload \ xgboost

3.xgboost利点:

利点:(1)正則:XGBoostは、コスト関数に正則化項をモデルの制御の複雑さを追加しました。ツリー内のリーフノードの数、各ノードとリーフにL2モード出力スコアの正方形を含む正則用語。ビューのバイアス・分散トレードオフの観点から、正則はGBDTの伝統的な特性よりもxgboost優れている、オーバーフィッティングを防止するために出て学ぶことのモデルを容易にするために分散モデルを低減します。

(2)並列処理:XGBoostツールは、平行に支持しています。ブーストは、それが平行どう?シリアル構造ではないでしょうか?XGBoostパラレルツリーは粒度を平行ではないことに注意してください、XGBoostは、次の反復への次の反復を終了する(コスト関数は、t番目の反復は、時刻t-1の反復の予測値の前を含んでいます)。これは、並列XGBoostのフィーチャーサイズです。私たちは、最も時間のかかるステップを学習決定木は、(最高のスプリットポイントを決定するために)値特性の一種であることを知って、XGBoostは背後に、トレーニングの前に、データを事前にソートし、その後、ブロック構造として保存しますこの構造の反復が繰り返し使用され、計算量を大幅に低減されます。ブロック構造はまた、分割ノードの間に、あなたは、各機能のゲインを計算する必要があり、そして最終的には、各機能のために計算された利得は、より多くのスレッドを開くことができ、分割しない最大のゲイン特性を選択し、できるだけ平行になります。

(3)柔軟性:XGBoostであれば、二次の目的関数は、ライン上に導くことができるように、ユーザ定義の目的関数と評価関数をサポートします。

(4)欠損値:欠落機能のサンプル値は、自動的にその分割の方向を知るxgboost

(5)剪定:全サブツリーを確立することができ、最終的にトップを確立するために起動し、底部から逆プルーンでトップにXGBoost。GBMと比較すると、これは局所最適解に陥ることは容易ではありません。

(6)内部クロスバリデーション:XGBoost各昇圧反復におけるクロスバリデーションの使用を可能にします。したがって、それは簡単に反復回数を高める最適を得ることができます。グリッドサーチを使用してGBMは、値の限られた数を検出します。

詳細4.XGBoost引数

一般的なパラメータ、ブースターパラメータおよびタスクパラメータ:XGboostを実行する前に、3つのタイプのパラメータを設定する必要があります。

4.1 一般的なパラメータ(一般的なパラメータ):このパラメータは、どのブースターの間に使用されるリフトパラメータ(ブースト)を制御し、ブースターは、共通のツリーモデル(木)と線形モデル(線形モデル)を持っています

ブースター[デフォルト= gbtree]:2つのモデルがあり、選択とgbtreeのgblinearすることができます。gbtreeツリーベースのモデルリフティング計算、線形モデルを使用してgblinearリフティング計算。デフォルト値はgbtreeです

サイレント[デフォルト= 0]:実行時の情報を印刷しないように注意サイレントモード1として実行したときに、プリントアウトランタイム情報は、0に設定されていることを示します。デフォルト値は0です

nthread:XGBoostランタイムスレッドの数。デフォルト値は、現在のシステムで使用可能なスレッドの最大数であります

num_pbuffer:予測バッファサイズは通常、訓練例の数に設定されています。人間設定せずに、予測高めるための最後のステップを格納するためのバッファ。

num_feature:ブースティングフィーチャ寸法のプロセスで使用される、特徴の数を設定します。XGBoostは自動的に手動設定なしに設定します。

4.2ブースターパラメータ(パラメータブースター):それはブースター使用の種類に依存。

(1)ツリーブースタ参数(ブースター= gbtree)

ETA [デフォルト= 0.3]:更新プロセス工程において使用されるオーバーフィッティング、収縮を防止するために。右各持ち上げ計算アルゴリズムの直後に体重の新機能を取得します。ETAは右より保守的な重い物を持ち上げる計算処理の機能を切断しました。[0、1]:デフォルト値が範囲内で、0.3です。典型的な値は0.01〜0.2です。

ガンマ[デフォルト= 0]:ノード分割、損失関数の値のみが分割後低下し、ノードを分割します。ガンマは、所望のノード分割の値における最小損失関数低下を指定します。このパラメータの値が大きいほど、より保守的なアルゴリズム。

このパラメータの機能と値の損失は密接にそれに関連して調整する必要があります。範囲内:[0、∞]

MAX_DEPTH [デフォルト= 6]:深さの最大数。デフォルトは6です。範囲内:[1、∞]。チューニングするために必要なCV機能。典型的な:3-10

min_child_weight [デフォルト= 1]:子ノードと最小サンプル重量。サンプル重量と重量がリーフノードはmin_child_weight処理が終了解像度未満である場合。現在の回帰モデルでは、このパラメータは、各モデルのために必要なサンプルの最小数を確立することです。このパラメータは、オーバーフィッティングを回避するために使用されます。その値が大きい場合、モデルは、地元の特別なサンプルを学習避けることができます。この値が高すぎる場合には、それはあまりフィット感につながることができます。このパラメータは、CVを調整する必要があります。範囲内:[0、∞]

max_delta_step [デフォルト= 0]:私たちは木の重量当たりの重量の値を推定することができます。値は何の制約を意味しない、0に設定されている場合、それは正の値に設定されている場合、それはより保守的なステップを更新することができるように。このパラメータは、通常は必要ありませんが、ロジスティック回帰クラスは、この時間は非常にアンバランスであるならば、彼は有用である可能性が高いです。1と10の制御の更新の間の範囲にすることができるかもしれません。範囲内:[0、∞]

サブサンプル[デフォルト= 1]:サンプルの全セットのサブサンプルトレーニングモデル比。0.5手段に設定した場合、ランダムにオーバーフィッティング防止することができる50%のサブサンプルビルドツリーモデルのサンプルセット全体からランダムに描かXGBoost。(0、1]の範囲内

colsample_bytree [デフォルト= 1]:比ツリー機能サンプルを確立します。デフォルトは1です。(0、1]の範囲内

(2)リニアブースターパラメータ(ブースター= gblinear)

ラムダ[デフォルト= 0]:L2正規ペナルティ係数

アルファ[デフォルト= 0]:正規ペナルティ係数L1

lambda_bias:L2定期的に相殺されています。デフォルト値は0(バイアスが重要ではないため、L1には正則化項バイアスときL1)

4.3 学習目標パラメータ(パラメータタスク):コントロールシーン研究、例えば、ソート回帰問題を制御するために異なるパラメータを使用します。

対物[デフォルト= REG:リニア ]:学習タスクと対応する学習目標、別の目的関数を定義REG:リニア(線形回帰); REG:ロジスティック(ロジスティック回帰); バイナリ:ロジスティック(バイナリ論理回帰出力確率); バイナリ:logitraw(バイナリロジスティック回帰、および結果を出力WTXである); COUNT:ポアソン(カウントポアソン回帰問題は、ポアソン分布する出力がポアソンmax_delta_stepのデフォルト値を返しています。 0.7のための(最適化を保護する目的で使用し)); マルチ:ソフトマックス(XGBoostソフトマックスは、複数の分類問題を処理するために、目的関数を使用して、パラメータnum_class(カテゴリー番号を設定する必要がありましょう)); マルチ:softprob(およびソフトマックス同じですが、出力がありますNDATA * nclassベクトル、ベクトル行列は、列ないnclass行にNDATA行を再形成することができるデータサンプルの各クラスの確率が属する表す); .. ランク:ペアワイズ(SET XGBoost、損失を最小化することによってペアワイズランキングタスクを実行するために)

base_score [デフォルト= 0.5]:全ての予測スコアのインスタンスを初期化し、グローバルバイアス、反復の十分な数がある場合、変更された値があまり影響を与えないであろう。

eval_metric【目的に応じてデフォルト]:評価チェックデータが必要な、目的関数は(ランクの平均精度の平均、回帰のRMSE、および分類のためのエラー)は、異なる既定の評価を持っています。複数のユーザを追加することができPythonの代わりに、パラメータリストのパラメータマップを選択するために、「eval_metric」カバーしていない、プログラムにパラメータを渡すための種の評価指標リスト:;メイ(絶対誤差平均)RMSE(二乗平均誤差)logloss (負の対数尤度関数値);(曲線下面積)、AUC;エラー(バイナリ誤り率0.5の(閾値)); merror(複数分類エラーレート); mlogloss(複数分類logloss損失関数)

シード[デフォルト= 0]:乱数シード。デフォルト値は0です

4.4 xgboost.train()関数のパラメータ

xgboost.train(params,
              dtrain,
              num_boost_round=10,
              evals=(),
              obj=None,
              feval=None,
              maximize=False,
              early_stopping_rounds=None,
              evals_result=None,
              verbose_eval=True,
              learning_rates=None,
              xgb_model=None) 

paramsは:これは、フォームのparams = {「gbtree」、「ETA」0.1「ブースター」}で、キーパラメータおよびトレーニングの対応する値が含まれている辞書であります

dtrain:データトレーニング

num_boost_round:これは、強化するために反復回数を指し、

試用版:これは、トレーニングプロセスのリストを評価するために使用される要素のリストです。最初のケースのためのフォーム試用版= [(dtrain、 '電車')、(DVAL、 'ヴァル')]または試用版= [(dtrain、 '電車')]、我々はトレーニングの過程で観察できるように、セットの効果を検証します。

OBJ:目的関数のカスタム

fevalのカスタム評価関数

最大化:評価関数を最大化するかどうか

early_stopping_rounds:初期停止周波数は100であると仮定され、ある程度反復検証セットの誤差は、反復を停止し、100で減少し続けることはできません。これは、複数存在する場合、少なくとも一つの要素は、それを行うには、最後の1によれば、ある試用版が必要です。これは、反復の最後の番号(最高ではない)を返します。early_stopping_roundsが存在する場合、そのモデルは3つの属性、bst.best_score、bst.best_iteration、およびbst.best_ntree_limitを生成します。

evals_result:辞書は、ウォッチリストに保存されている要素の結果を評価します。

verbose_eval(数値またはブール値を入力してください):試用版では、少なくとも1つの要素が必要です。Trueの場合、試用版とその要素の評価結果が出力になり、入力番号が5とすると、図5は、回繰り返し出力されます。

learning_rates:学習率のすべてのアップグレードのリスト、

xgb_model:XGBモデルのトレーニングがロードする前に。

5.Xgboost戦闘:

XGBoostは、二つのインタフェースがあります。XGBoostネイティブインターフェースとscikit-学びインタフェースはとXGBoostが可能な分類回帰の両方のタスクを



# 基于XGBoost原生接口的分类
from sklearn.datasets import load_iris
import xgboost as xgb
from xgboost import plot_importance
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score   # 准确率


iris = load_iris()  # 加载样本数据集
x_data, y_data = iris.data, iris.target
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data,test_size=0.2, random_state=1234565)  # 数据集分割
params = {
    'booster': 'gbtree',
    'objective': 'multi:softmax',
    'num_class': 3,
    'gamma': 0.1,
    'max_depth': 6,
    'lambda': 2,
    'subsample': 0.7,
    'colsample_bytree': 0.7,
    'min_child_weight': 3,
    'silent': 1,
    'eta': 0.1,
    'seed': 1000,
    'nthread': 4,
}
plst = params.items()
dtrain = xgb.DMatrix(x_train, y_train)  # 生成数据集格式
model = xgb.train(params,
                  dtrain,  # 训练的数据
                  num_boost_round=500  # 提升迭代的个数
                  ) # xgboost模型训练


# 对测试集进行预测
dtest = xgb.DMatrix(x_test)
y_pred = model.predict(dtest)

# 计算准确率
accuracy = accuracy_score(y_test,y_pred)
print("accuarcy: %.2f%%" % (accuracy*100.0))

# 显示重要特征
plot_importance(model)
plt.show()


# ================基于XGBoost原生接口的回归=============

import xgboost as xgb
from xgboost import plot_importance
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error

# 加载数据集
boston = load_boston()
X,y = boston.data,boston.target

# XGBoost训练过程
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

params = {
    'booster': 'gbtree',
    'objective': 'reg:gamma',
    'gamma': 0.1,
    'max_depth': 5,
    'lambda': 3,
    'subsample': 0.7,
    'colsample_bytree': 0.7,
    'min_child_weight': 3,
    'silent': 1,
    'eta': 0.1,
    'seed': 1000,
    'nthread': 4,
}

dtrain = xgb.DMatrix(X_train, y_train)
model = xgb.train(params, dtrain, num_boost_round=500)

# 对测试集进行预测
dtest = xgb.DMatrix(X_test)
ans = model.predict(dtest)

# 显示重要特征
plot_importance(model)
plt.show()



# ==============基于Scikit-learn接口的分类================
from sklearn.datasets import load_iris
import xgboost as xgb
from xgboost import plot_importance
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载样本数据集
iris = load_iris()
X,y = iris.data,iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234565) # 数据集分割

# 训练模型
model = xgb.XGBClassifier(max_depth=5, learning_rate=0.1, n_estimators=160, silent=True, objective='multi:softmax')
model.fit(X_train, y_train)

# 对测试集进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test,y_pred)
print("accuarcy: %.2f%%" % (accuracy*100.0))

# 显示重要特征
plot_importance(model)
plt.show()


# ================基于Scikit-learn接口的回归================
import xgboost as xgb
from xgboost import plot_importance
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston

boston = load_boston()
X,y = boston.data,boston.target

# XGBoost训练过程
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=True, objective='reg:gamma')
model.fit(X_train, y_train)

# 对测试集进行预测
ans = model.predict(X_test)

# 显示重要特征
plot_importance(model)
plt.show()



一般的な手順6.チューニングパラメータ

そして、我々はGBMに同様の方法を使用します。次のステップを必要と:

学習(学習率)の高いレートを選択します。一般的には、学習率は0.1です。しかし、別の問題は、時々理想的な学習率は0.05と0.3の間で変動しました。ディシジョンツリーは、選択した学習率の上にこの番号に対応します。そこ関数「CV」は、各反復において有用な、この機能を使用することができるクロスバリデーションをXGBoost、およびツリー理想の数を返します。

所定の速度と決定木学習、特定のパラメータ調整のための決定木(MAX_DEPTH、min_child_weight、ガンマ、サブサンプル、colsample_bytree)の数について2。プロセスのツリーを決定する際に、我々は異なるパラメータを選択することができ、後で私が説明します。

3. xgboost正則チューニングパラメータ。(ラムダ、アルファ)。これらのパラメータは、それによってモデルの性能を向上させる、モデルの複雑さを低減することができます。

4.理想的なパラメータを決定するために、学習率を減少させました。

これらの操作が一緒に詳細にステップバイステップでみましょう。

ステップ1:率とチューニングを学ぶtree_based推定されたパラメータの数を決定します。

パラメータを後押し決定するために、我々はまず、他のパラメータの初期値を与える必要があります。私たちは、メソッドの値を押します。

1、MAX_DEPTH = 5:このパラメータの値は、3~10の間であることが好ましいです。私は開始値が5で選んだが、あなたはまた、他の値を選択することができます。4-6間のスタート値は良い選択です。

2、min_child_weight = 1:それは非常にアンバランスな分類であるため、ここでは、比較的小さな値を選択しました。したがって、いくつかのリーフノードの値が比較的小さいであろう。

図3に示すように、ガンマ= 0:開始値はまた、その上に0.2に0.1の間、他の比較的小さな値から選択することができます。このパラメータを調整するための後継者です。

4、サブサンプル、colsample_bytree = 0.8:これは初期値の最も一般的なものです。典型的な値は0.5〜0.9の範囲です。

5、scale_pos_weight = 1:この値は、カテゴリので、非常にアンバランスです。

ああ、これらのパラメータの値は、上記のみ初期推定値は、調整される、後続の必要性であることに注意してください。ここでは学習率は、0.1のデフォルトに設定されます。そして、xgboost CV機能は、決定木の最適な数を決定します。

ステップ2:max_depthのチューニングパラメータとmin_weight

彼らは最終的な結果に大きな影響を持っているので、これら2つのパラメータをチューニングしてみましょう。まず、しましょう広い範囲の粗パラメータは、小スケールの微調整。

注:このセクションでは、私は、高負荷のグリッド(グリッドサーチ)を検索します、このプロセスは、システムの性能に応じて、さらに長い15〜30分かかりますか。あなたはまた、独自のシステムの性能に応じて異なる値を選択することができます。

第三段階:ガンマパラメータのチューニング

ステップ4:サブサンプルのパラメータとcolsample_bytreeを調整

ステップ5:正則パラメータチューニング。

ステップ6:学習率を削減

最後に、私たちは学習率の低下、そしてより多くの決定木の使用を使用しています。私たちは、このステップを動作するようにCV機能でXGBoostを使用することができます。

おすすめ

転載: blog.csdn.net/MG_ApinG/article/details/87934052