1. GBDT + LRの概要
前述の協調フィルタリングと行列分解の欠点は、ユーザーとアイテムの間の相互作用情報のみを推奨に使用し、ユーザー自身の特性、アイテム自体の特性、コンテキスト情報などを無視して、より部分的な結果をもたらすことです。 。今回紹介したモデルは、2014年にFacebookが提案したGBDT + LRモデルです。このモデルは、GBDTを使用して特徴のスクリーニングと組み合わせを自動的に実行し、新しい離散特徴ベクトルを生成して、特徴ベクトルをLRの入力として使用します。モデル。最終的な予測結果が生成されます。モデルは、ユーザー、アイテム、およびコンテキストのさまざまな特性を包括的に利用して、CTRクリックスルー率の推定シナリオで広く使用されるより包括的な推奨結果を生成できます。
以下では、最初にロジスティック回帰モデルとGBDTモデルのそれぞれの原理、長所と短所を紹介し、次にGBDT + LRモデルの動作原理と詳細を紹介します。
2.ロジスティック回帰モデル
ロジスティック回帰モデルは非常に重要です。ロジスティック回帰モデルは、推奨フィールドの従来の協調フィルタリングと比較して、ユーザー、アイテム、コンテキストなどのさまざまな機能を包括的に利用して、より「包括的な」推奨結果を生成できます。詳細については、を参照してください。以下にリンクを示します。ここでは、より重要な詳細とそのアプリケーションのいくつかを推奨事項として紹介します。
ロジスティック回帰は、線形回帰に基づいてシグモイド関数(非線形)マッピングを追加し、ロジスティック回帰を優れた分類アルゴリズムにします。ロジスティック回帰モデルを学習するには、最初に1つの文を覚えておく必要があります。ロジスティック回帰は、データがベルヌーに従うことを前提としています。尤度関数を最大化する方法による利益分布。勾配降下を使用してパラメーターを解き、データの2つの分類の目的を達成します。
ロジスティック回帰モデルは、ユーザーのアイテム「類似性」を推奨に使用する協調フィルタリングや行列分解と比較して、問題を分類問題と見なし、陽性サンプルの確率を予測してアイテムをランク付けします。ここでの肯定的なサンプルは、ユーザーが特定の製品を「クリック」したか、特定のビデオを「視聴」したことです。どちらも、レコメンデーションシステムがユーザーに生成することを期待する「肯定的なフィードバック」動作です。したがって、ロジスティック回帰モデルは変換します。クリック率への推奨問題問題を推定します。クリック率予測は典型的な2つのカテゴリであり、ロジスティック回帰に最適です。では、ロジスティック回帰はどのように推奨を行うのでしょうか。プロセスは次のとおりです。
- ユーザーの年齢、性別、アイテムの属性、アイテムの説明、現在の時刻、現在の場所、その他の特性を数値ベクトルに変換します
- クリック率予測を二項分類問題に変換するなど、ロジスティック回帰の最適化目標を決定します。これにより、分類問題で一般的に使用される損失をターゲットとして使用でき、トレーニングモデルを使用できます。
- 予測するときは、モデルに特徴ベクトルを入力して予測を生成し、ユーザーがアイテムを「クリック」する確率を取得します
- クリック確率を使用して候補アイテムを並べ替え、推奨リストを取得します
推論プロセスは、次の図で表すことができます。
ここで重要なのは、各特徴の重みパラメーターwです。通常は勾配降下法を使用します。最初にパラメーターwをランダムに初期化し、次に特徴ベクトル(つまり、上記で数値化した特徴)をモデルに入力します。予測確率モデルののは計算によって得られ、次に各wの勾配は目的関数を導出することによって得られ、次にwが更新されます。
ここでの目的関数は次のとおりです。
J(w)=-1m(m∑i = 1(yilogfw(xi)+(1-yi)log(1-fw(xi)))
導出後の方法は次のようになります。
wj←wj−γ1mm∑i = 1(fw(xi)−yi)xij
このようにして、数回の反復の後、最終的なwを取得できます。これらの式の導出については、以下の記事のリンクを参照してください。ロジスティック回帰モデルの長所と短所を分析してみましょう。
利点:
- LRモデルは、単純な形式と優れた解釈可能性を備えています。特徴の重みから、最終結果に対するさまざまな特徴の影響を確認できます。
- トレーニング中の並列化は簡単です。予測時には特徴の線形重み付けのみが必要です。したがって、パフォーマンスが向上し、大規模なid特徴の処理に適していることがよくあります。id特徴を使用することには、情報を防ぐという非常に重要な利点があります。損失(正規化CTR機能と比較して)、ヘッドリソースのより詳細な説明があります
- 小さなリソース使用量、特にメモリ。実際のエンジニアリングアプリケーションでは、比較的大きな重みを持つフィーチャとそれに対応するフィーチャの重みのみを保存する必要があります。
- 出力結果を調整すると便利です。ロジスティック回帰では、最終的な分類結果を簡単に取得できます。出力は各サンプルの確率スコアであるため、これらの確率スコア、つまり分割しきい値を簡単にカットオフできます(特定のしきい値より大きいしきい値はカテゴリであり、A未満です)。特定のしきい値は1つのカテゴリです)
もちろん、ロジスティック回帰モデルにも特定の制限があります
- 表現力が弱く、特徴クロスオーバーや特徴選択などの一連の「高度な」操作はできません(これらの作業は手動で行う必要があるため、ある程度の経験が必要です。そうしないと、多少の回り道が必要になります)、情報の損失を引き起こす可能性があります
- 正解率はそれほど高くありません。これは線形モデルとS状結腸であるため、形式は非常に単純であり(線形モデルに非常に似ています)、データの実際の分布を適合させることは困難です。
- 非線形データの処理はもっと面倒です。ロジスティック回帰は、他の方法を導入せずに線形分離可能データのみを処理できます。非線形性を処理する場合は、上記のように、最初に連続特徴を離散化する必要があります(離散化の目的は非線形性を導入することです)。 、バケットの手動による方法では、複数の問題が発生します。
- LRには、人工的な機能の組み合わせが必要です。これには、迂回を回避するために、開発者が非常に豊富なフィールド経験を持っている必要があります。このようなモデルは移行がより難しく、フィールドを変更するには多くの機能エンジニアリングが必要です。
したがって、効果的な機能と機能の組み合わせを自動的に見つけ、手動の経験の不足を補い、LR機能の実験サイクルを短縮する方法は、解決する必要のある緊急の問題であり、GBDTモデルは機能を自動的に検出して効果的な組み合わせを作成できます
3.GBDTモデル
GBDTはGradientBoosting Decision Treeの略で、従来の機械学習アルゴリズムの中で、実際の分布を適合させるための最良のアルゴリズムの1つです。過去数年間でディープラーニングが普及する前は、gbdtはさまざまなコンテストで優れていました。おそらくいくつかの理由がありますが、1つは効果が本当に良いということです。2つ目は、分類と回帰に使用できることです。第三に、特徴をフィルタリングできるため、このモデルは依然として非常に重要なモデルです。
GBDTは、加法モデル(つまり、基底関数の線形結合)を使用してデータを分類または回帰し、トレーニングプロセス中に生成されるエラーを継続的に削減するアルゴリズムです。トレーニングプロセスは次のとおりです。
gbdtは複数回の反復を経て、各反復は弱い分類器を生成します。各分類器は、前の回の分類器の残余に基づいてトレーニングされます。弱い分類器に対するgbdtの要件は、一般に十分に単純で、分散が低く、バイアスが高くなっています。トレーニングプロセスは、バイアスを減らすことによって最終分類器の精度を継続的に改善することであるためです。上記の高い偏差と単純な要件のため、各分類回帰ツリーの深さはそれほど深くありません。最終的な合計分類器は、トレーニングの各ラウンドで取得された弱い分類器(つまり、加法モデル)の加重和によって取得されます。
GBDTの詳細については、以下のリンクを参照してください。GBDTが二項分類をどのように実行するかを分析したいのは、gbdtトレーニングの各ラウンドが前のラウンドのトレーニングの残差に基づいており、ここでの残差が現在のモデルを参照していることを明確にする必要があるためです。この負の勾配値各反復で、弱い分類器の出力の減算が意味を持つ必要があり、gbdtは常に分類または回帰に使用されるCART回帰ツリーであるため、回帰ツリーであるため、二項分類問題はどのように実行されますか?
バイナリ分類問題と回帰問題を解決するためのGBDTの本質は同じです。決定木を継続的に構築することにより、予測結果を段階的に目標値に近づけます。ただし、バイナリ分類の損失関数は問題と回帰問題は異なります。回帰問題におけるGBDTのツリー生成プロセスに関して、損失関数と反復原理は与えられたリンクを参照できます。回帰問題では、二乗損失が一般的に使用されますが、バイナリ分類問題では、GBDTはロジスティック回帰と同じです。以下が使用されます。
L = argmin [n∑i−(yilog(pi)+(1-yi)log(1-pi))]
このうち、yiはi番目のサンプルの観測値、値は0または1、piはi番目のサンプルの予測値、値は0-1の間の確率です。 GBDTフィッティング残差は現在のモデルの負の勾配であるため、このモデルの導関数、つまりdLdpiを求める必要があります。特定のサンプルについては、導関数を取得し、プラス記号を削除した場合にのみ、それ自体を考慮することができます。次に、dldpiになります。ここで、lは次のとおりです。
l = -yilog(pi)-(1-yi)log(1-pi)=-yilog(pi)-log(1-pi)+ yilog(1-pi)=-yi(log(pi1-pi)) −log(1−pi)
ロジスティック回帰に精通している場合、(log(pi1-pi))は不慣れであってはなりません。これは確率比の対数であり、ロジスティック回帰では、この式はθXに等しいため、piが導入されます= 11 + e−θXその形。ここで、ηi= pi1-pi、つまりpi =ηi1+ηiとすると、上記の式は次のようになります。
l = -yilog(ηi)-log(1-elog(ηi)1 + elog(ηi))=-yilog(ηi)-log(11 + elog(ηi))=-yilog(ηi)+ log(1+ elog(ηi))
このとき、log(ηi)の導関数を取ります。
dldlog(ηi)=-yi + elog(ηi)1 + elog(ηi)=-yi + pi
このようにして、現在のモデルの特定のトレーニングサンプルの勾配値を取得すると、残余はyi-piになります。GBDT二項分類の考え方は、実際にはロジスティック回帰の考え方と同じです。ロジスティック回帰では、線形モデルを使用して、このイベントの対数確率に適合させますP(y = 1 | x)logp1-p =θTx** 、GBDT 2つの分類についても同じことが言えます。一連の勾配ブースティングツリーを使用してこの対数確率に適合させると、分類モデルは次のように表すことができます。
P(Y = 1∣x)= 11 + e−FM(x)
GBDTの生成プロセスを詳しく見てみましょう。分類されたGBDTを構築するには2つのステップがあります。
- GBDTの初期化は、
回帰問題と同じです。分類GBDTの初期状態には、次のように、すべてのサンプルの初期予測値であるリーフノードが1つだけあります。
F0(x)= argminγn∑i = 1L(y、γ)
上記の式で、FはGBDTモデルを表し、F0はモデルの初期状態です。この式は、すべてのサンプルの損失を最小化するためのγを見つけることを意味します。以下では、γはノードの出力、つまり、リーフノード、そしてそれはlog(ηi)の形式の値(回帰値)です。初期状態では、γ= F0です。
例を見てみましょう(例は以下の2番目のリンクからのものです)。次の3つのサンプルがあるとします。
「ポップコーンのように」、「年齢」、「色の好み」の3つの機能を通じて、特定のサンプルが映画を見るのが好きかどうかを予測できるGBDT分類ツリーを構築したいと考えています。データを上記の式に代入して、損失を見つけます。
損失= L(1、γ)+ L(1、γ)+ L(0、γ)
それを最小化するために、導関数を取り、導関数を0とすると、次のようになります。
損失= p-1 + p-1 + p = 0
したがって、初期値p = 23 = 0.67、γ= log(p1-p)= 0.69、モデルの初期状態F0(x)= 0.69
-
決定木を再帰的に生成します
。回帰ツリーを生成する手順を思い出してください。実際には、4つの小さな手順があります。最初の手順は、負の勾配値を計算して残余を取得することです。2番目の手順は、残余を回帰ツリーに適合させることです。 3番目のステップはリーフノードを計算することです。出力値、4番目のステップはモデルを更新することです。一つずつ見てみましょう:-
負の勾配を計算して残余を取得します
rim = − [∂L(yi、F(xi))∂F(xi)] F(x)= Fm−1(x)
ここでは、m-1ツリーモデルを使用して、各サンプルの残余リムを計算します。これは、上記のyi-piであるため、この例では、各サンプルの残余は次のようになります。
-
回帰ツリーを使用してリムをフィットさせます。ここで、iはサンプルを表します。回帰ツリーの確立プロセスについては、以下のリンク記事を参照してください。簡単に言えば、各機能を繰り返し、各機能の下の各値をトラバースし、分割後に2つを計算します。グループデータの二乗損失については、最小のパーティションノードを見つけます。次のように2番目の決定木を生成する場合:
-
各リーフノードjについて、最適な残差フィッティング値を計算します
γjm= argminγ∑x∈RijL(yi、Fm-1(xi)+γ)
これは、新しく構築されたツリーmで、各ノードjの出力γjmを見つけることでそのノードの損失を最小限に抑えることができることを意味します。次に、ここで非常に賢いγの解を見てみましょう。まず、損失関数を記述します。左側の最初のサンプルでは、次のようになります。
L(y1、Fm − 1(x1)+γ)= --y1(Fm − 1(x1)+γ)+ log(1 + eFm − 1(x1)+γ)
分類に回帰ツリーを使用する必要があるため、この式は上記で導出されたlです。したがって、ここでは、分類の予測確率が対数確率回帰形式、つまりモデルの回帰出力値であるlog(ηi)に変換されます。 。そして、この損失の最小値を見つけたら、損失を最小化するγを導出して解く必要があります。しかし、上記の式の導出は非常に面倒なので、2次のテイラー式を使用して式を近似し、導出する手法を次に示します。偉大なテイラーを覚えていますか?
f(x +Δx)≈f(x)+Δxf '(x)+12Δx2f' '(x)+ O(Δx)
これは、L(y1、Fm-1(x1))を定数f(x)、γを変数Δxとし、f(x)を2次に展開することと同じです。
L(y1、Fm-1(x1)+γ)≈L(y1、Fm-1(x1))+ L '(y1、Fm-1(x1))γ+ 12L' '(y1、Fm-1( x1))γ2
現時点では、デリバティブを求めるのは簡単です
dLdγ= L '(y1、Fm-1(x1))+ L' '(y1、Fm-1(x1))γ
Lossが最小の場合、上記の式は0に等しく、γを取得できます。
γ11= -L '(y1、Fm-1(x1))L' '(y1、Fm-1(x1))
分子は残余(上記で見つかった)であるため、分母は残余から導出して、元の損失関数の2次導関数を取得できます。
L ''(y1、F(x))= dL'dlog(η1)= ddlog(η1)[-yi + elog(η1)1 + elog(η1)] = ddlog(η1)[elog(η1)(1 + elog(η1))-1] = elog(η1)(1 + elog(η1))-1-e2log(η1)(1 + elog(η1))-2 = elog(η1)(1 + elog(η1 ))2 =η1(1 +η1)1(1 +η1)= p1(1-p1)
このとき、ノードの出力を計算できます。
γ11= r11p10(1-p10)= 0.330.67×0.33 = 1.49
ここで、下のγjmは、m番目のツリーのj番目のリーフノードを表します。次は、サンプル2とサンプル3を含む右側のノードの出力です。これらも、2次のテイラー式を使用して展開されます。
L(y2、Fm-1(x2)+γ)+ L(y3、Fm-1(x3)+γ)≈L(y2、Fm-1(x2))+ L '(y2、Fm-1(x2 ))γ+ 12L ''(y2、Fm-1(x2))γ2+ L(y3、Fm-1(x3))+ L '(y3、Fm-1(x3))γ+ 12L' '(y3 、Fm-1(x3))γ2
派生を取得し、結果を0に設定すると、最初のツリーの2番目のリーフノードの出力が得られます。
γ21= -L '(y2、Fm-1(x2))-L'(y3、Fm-1(x3))L ''(y2、Fm-1(x2))+ L ''(y3、Fm- 1(x3))= r21 + r31p20(1-p20)+ p30(1-p30)= 0.33-0.670.67×0.33 + 0.67×0.33 = -0.77
どのリーフノードでも、その出力値を直接計算できることがわかります。
γjm= ∑Riji = 1rim∑Riji = 1pi、m-1(1-pi、m-1)
- モデルFm(x)を更新します
Fm(x)= Fm-1(x)+ νJm∑j =1γm
このように、複数のループ反復を通じて、比較的強力な学習者Fm(x)を取得できます。
-
GBDTの長所と短所を分析してみましょう。
ツリー生成プロセスは、多次元の特徴の組み合わせを自動的に実行するプロセスとして理解できます。ルートノードからリーフノードまでのパス全体(複数の特徴値の判断)により、最終的にツリーの予測値を決定できます。連続フィーチャの処理では、GBDTは重要なしきい値を分割できます。たとえば、0.027より大きい場合は左側のサブツリーに移動し、0.027(またはデフォルト値)以下の場合は右側のサブツリーに移動します。手動の離散化の問題を回避するために。このようにして、ロジスティック回帰で機能を自動的に検出し、効果的な組み合わせを作成するという問題を非常に簡単に解決できます。これは、GBDTの利点でもあります。
ただし、GBDTにもいくつかの制限があります。多数のIDフィーチャの場合、ツリーの深さとツリーの制限(過剰適合を防ぐため)のためにGBDTを効果的に保存できません。さらに、大規模なパフォーマンスのボトルネックが発生します。機能の数。1つのホット機能が100,000次元を超える場合は、メモリがバーストしないように分散トレーニングを実行する必要があります。そのため、GBDTは通常、少量のフィードバックCTR機能で表現されます。ある程度の正規化機能はありますが、情報が失われ、ヘッドリソースを効果的に表現できません。
したがって、GBDTとLRの長所と短所は互いに補完し合うことができることがわかりました。
4. GBDT + LRモデル
2014年、Facebookは、GBDTを使用して特徴のスクリーニングと組み合わせを自動的に実行し、新しい離散特徴ベクトルを生成し、その特徴ベクトルをLRモデルの入力として使用して最終的な予測結果を生成する方法を提案しました。これは有名なGBDT + LRモデル。GBDT + LRで最も広く使用されているシナリオは、CTRクリック率の見積もりです。つまり、ユーザーにプッシュされた広告がユーザーによってクリックされるかどうかを予測します。
上記の伏線を使用すると、このモデルの説明が簡単になります。モデルの全体的な構造は次のとおりです。
トレーニング中、GBDT構築のプロセスは、自動機能の組み合わせと離散化に相当します。ルートノードからリーフノードへのパスは、さまざまな機能の機能の組み合わせと見なすことができ、リーフノードはこれを一意に表すことができます。二次トレーニングの離散機能としてLRに渡されます。
たとえば、上の図では、2つのツリーがあり、xは入力サンプルです。2つのツリーをトラバースした後、xサンプルは2つのツリーのリーフノードに分類されます。各リーフノードは、LRの1次元特徴に対応します。次に、ツリーをトラバースすることにより、サンプルに対応するすべてのLR特徴が取得されます。構築された新しい特徴ベクトルは、値0/1を取ります。たとえば、左側のツリーには3つのリーフノードがあり、右側のツリーには2つのリーフノードがあります。最後の特徴は5次元のベクトルです。入力xについて、彼が左側のツリーの2番目のノードであるコード[0,1,0]に該当し、右側のツリーの2番目のノードであるコード[0,1]に該当するとすると、全体のコードは[ 0,1、0,0,1]、このタイプのコードは特徴として使用され、分類のために線形分類モデル(LRまたはFM)に入力されます。
予測する場合、GBDTの各ツリーを最初にウォークして、特定のリーフノードに対応する離散特徴(つまり、特徴の組み合わせのセット)を取得し、次に、線形加重予測のために特徴をワンホット形式でLRに渡します。
このスキームは比較的単純である必要があります。理解する必要のあるいくつかの重要なポイントがあります。
- GBDTによる特徴の組み合わせ後に取得された離散ベクトルは、この離散特徴だけでなく、トレーニングデータの元の特徴とのロジスティック回帰の入力として使用されます。
- 樹木を構築する場合、アンサンブルを使用して樹木を構築する理由は、1つの樹木の表現力が非常に弱く、複数の特徴的な特徴の組み合わせを表現するには不十分であり、複数の樹木の表現力が強いためです。GBDTの各ツリーは、前のツリーの残りの欠点と、可能な限り多くの反復で生成されるツリーの数を学習しています。
- RFも複数のツリーですが、実際にはGBDTほど効果的ではないことが証明されています。GBDTの前のツリーでは、特徴の分割は主にほとんどのサンプルの特徴的な特性を反映しています。後ろのツリーは主に、最初のNツリーの後で残差がまだ大きいいくつかのサンプルを反映しています。全体として区別できる特徴を選択してから、少数のサンプルで区別できる特徴を選択する方が合理的です。これがGBDTを使用する理由でもあります。
- CRT推定では、GBDTは通常2種類のツリーを構築します(1つは非ID機能用、もう1つはID機能用)。ADおよびID機能はCTR推定において非常に重要な機能です。ADを直接追加します。ID機能としてツリーを構築することはできません。実行可能であるため、ADとIDごとにGBDTツリーを構築することを検討してください。
- 非IDツリー:きめ細かいIDでツリーを構築しないでください。このタイプのツリーがベースとして使用されます。露出が少ない広告や広告主であっても、このタイプのツリーを通じて優れた機能と機能の組み合わせを取得できます。
- IDクラスツリー:きめ細かいIDを使用してツリーのクラスを構築します。これは、完全に公開されたIDに対応する特徴的な機能と機能の組み合わせを検出するために使用されます。
5.プログラミングの練習
データソース2のkaggleでのctr予測コンペティションを通じて、GBDT + LRモデルパーツのプログラミング手法を見てみましょう。
上記のモデルアーキテクチャを確認しましょう。1つ目はGBDTモデルをトレーニングすることです。GBDTの実装では通常、xgboostまたはlightgbmを使用できます。GBDTモデルをトレーニングした後、各サンプルがどのツリーにあるノードを予測する必要があります。その後、ワンホットでいくつかの新しい個別の特徴を取得し、元の特徴と組み合わせて新しいデータセットを形成し、入力として使用します。ロジスティック回帰の結果を取得し、最終的にロジスティック回帰モデルを介して結果を取得します。
上記の手順に従って、コードがどのように実装されているかを見てみましょう。
データx_train、y_trainをすでに処理したとします。
-
GBDTモデルのトレーニング
XGBOOST、lightgbmなどを介してGBDTモデルを構築できます。といった:
gbm = lgb.LGBMRegressor(objective='binary', subsample= 0.8, min_child_weight= 0.5, colsample_bytree= 0.7, num_leaves=100, max_depth = 12, learning_rate=0.05, n_estimators=10, ) gbm.fit(x_train, y_train, eval_set = [(x_train, y_train), (x_val, y_val)], eval_names = ['train', 'val'], eval_metric = 'binary_logloss', # early_stopping_rounds = 100, )
-
特徴変換と新しいデータセットの構築
上記により、gbdtモデルを確立しました。これは、gbdt予測結果ではなく、特定の予測であるため、後続の離散特徴構築の準備として、サンプルがどのツリーのどのリーフノードに分類されるかを予測するために使用します。各ツリーのトレーニングデータの場所には、次のステートメントが必要です。
model = gbm.booster_ # 获取到建立的树 # 每个样本落在每个树的位置 , 下面两个是矩阵 (样本个数, 树的棵树) , 每一个数字代表某个样本落在了某个数的哪个叶子节点 gbdt_feats_train = model.predict(train, pred_leaf = True) gbdt_feats_test = model.predict(test, pred_leaf = True) # 把上面的矩阵转成新的样本-特征的形式, 与原有的数据集合并 gbdt_feats_name = ['gbdt_leaf_' + str(i) for i in range(gbdt_feats_train.shape[1])] df_train_gbdt_feats = pd.DataFrame(gbdt_feats_train, columns = gbdt_feats_name) df_test_gbdt_feats = pd.DataFrame(gbdt_feats_test, columns = gbdt_feats_name) # 构造新数据集 train = pd.concat([train, df_train_gbdt_feats], axis = 1) test = pd.concat([test, df_test_gbdt_feats], axis = 1) train_len = train.shape[0] data = pd.concat([train, test])
-
離散特徴のワンホットエンコーディングとデータセットの分割
# 新数据的新特征进行读入编码 for col in gbdt_feats_name: onehot_feats = pd.get_dummies(data[col], prefix = col) data.drop([col], axis = 1, inplace = True) data = pd.concat([data, onehot_feats], axis = 1) # 划分数据集 train = data[: train_len] test = data[train_len:] x_train, x_val, y_train, y_val = train_test_split(train, target, test_size = 0.3, random_state = 2018)
-
ロジスティック回帰モデルをトレーニングして、最終的な予測を行います
# 训练逻辑回归模型 lr = LogisticRegression() lr.fit(x_train, y_train) tr_logloss = log_loss(y_train, lr.predict_proba(x_train)[:, 1]) print('tr-logloss: ', tr_logloss) val_logloss = log_loss(y_val, lr.predict_proba(x_val)[:, 1]) print('val-logloss: ', val_logloss) # 预测 y_pred = lr.predict_proba(test)[:, 1]
上記のGBDT + LRモデルの基本的なトレーニング手順を完了しました。具体的で詳細なコードは、リンクを参照できます。