タグ付けされた質問 「xgboost」

人気のブースティングアルゴリズムとソフトウェアライブラリ(「極端な勾配ブースティング」の略)。ブースティングは、弱予測モデルを強予測モデルに結合します。


1
GBM、XGBoost、LightGBM、CatBoostの数学的な違いは?
以下のようなモデルのGBDTファミリの実装がいくつか存在します。 GBM XGBoost LightGBM キャットブースト。 これらの異なる実装の数学的違いは何ですか? Catboostは、このベンチマークに従ってデフォルトパラメータのみを使用しても、他の実装よりも優れているようですが、それでも非常に遅いです。 私の推測では、catboostはダミー変数を使用しないため、各(カテゴリ)変数に与えられた重みは他の実装と比較してよりバランスが取れているため、高カーディナリティー変数は他の変数よりも重みがありません。弱いカテゴリカル(低カーディナリティ)が一部のツリーに入ることができるため、パフォーマンスが向上します。それ以外は、これ以上の説明はありません。
33 boosting  xgboost 

1
XGBoost損失関数テイラー展開による近似
例として、番目の反復でXGBoostモデルの目的関数を使用します。ttt L(t)=∑i=1nℓ(yi,y^(t−1)i+ft(xi))+Ω(ft)L(t)=∑i=1nℓ(yi,y^i(t−1)+ft(xi))+Ω(ft)\mathcal{L}^{(t)}=\sum_{i=1}^n\ell(y_i,\hat{y}_i^{(t-1)}+f_t(\mathbf{x}_i))+\Omega(f_t) ここで、は損失関数、は番目のツリー出力、は正則化です。高速計算のための(多くの)重要なステップの1つは近似です:ℓℓ\ellftftf_ttttΩΩ\Omega L(t)≈∑i=1nℓ(yi,y^(t−1)i)+gtft(xi)+12hif2t(xi)+Ω(ft),L(t)≈∑i=1nℓ(yi,y^i(t−1))+gtft(xi)+12hift2(xi)+Ω(ft),\mathcal{L}^{(t)}\approx \sum_{i=1}^n\ell(y_i,\hat{y}_i^{(t-1)})+g_tf_t(\mathbf{x}_i)+\frac{1}{2}h_if_t^2(\mathbf{x}_i)+\Omega(f_t), ここで、およびは損失関数の1次および2次導関数です。gigig_ihihih_i 私が求めているのは、上記の近似がなぜ機能するのかを説明する説得力のある説得です: 1)上記の近似のXGBoostは、完全な目的関数のXGBoostと比較してどうですか?どのような潜在的に興味深い、高次の動作が近似で失われますか? 2)視覚化するのは少し難しい(損失関数に依存する)が、損失関数に大きな3次成分がある場合、近似は失敗する可能性が高い。これがXGBoostに問題を引き起こさないのはどうしてですか?

4
不均衡なデータセットに対するxgboostのscale_pos_weightの適切な使用法は何ですか?
非常に不均衡なデータセットがあります。チューニングのアドバイスに従って使用しようとしていますが、scale_pos_weightどのようにチューニングする必要があるかはわかりません。 私はそれを見ることRegLossObj.GetGradientができます: if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight そのため、陽性サンプルの勾配はより影響力があります。ただし、xgboostの論文によると、勾配統計は常に特定のツリーの特定のノードのインスタンス内でローカルに使用されます。 ノードのコンテキスト内で、候補分割の損失削減を評価する 葉ノードのコンテキスト内で、そのノードに与えられる重みを最適化する したがって、何が良いかを前もって知る方法はありません。scale_pos_weight正と負のインスタンスの比率が1:100になるノードと、比率が1:2のノードでは、数値が大きく異なります。 ヒントはありますか?

1
xgboostアルゴリズムのmin_child_weightの説明
xgboostのmin_child_weightパラメーターの定義は次のとおりです。 子に必要なインスタンスの重み(ヘシアン)の最小合計。ツリーパーティションのステップの結果、インスタンスの重みの合計がmin_child_weightより小さいリーフノードが生成される場合、構築プロセスはさらにパーティションを放棄します。線形回帰モードでは、これは単に各ノードに必要なインスタンスの最小数に対応します。アルゴリズムが大きくなるほど、保守的になります。 元の論文(式8と式9の直後のもの)、この質問、およびGoogle検索の最初の数ページに表示されるxgboostで行うほとんどのことを含め、xgboostでかなり多くのことを読みました。;) 基本的に、ヘシアンの合計に制約を課している理由について、私はまだ満足していませんか?元の論文からの私の唯一の考えは、それが各インスタンスの「重み」としてを持つ重み付き分位点スケッチセクション(および式3の重み付き2乗損失の再定式化)にているということです。hihih_i さらなる質問は、それが単に線形回帰モードのインスタンスの数である理由に関するものですか?これは二乗和方程式の二次導関数に関係していると思いますか?

