こんにちは、
私は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:logistic 、 reg:linear 、 multi:softmaxの損失はどのように異なりますか? (たとえば、回帰の二乗損失または絶対損失、分類の指数損失または逸脱損失?)
ご回答ありがとうございます、
一番、
アリス
単一のラッソ回帰を取り戻すために、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=1
、 subsample=1
、 lambda=0
、 lambda_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を使用しているときに、すべての入力特徴の最終的な重みを抽出できますか? 重みを抽出するのに苦労しています。
最も参考になるコメント
@tqchen gblinearが実際に行っていることについて、もう少し詳しく教えていただけますか? 記事/式への参照は素晴らしいでしょう。
特に、1ラウンドのトレーニング(
nrounds=1
)の予測を立てられるようにしたいと思います。 サンプルデータセットは次のとおりです。パラメータ{
booster="gblinear"
、objective="reg:linear"
、eta=1
、subsample=1
、lambda=0
、lambda_bias=0
を使用して線形回帰モデルとxgboostモデルをトレーニングした後alpha=0
}次の結果が得られますここで実際に何が起こっているのですか? ありがとう!