Xgboost: gblinear + reg:linearは正確に何をしますか? およびその他の質問

作成日 2015年05月24日  ·  12コメント  ·  ソース: dmlc/xgboost

こんにちは、

私はxgboostの力を発見し始めているので、デモデータセット(現在sklearn.datasetsのボストンデータセット)で遊んでいます。

パラメータを正しく理解している場合は、次を選択してください。

plst=[('silent', 1),
 ('eval_metric', 'rmse'),
 ('nthread', 1),
 ('objective', 'reg:linear'),
 ('eta', 1),
 ('booster', 'gblinear'),
 ('lambda', 0),
 ('alpha', 10)]

私は弱い学習者として投げ縄回帰でブーストを行う必要があります。 _その通りですか?_その場合、num_round = 1の場合、単一のラッソ回帰の出力を取得する必要があります。したがって、非常にスパースな重みベクトルですが、まったくそうではありません。
しかし、実際には、1ラウンドの出力を取得することは不可能だと思います。 実際、num_round = 1であっても、etaを変更すると、モデルの重みベクトルが変化します。つまり、少なくとも2つのラウンドがあるか、何かを誤解しています。 _私の解釈は正しいですか?_

また、いくつかのテストの後、パラメータetaが実装の勾配ブースティングツリーに制限されているとは思いませんが、ドキュメントではサブセクション_treeparameter_にあります。 学習率を設定することによる収縮は、ブースティングツリーに固有ではないブースティングを正規化する方法であるため、これは私には論理的に思えます。
ツリーのブースティングに限定できないのは、「サブサンプル」オプションです。 これは、ブースティング線形リグレッサとブースティングツリーを正規化する方法になります(少なくとも理論的には)。

最後に、念のために言っておきますが、学習目標は特定の損失に対応しますが、これは必ずしもeval_metricにリンクされているわけではなく、ユーザーの評価にのみ使用されますか? 多くのeval_metricsを指定できるため。 その場合、 reg:logisticreg:linearmulti:softmaxの損失はどのように異なりますか? (たとえば、回帰の二乗損失または絶対損失、分類の指数損失または逸脱損失?)

ご回答ありがとうございます、
一番、
アリス

最も参考になるコメント

@tqchen gblinearが実際に行っていることについて、もう少し詳しく教えていただけますか? 記事/式への参照は素晴らしいでしょう。

特に、1ラウンドのトレーニング( nrounds=1 )の予測を立てられるようにしたいと思います。 サンプルデータセットは次のとおりです。

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

パラメータ{ booster="gblinear"objective="reg:linear"eta=1subsample=1lambda=0lambda_bias=0を使用して線形回帰モデルとxgboostモデルをトレーニングした後alpha=0 }次の結果が得られます

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

ここで実際に何が起こっているのですか? ありがとう!

全てのコメント12件

単一のラッソ回帰を取り戻すために、gblinearで複数のラウンドを使用する必要があります。

これは、線形モデル(これも線形モデルでした)を積み重ねるのはあまり意味がないためです。 そのため、更新のnum_roundステップを共同で使用して、単一のラッソ問題を解決しました。

eval_metricは目的関数とは何の関係もありません。 損失関数は、parameters.mdに記載されています。ロジスティック回帰の場合はreg: logistic 、2乗損失の場合はreg:linear 、softmaxマルチクラス分類の場合はmuti:softmaxです。

こんにちは、

ご回答ありがとうございます! 1ではなくnum_roundsが大きい場合に、単一のLassoを取得する方法を理解しました。次に、回帰に2乗損失を使用しているという2番目の質問にも答えます。 そして、分類に二項/多項逸脱度を使用していると思います。 _あれは正しいですか?_

回帰の場合、たとえばL1損失またはHuber損失を使用することもできるため(統計学習の要素のセクション10.10.2に示されている一般的な例)、確信が持てませんでした。

ご協力ありがとうございました、
アリス

こんにちは、

回帰モデルにxgboostを適用したいのですが、これは従属変数が連続数値のタイプであることを意味します。 しかし、私は混乱しています。「ラベル」引数で何を提供すればよいですか。 ここで助けてください。

よろしく、
ヴィヴェック

回帰の場合、ラベルは回帰のターゲットです

2015年5月25日月曜日午前8時43分、 VivekAgarwalnotifications @ github.com
書きました:

こんにちは、

回帰モデルにxgboostを適用したい、つまり従属変数
連続数値の一種です。 しかし私は混乱しています、私は何を提供すべきですか
「label」引数で。 ここで助けてください。