3
XGBoost対Python Sklearn勾配ブーストツリー
XGBoostの仕組みを理解しようとしています。Python sklearnで勾配ブーストされたツリーがどのように機能するかは既に理解しています。私にとって明らかではないのは、XGBoostが同じように動作するが高速であるか、またはXGBoostとpython実装との間に根本的な違いがあるかどうかです。 この論文を読んだとき http://learningsys.org/papers/LearningSys_2015_paper_32.pdf XGboostから得られる最終結果はPython実装と同じですが、主な違いはXGboostが各回帰ツリーで最適な分割を見つける方法です。 基本的に、XGBoostは同じ結果をもたらしますが、高速です。 これは正しいですか、それとも私が見逃している何かがありますか?

3
SVM以外に、どのアルゴリズムが機能のスケーリングを必要としますか?
RandomForest、DecisionTrees、NaiveBayes、SVM(kernel = linear and rbf)、KNN、LDA、XGBoostなどの多くのアルゴリズムを使用しています。SVMを除き、それらはすべて非常に高速でした。それは、機能のスケーリングを高速化する必要があることを知ったときです。それから、他のアルゴリズムにも同じことをすべきかと思い始めました。

1
ツリーのブーストとバギング(XGBoost、LightGBM)
ツリーのバギング や ブースティングのアイデアに関する多くのブログ記事、YouTubeビデオなどがあります。私の一般的な理解では、それぞれの擬似コードは次のとおりです。 バギング: サンプルのx%および特徴のy%のN個のランダムサンプルを取得します Nのそれぞれにモデル(決定木など)を適合させる 各Nで予測 予測を平均して最終予測を取得する ブースティング: モデル(意思決定ツリーなど)をデータに適合させる 残差を取得する モデルを残差に適合させる N回のブースティングラウンドで2に進む 最終予測は、順次予測子の加重合計です。 上記の私の理解を明確にするために説明しますが、私の意図する質問は次のとおりです。 XGBoostとLightGBMの両方には、バギングを許可するパラメーターがあります。このアプリケーションは、バギングまたはブースティング(すべてのブログ投稿で述べられていること)ではなく、バギングとブースティングです。バギングとブースティングの組み合わせが行われる場所とタイミングの擬似コードは何ですか? 「Bagged Boosted Trees」になると思っていましたが、「Boosted Bagged Trees」のようです。違いは大きいようです。 バギングブーストツリー: サンプルのx%および特徴のy%のN個のランダムサンプルを取得します N個のサンプルのそれぞれにブーストされたツリーをフィット 各Nで予測 予測を平均して最終予測を取得する これが最善の方法のようです。結局、ブーストのリスクは過剰適合であり、バギングの主な利点は過剰適合を減らすことです。ブーストされたモデルの束をまとめることは素晴らしいアイデアのようです。 ただし、たとえば、scikit-learn gradient_boosting.py(サンプルのバギングを行いますが、ランダムな特徴選択は行いません)を調べ、LightGBMとXGBoostに関する投稿全体のいくつかの小さなナゲットを組み合わせると、XGBoostとLightGBMは次のように機能します。 ブーストバギングツリー: 決定木をデータに適合させる Nブーストラウンドのiの場合: 残差を取得する bag_frequency == 0の場合(つまり、5ラウンドごとにバッグする): サンプルのx%と特徴のy%の単一のランダムサンプルを取得します。今後このランダムなサンプルを使用してください 木を残差に適合させる 最終予測は、順次予測子の加重合計です。 ここで私の理解を修正し、詳細を入力してください。Boosted Bagged Tree(bag_frequencyごとにランダムツリーが1つだけ)は、Bagged Boosted Treeほど強力ではないようです。

4
非線形モデルを使用する場合、多重共線性について心配する必要がありますか?
ほとんどがカテゴリカルな特徴を持つバイナリ分類問題があるとします。学習には非線形モデル(XGBoostやランダムフォレストなど)を使用します。 それでも多重共線性を心配する必要がありますか?どうして? 上記の答えが正しい場合、これらのタイプの非線形モデルを使用していることを考慮して、どのように戦うべきですか?

