LightGBMの結果は、データの順序によって異なります


8

列数、列名、値がまったく同じ2つのデータセットAとBがあります。唯一の違いは、それらの列の順序です。次に、次の手順で2つのデータセットのそれぞれでLightGBMモデルをトレーニングします

  1. 各データセットをトレーニングとテストに分割します(AとBの両方に同じランダムシードと比率を使用します)
  2. ハイパーパラメータをほぼデフォルトのままにします
  3. ランダムな状態を固定数として設定(再現用)
  4. グリッド検索を使用してlearning_rateを調整する
  5. トレーニングセットでLightGBMモデルをトレーニングし、テストセットでテストする
  6. テストセットで最高のパフォーマンスを持つ学習率が選択されます

2つのデータセットの出力モデルは非常に異なるため、列の順序はLightGBMを使用したモデルトレーニングのパフォーマンスに影響を与えると思います。

これが事実である理由を知っていますか?

回答:


6

考えられる説明はこれです:

列の順序が異なる場合、手順に少し違いがあります。

LightGBM、XGBoost、CatBoostなどは、トレーニングのすべてのステップでデータセットの特徴から異なる列を選択することです。

これらの列の選択はランダムに行われます。たとえば、データセットに20列あるとします。ルートノードは、1番目、3番目、18番目のフィーチャを選択します。両方のデータセットで、1番目、3番目、18番目のフィーチャは、可能な両方のデータセットで異なります。これは繰り返し行われ、すべてのステップでランダム性が最終的な結果に影響を与えます。


アルゴリズムが決定木を構築するために機能のサブセットを選択するとき、そのランダム性をどのように制御できますか?それもまた、この状況に答える唯一の考えでした。さらに、ツリーごとにすべての特徴を常に選択する場合、アルゴリズムはGini(または類似の何か)を使用して各ステップで特徴の重要度を計算しますが、ランダム性は作成されません。
Duy Bui、

lightgbmユーザーは、行と列のサンプリングに使用されるランダムシードを設定できます。
bradS

1
@bradS:私はシードをLightGBMのハイパーパラメーターとして設定しませんでしたが、再度チェックしました。シードはデフォルトで固定数として設定する必要があります。つまり、同じ結果になるはずですが、ここではそうではありません。lightgbm.readthedocs.io/en/latest/Parameters.html
Duy Bui

3

データの順序は理論上重要ではありませんが、実際には重要です。再現性を確保するための措置を講じたことを考えると、データの順序が異なると、トレインテストの分割ロジックが変更されます(両方のケースでトレインセットとテストセットがまったく同じであることが確実でない場合)。データの分割方法は指定しませんが、特定のデータポイントの組み合わせにより、マシンが外れ値に対してより堅牢になり、モデルのパフォーマンスが向上する可能性が高くなります。トレーニングデータとテストデータが両方のケースで同じ場合、おそらく、まだ実行していないシード/再現性の測定(コードの一部)があるかどうかを確認する必要があります。


申し訳ありませんが、そのことを忘れていました。クエリを更新します。同じランダムシードを使用して分割しているため、トレーニングとテストはまったく同じです。
Duy Bui、

@DuyBuiを試すためのいくつかの提案:1)Gpuを使用している場合は、gpu_use_dpをtrueに設定しますFrom:github.com/Microsoft/LightGBM/pull/560#issuecomment-304561654 2)num_threadsを固定数に設定しますMicrosoft / LightGBM / issues / 632 ;
gbdata
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.