よろしく、
ヴィヴェック


このメールに直接返信するか、GitHubで表示してください
https://github.com/dmlc/xgboost/issues/332#issuecomment-105253915

心から、

Tianqi Chen
ワシントン大学コンピュータサイエンス&エンジニアリング

の目的のドキュメントを参照してください
https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
さまざまな目的関数を指定でき、次の意味を見つけることができます
現在のパラメータ

天斉

2015年5月25日月曜日の午前1時47分、 AliceSnotifications @ github.comは次のように書いています。

こんにちは、

ご回答ありがとうございます! 私はあなたがシングルを取り戻す方法を理解しました
1ではなく大きなnum_roundsの後のなげなわ。

損失関数に関しては、それらが何であるかはまだ明確ではありません。
少なくとも回帰のために。 二乗損失、L1損失、または
たとえば、Huber Loss(のセクション10.10.2に記載されている一般的な例
統計学習の要素)。 分類にはあなたが使うと思います
二項/多項逸脱度(指数関数的損失である可能性もあります
古典的なブーストを取り戻す場合)。

ご協力ありがとうございました、
アリス


このメールに直接返信するか、GitHubで表示してください
https://github.com/dmlc/xgboost/issues/332#issuecomment-105170486

心から、

Tianqi Chen
ワシントン大学コンピュータサイエンス&エンジニアリング

ありがとうTianqi、
アリス

従属変数には数値があります。 以下は、回帰ターゲットの最初の6つの観測値です。

head(final_data [1:n.train、 'Dependent'])
[1] 4996 3784 1504 4994 3687 3084

この従属変数をラベルに入れて、以下のコードを実行している場合:

param <-list( "objective" = "reg:linear"、
"num_class" = 9、
"nthread" = 8、
"eta" = 0.08、
「サブサンプル」= 0.8、
「ガンマ」= 1、
"min_child_weight" = 2、
"max_depth" = 12、
"colsample_bytree" = 1
)。
model_xg <-xgboost(param = param、data = final_data [1:n.train、]、label = final_data [1:n.train、 'Dependent']、nrounds = 250)

次に、次のエラーが発生します。

xgb.get.DMatrix(data、label)のエラー:xgboost:データの入力が無効です
さらに:警告メッセージ:
xgb.get.DMatrix(data、label):xgboost:labelは無視されます。

何が間違っているのか教えてください。

@vivekagこれに関する新しい問題を開いてください。 問題を再現するために実行できるコードのスニペット(場合によってはダミーデータを含む)を提供できれば素晴らしいと思います。

final_dataのデータ型がxgboostが期待するものではなかったためだと思います(xgboostは行列またはスパース行列を期待します) @ hetong007

@tqchen gblinearが実際に行っていることについて、もう少し詳しく教えていただけますか? 記事/式への参照は素晴らしいでしょう。

特に、1ラウンドのトレーニング( nrounds=1 )の予測を立てられるようにしたいと思います。 サンプルデータセットは次のとおりです。

> train
        x      y
 1: 13.36  37.54
 2:  5.35  14.54
 3:  0.26  -0.72
 4: 84.16 261.19
 5: 24.67  76.90
 6: 22.26  67.15
 7: 18.02  53.89
 8: 14.29  43.48
 9: 61.66 182.60
10: 57.26 179.44

パラメータ{ booster="gblinear"objective="reg:linear"eta=1subsample=1lambda=0lambda_bias=0を使用して線形回帰モデルとxgboostモデルをトレーニングした後alpha=0 }次の結果が得られます

> test
        x      y Pred.linreg Pred.xgb
 1: 47.75 153.23      146.25    155.7
 2: 12.13  40.05       35.78    107.9
 3: 89.05 274.37      274.34    211.1
 4: 38.87 116.51      118.71    143.8
 5: 27.30  80.61       82.83    128.2
 6: 87.66 267.95      270.02    209.3
 7: 39.33 114.97      120.14    144.4
 8: 64.32 191.73      197.64    177.9
 9: 13.18  48.28       39.04    109.3
10:  8.89  23.30       25.73    103.5

ここで実際に何が起こっているのですか? ありがとう!

xg回帰と他の一般的な回帰の違いは何ですか?
xgboostには他のツリーアルゴリズムとは異なるツリーバージョンがあることを私は知っています。
ソースをハックする必要があると思います。

xgboostでgblinearを使用しているときに、すべての入力特徴の最終的な重みを抽出できますか? 重みを抽出するのに苦労しています。

このページは役に立ちましたか?
0 / 5 - 0 評価