1
XGBoostは予測フェーズで欠落データを処理できます
最近、XGBoostアルゴリズムを確認しましたが、このアルゴリズムは、トレーニングフェーズで欠落データを(補完を必要とせずに)処理できることに気付きました。XGboostが新しい観測値の予測に使用される場合、または欠損データを補完する必要がある場合、XGboostが欠損データを(補完を必要とせずに)処理できるかどうか疑問に思っていました。 前もって感謝します。

1
勾配ブースティングは確率推定をどのように計算しますか?
私は、さまざまなブログ、ウェブサイトを読んで勾配ブーストを理解し、たとえばXGBoostソースコードを調べて私の答えを見つけようとしています。ただし、勾配ブースティングアルゴリズムが確率推定値を生成する方法についての理解できる説明は見当たらないようです。それで、彼らはどのように確率を計算しますか?

1
線形基本学習器はブースティングでどのように機能しますか?そして、それはxgboostライブラリでどのように機能しますか?
XGBoostで線形目的関数と線形ブーストを実装する方法を知っています。私の具体的な質問は、アルゴリズムが残差(または負の勾配)に適合する場合、各ステップで1つの特徴(つまり、単変量モデル)またはすべての特徴(多変量モデル)を使用することですか? XGBoostのリニアブーストに関するドキュメントへの参照はすべて高く評価されます。 編集: 'booster'パラメーターを 'gblinear'に設定することにより、XGBoostで線形ブーストを実装できます。リニアブースティングに関する有用な情報については、http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3885826/を参照してください。私は目的関数(線形であることもあります)についてではなく、それら自体のブーストについて話していることに注意してください。 ありがとう!

1
xgboostのmax_delta_step
ドキュメントの説明からこのパラメーターがどのように機能するかを完全に理解できません [max_delta_step [default = 0]]各ツリーの重み推定を可能にする最大デルタステップ。値が0に設定されている場合は、制約がないことを意味します。正の値に設定すると、更新ステップをより保守的にするのに役立ちます。通常、このパラメーターは必要ありませんが、クラスが極端に不均衡である場合、ロジスティック回帰に役立つ可能性があります。値を1〜10に設定すると、更新の制御に役立つ場合があります 特に重みの分析ソリューションがすでにあり、重みがによってすでにペナルティを課されているため、「デルタステップ」が何を指しているのかは私にはわかりませんeta。このパラメーターがアルゴリズムのどこに適合するか、「デルタステップ」とは何を指し、極端に不均衡なデータセットでそれがどの程度正確に役立つかを誰かが説明できますか?
9 xgboost 

1
xgb-forecastの信頼区間
専門家!たぶん、xgboostの信頼区間を計算する方法を知っていますか?私のデータは通常は分布されていないため、t分布のある古典的な数式は役に立ちません。または関係ありませんか? いくつかの文献を提案する場合、それは非常に便利ですが、RおよびPython(ライブラリxgbのコンテキスト)でのアプローチも適切です。 おそらく、このように見えますが、どのように計算しますか?そしてこれを見つけました -それは正しいですか? PS:データに関連する画像(リンクの制限)を追加できません。申し訳ありません。

2
露光付きポアソンxgboost
露出が不均一なカウント依存変数をモデル化しようとしていました。古典的なglmsはオフセットとしてlog(exposure)を使用しますが、gbmも使用しますが、xgboostは今までオフセットを許可していません... この例をクロスバリデーション(オフセットはポアソン/負の二項回帰でどこに行くのか)で欠点を見つけようとすると、露出による重み付けのカウントの代わりに頻度(実数)をモデル化するように提案されました。 データに同じメソッドを適用するためにいくつかのxgboostコードに沿って作業しようとしましたが、失敗しました...コードの下に設定しました: library(MASS) data(Insurance) library(xgboost) options(contrasts=c("contr.treatment","contr.treatment")) #fissa i Insurance$freq<-with(Insurance, Claims/Holders ) library(caret) temp<-dplyr::select(Insurance,District, Group, Age,freq) temp2= dummyVars(freq ~ ., data = temp, fullRank = TRUE) %>% predict(temp) xgbMatrix <- xgb.DMatrix(as.matrix(temp2), label = Insurance$freq, weight = Insurance$Holders) bst = xgboost(data=xgbMatrix, label = Insurance$freq, objective='count:poisson',nrounds=5) #In xgb.get.DMatrix(data, label) : xgboost: label …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.