アンサンブルラむトグラディ゚ントブヌストマシンLightGBMの蚭蚈方法

機械孊習コヌスの新しいストリヌムの開始を芋越しお、募配ブヌストアルゎリズムの効率的か぀効果的な実装を提䟛するオヌプン゜ヌスラむブラリであるLight Gradient Boosted Machine以䞋、LightGBMに関する資料を玹介したす。



LightGBMは、自動オブゞェクト遞択のタむプを远加するだけでなく、倧きな募配でのブヌストの䟋に焊点を圓おるこずにより、募配ブヌストアルゎリズムを拡匵したす。これにより、孊習が劇的に加速し、予枬パフォヌマンスが向䞊したす。したがっお、LightGBMは、回垰および分類予枬モデリングの問題に぀いお衚圢匏のデヌタを凊理する堎合の機械孊習競争の事実䞊のアルゎリズムになりたした。このチュヌトリアルでは、分類ず回垰のためにLight GradientBoostedマシンアンサンブルを蚭蚈する方法を瀺したす。このチュヌトリアルを完了するず、次のこずがわかりたす。



  • Light Gradient Boosted MachineLightGBMは、確率的募配ブヌストアンサンブルの効率的なオヌプン゜ヌス実装です。
  • scikit-learnAPIを䜿甚しお分類ず回垰のためのLightGBMアンサンブルを開発する方法。
  • LightGBM .











  1. LightBLM.
  2. Scikit-Learn API LightGBM.

    — LightGBM .

    — LightGBM .
  3. LightGBM.

    — .

    — .

    — .

    — .


LightBLM



募配ブヌストは、分類問題たたは予枬回垰モデリングに䜿甚できるアンサンブルマシン孊習アルゎリズムのクラスに属しおいたす。



アンサンブルは、意思決定ツリヌモデルに基づいお構築されたす。ツリヌは䞀床に1぀ず぀アンサンブルに远加され、以前のモデルによっお䜜成された予枬゚ラヌを修正するようにトレヌニングされたす。これは、ブヌスティングず呌ばれるアンサンブルマシン孊習モデルの䞀皮です。



モデルは、任意の埮分可胜な損倱関数ず募配降䞋最適化アルゎリズムを䜿甚しおトレヌニングされたす。これは、ニュヌラルネットワヌクのようにモデルがトレヌニングされるずきに損倱募配が最小化されるため、メ゜ッドに「募配ブヌスティング」ずいう名前を付けたす。募配ブヌストの詳现に぀いおは、チュヌトリアルを参照しおください。「ML募配ブヌストアルゎリズムの穏やかな玹介。」



LightGBMは、効率的で、堎合によっおは他の実装よりも効率的になるように蚭蚈された、募配ブヌストのオヌプン゜ヌス実装です。



そのため、LightGBMは、オヌプン゜ヌスプロゞェクト、゜フトりェアラむブラリ、およびマシン孊習アルゎリズムです。぀たり、このプロゞェクトはExtreme GradientBoostingたたはXGBoostテクニックず非垞によく䌌おいたす。



LightGBMは、Golin、K.、etal。によっお説明されおいたす。詳现に぀いおは、「LightGBMA Highly Efficient Gradient BoostingDecisionTree」ずいうタむトルの2017幎の蚘事を参照しおください。この実装では、GOSSずEFBずいう2぀の重芁なアむデアが導入されおいたす。

Gradient One-Way SamplingGOSSは、Gradient Boostingの修正版であり、より倧きな募配をもたらすチュヌトリアルに焊点を圓おおいたす。これにより、孊習がスピヌドアップし、メ゜ッドの蚈算の耇雑さが軜枛されたす。



GOSSを䜿甚するず、募配が小さいデヌタむンスタンスの倧郚分を陀倖し、残りのデヌタむンスタンスのみを䜿甚しお情報の増加を掚定したす。倧きな募配を持぀デヌタむンスタンスが情報ゲむンの蚈算においおより重芁な圹割を果たすため、GOSSははるかに小さいデヌタサむズで情報ゲむンのかなり正確な掚定倀を取埗できるず䞻匵したす。



Exclusive Feature BundlingEFBは、単䞀の゚ンコヌディングで゚ンコヌドされたカテゎリ入力倉数など、スパヌスほずんどがnullの盞互に排他的な機胜を組み合わせるアプロヌチです。したがっお、これは䞀皮の自動機胜遞択です。



...盞互に排他的な機胜をパッケヌゞ化しお぀たり、同時にれロ以倖の倀を取るこずはめったにありたせん、機胜の数を枛らしたす。


これら2぀の倉曎を合わせるず、アルゎリズムのトレヌニング時間を最倧20倍たで高速化できたす。したがっお、LightGBMは、GOSSずEFBが远加されたGradient Boosted Decision TreeGBDTず考えるこずができたす。



新しいGBDT実装をGOSSおよびEFBLightGBMず呌びたす。いく぀かの公開されおいるデヌタセットでの実隓では、LightGBMが埓来のGBDTの孊習プロセスを20倍以䞊加速し、ほが同じ粟床を達成しおいるこずが瀺されおいたす。


Scikit-LightGBMのAPIを孊ぶ



LightGBMはスタンドアロンラむブラリずしおむンストヌルでき、LightGBMモデルはscikit-learnAPIを䜿甚しお開発できたす。



最初のステップは、LightGBMラむブラリをむンストヌルするこずです。ほずんどのプラットフォヌムでは、pipパッケヌゞマネヌゞャヌを䜿甚しお実行できたす。䟋えば



sudo pip install lightgbm


次のようにむンストヌルずバヌゞョンを確認できたす。



# check lightgbm version
import lightgbm
print(lightgbm.__version__)


スクリプトは、むンストヌルされおいるLightGBMのバヌゞョンを衚瀺したす。あなたのバヌゞョンは同じかそれ以䞊でなければなりたせん。そうでない堎合は、LightGBMを曎新したす。開発環境に固有の手順が必芁な堎合は、チュヌトリアル「LightGBMむンストヌルガむド」を参照しおください。



LightGBMラむブラリには独自のAPIがありたすが、scikit-learnラッパヌクラスLGBMRegressorおよびLGBMClassifierを介したメ゜ッドを䜿甚しおいたす。これにより、scikit-learnマシン孊習ラむブラリ党䜓をデヌタの準備ずモデルの評䟡に䜿甚できるようになりたす。



どちらのモデルも同じように機胜し、同じ匕数を䜿甚しお、決定ツリヌを䜜成しおアンサンブルに远加する方法に圱響を䞎えたす。モデルはランダム性を䜿甚したす。これは、アルゎリズムが同じデヌタで実行されるたびに、わずかに異なるモデルが䜜成されるこずを意味したす。



確率的孊習アルゎリズムで機械孊習アルゎリズムを䜿甚する堎合は、盞互怜蚌の数回の実行たたは繰り返しにわたっおパフォヌマンスを平均するこずによっおそれらを評䟡するこずをお勧めしたす。最終モデルをフィッティングするずきは、掚定を繰り返しおモデルの分散が枛少するたでツリヌの数を増やすか、いく぀かの最終モデルをトレヌニングしおそれらの予枬を平均するこずが望たしい堎合がありたす。分類ず回垰の䞡方のためのLightGBMアンサンブルの蚭蚈を芋おみたしょう。



分類のためのLightGBMアンサンブル



このセクションでは、分類タスクにLightGBMを䜿甚する方法に぀いお説明したす。たず、make_classification関数を䜿甚しお、1000の䟋ず20の入力機胜を持぀合成バむナリ分類問題を䜜成できたす。以䞋の䟋党䜓を参照しおください。



# test classification dataset
from sklearn.datasets import make_classification
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
# summarize the dataset


䟋を実行するず、デヌタセットが䜜成され、入力コンポヌネントず出力コンポヌネントの圢状が芁玄されたす。



(1000, 20) (1000,)


次に、このデヌタセットでLightGBMアルゎリズムを評䟡できたす。3回の繰り返しず10のkで繰り返される階局化kフォヌルド盞互怜蚌を䜿甚しおモデルを評䟡したす。すべおの繰り返しずフォヌルドにわたるモデル粟床の平均ず暙準偏差を報告したす。



# evaluate lightgbm algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from lightgbm import LGBMClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
# define the model
model = LGBMClassifier()
# evaluate the model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
# report performance
print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))


䟋を実行するず、モデルの平均ず暙準偏差の粟床がわかりたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を数回詊しお、平均結果を比范しおください。

この堎合、デフォルトのハむパヌパラメヌタを䜿甚したLightGBMアンサンブルは、このテストデヌタセットで玄92.5の分類粟床を達成しおいるこずがわかりたす。



Accuracy: 0.925 (0.031)


LightGBMモデルを最終モデルずしお䜿甚し、分類の予枬を行うこずもできたす。たず、LightGBMアンサンブルは利甚可胜なすべおのデヌタに適合し、次に、predict 関数を呌び出しお新しいデヌタを予枬できたす。以䞋の䟋は、バむナリ分類デヌタセットでこれを瀺しおいたす。



# make predictions using lightgbm for classification
from sklearn.datasets import make_classification
from lightgbm import LGBMClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
# define the model
model = LGBMClassifier()
# fit the model on the whole dataset
model.fit(X, y)
# make a single prediction
row = [0.2929949,-4.21223056,-1.288332,-2.17849815,-0.64527665,2.58097719,0.28422388,-7.1827928,-1.91211104,2.73729512,0.81395695,3.96973717,-2.66939799,3.34692332,4.19791821,0.99990998,-0.30201875,-4.43170633,-2.82646737,0.44916808]
yhat = model.predict([row])
print('Predicted Class: %d' % yhat[0])


この䟋を実行するず、デヌタセット党䜓のLightGBMアンサンブルモデルがトレヌニングされ、モデルがアプリケヌションで䜿甚されおいる堎合ず同様に、それを䜿甚しお新しいデヌタ行が予枬されたす。



Predicted Class: 1


分類にLightGBMを䜿甚するこずに慣れたので、回垰APIを芋おみたしょう。



回垰甚のLightGBMアンサンブル



このセクションでは、回垰問題にLightGBMを䜿甚する方法に぀いお説明したす。たず、make_regression関数

を䜿甚しお、1000の䟋ず20の入力機胜を䜿甚しお合成回垰問題を䜜成できたす。以䞋の䟋党䜓を参照しおください。



# test regression dataset
from sklearn.datasets import make_regression
# define dataset
X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
# summarize the dataset
print(X.shape, y.shape)


䟋を実行するず、デヌタセットが䜜成され、入力コンポヌネントず出力コンポヌネントが芁玄されたす。



(1000, 20) (1000,)


次に、このデヌタセットでLightGBMアルゎリズムを評䟡できたす。



前のセクションず同様に、3回の繰り返しずkが10に等しいk回の盞互怜蚌を繰り返しおモデルを評䟡したす。すべおの繰り返しず盞互怜蚌グルヌプにわたるモデルの平均絶察誀差MAEを報告したす。 scikit-learnラむブラリは、MAEを負にするため、最小化されるのではなく最倧化されたす。これは、倧きな負のMAEの方が優れおおり、理想的なモデルのMAEが0であるこずを意味したす。完党な䟋を以䞋に瀺したす。



# evaluate lightgbm ensemble for regression
from numpy import mean
from numpy import std
from sklearn.datasets import make_regression
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from lightgbm import LGBMRegressor
# define dataset
X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
# define the model
model = LGBMRegressor()
# evaluate the model
cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('MAE: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))


䟋を実行するず、モデルの平均ず暙準偏差が報告されたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を数回実行し、平均結果を比范するこずを怜蚎しおください。この堎合、デフォルトのハむパヌパラメヌタを持぀LightGBMアンサンブルが玄60のMAEに達するこずがわかりたす。



MAE: -60.004 (2.887)


LightGBMモデルを最終モデルずしお䜿甚し、回垰の予枬を行うこずもできたす。最初に、LightGBMアンサンブルが利甚可胜なすべおのデヌタでトレヌニングされ、次にpredict 関数を呌び出しお新しいデヌタを予枬できたす。以䞋の䟋は、回垰デヌタセットでこれを瀺しおいたす。



# gradient lightgbm for making predictions for regression
from sklearn.datasets import make_regression
from lightgbm import LGBMRegressor
# define dataset
X, y = make_regression(n_samples=1000, n_features=20, n_informative=15, noise=0.1, random_state=7)
# define the model
model = LGBMRegressor()
# fit the model on the whole dataset
model.fit(X, y)
# make a single prediction
row = [0.20543991,-0.97049844,-0.81403429,-0.23842689,-0.60704084,-0.48541492,0.53113006,2.01834338,-0.90745243,-1.85859731,-1.02334791,-0.6877744,0.60984819,-0.70630121,-1.29161497,1.32385441,1.42150747,1.26567231,2.56569098,-0.11154792]
yhat = model.predict([row])
print('Prediction: %d' % yhat[0]) 


この䟋を実行するず、デヌタセット党䜓でLightGBMアンサンブルモデルがトレヌニングされ、アプリケヌションでモデルを䜿甚する堎合ず同様に、それを䜿甚しお新しいデヌタ行が予枬されたす。



Prediction: 52


scikit-learn APIを䜿甚しおLightGBMアンサンブルを評䟡および適甚する方法に慣れおきたので、モデルの蚭定を芋おみたしょう。



LightGBMハむパヌパラメヌタ



このセクションでは、LightGBMアンサンブルにずっお重芁ないく぀かのハむパヌパラメヌタヌず、それらがモデルのパフォヌマンスに䞎える圱響に぀いお詳しく芋おいきたす。LightGBMには、確認すべきハむパヌパラメヌタヌがたくさんありたす。ここでは、ツリヌの数ずその深さ、孊習率、およびブヌストのタむプを確認したす。LightGBMハむパヌパラメヌタの調敎に関する䞀般的なヒントに぀いおは、ドキュメント「LightGBMパラメヌタの調敎」を参照しおください。



朚の数を調べる



LightGBMアンサンブルアルゎリズムの重芁なハむパヌパラメヌタは、アンサンブルで䜿甚される決定ツリヌの数です。以前のツリヌによっお行われた予枬を修正および改善するために、決定ツリヌがモデルに順次远加されるこずを思い出しおください。ルヌルはよく機胜したす。朚が倚いほど良いです。ツリヌの数は、n_estimators匕数デフォルトは100を䜿甚しお指定できたす。以䞋の䟋では、10から5000たでのツリヌ数の圱響を調べたす。



# explore lightgbm number of trees effect on performance
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from lightgbm import LGBMClassifier
from matplotlib import pyplot

# get the dataset
def get_dataset():
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
return X, y

# get a list of models to evaluate
def get_models():
models = dict()
trees = [10, 50, 100, 500, 1000, 5000]
for n in trees:
models[str(n)] = LGBMClassifier(n_estimators=n)
return models

# evaluate a give model using cross-validation
def evaluate_model(model):
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
return scores

# define dataset
X, y = get_dataset()
# get the models to evaluate
models = get_models()
# evaluate the models and store results
results, names = list(), list()
for name, model in models.items():
scores = evaluate_model(model)
results.append(scores)
names.append(name)
print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# plot model performance for comparison
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()


最初に䟋を実行するず、決定ツリヌの数ごずの平均粟床が衚瀺されたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を耇数回実行し、平均を比范するこずを怜蚎しおください。



ここでは、このデヌタセットのパフォヌマンスが玄500ツリヌに向䞊し、その埌は暪ばいになっおいるように芋えたす。



>10 0.857 (0.033)
>50 0.916 (0.032)
>100 0.925 (0.031)
>500 0.938 (0.026)
>1000 0.938 (0.028)
>5000 0.937 (0.028)


ボックスずりィスカヌのプロットが䜜成され、構成されたツリヌの数ごずに粟床スコアが分散されたす。モデルのパフォヌマンスずアンサンブルのサむズが増加する傟向がありたす。







朚の深さを調べる



アンサンブルに远加された各ツリヌの深さを倉曎するこずは、募配ブヌストのもう1぀の重芁なハむパヌパラメヌタヌです。ツリヌの深さによっお、各ツリヌがトレヌニングデヌタセットにどの皋床特化しおいるか、぀たり、どの皋床䞀般的たたはトレヌニング枈みであるかが決たりたす。浅すぎお䞀般的であっおはならずAdaBoostなど、深すぎお特殊化されおはならないブヌトストラップ集玄などツリヌが掚奚されたす。 



募配ブヌストは通垞​​、適床な深さの暹朚でうたく機胜し、トレヌニングず䞀般性のバランスを取りたす。ツリヌの深さは、max_depth匕数によっお制埡されたすツリヌの耇雑さを管理するためのデフォルトのメカニズムは有限数のノヌドを䜿甚するこずであるため、デフォルトは未定矩の倀です。



ツリヌの耇雑さを制埡するには、䞻に2぀の方法がありたす。ツリヌの最倧深床ずツリヌのタヌミナルノヌドリヌフの最倧数です。ここでは葉の数を調べおいるので、num_leaves匕数を指定しお、より深いツリヌをサポヌトするために数を増やす必芁がありたす。以䞋では、1から10たでのツリヌの深さず、モデルのパフォヌマンスぞの圱響を調べたす。



# explore lightgbm tree depth effect on performance
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from lightgbm import LGBMClassifier
from matplotlib import pyplot

# get the dataset
def get_dataset():
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
return X, y

# get a list of models to evaluate
def get_models():
models = dict()
for i in range(1,11):
models[str(i)] = LGBMClassifier(max_depth=i, num_leaves=2**i)
return models

# evaluate a give model using cross-validation
def evaluate_model(model):
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
return scores

# define dataset
X, y = get_dataset()
# get the models to evaluate
models = get_models()
# evaluate the models and store results
results, names = list(), list()
for name, model in models.items():
scores = evaluate_model(model)
results.append(scores)
names.append(name)
print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# plot model performance for comparison
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()


最初に䟋を実行するず、調敎された各ツリヌ深床の平均粟床が衚瀺されたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を数回実行し、平均結果を比范するこずを怜蚎しおください。



ここでは、ツリヌの深さが10レベルたで増えるず、パフォヌマンスが向䞊するこずがわかりたす。さらに深い朚を探玢するのは興味深いでしょう。



>1 0.833 (0.028)
>2 0.870 (0.033)
>3 0.899 (0.032)
>4 0.912 (0.026)
>5 0.925 (0.031)
>6 0.924 (0.029)
>7 0.922 (0.027)
>8 0.926 (0.027)
>9 0.925 (0.028)
>10 0.928 (0.029)


構成されたツリヌの深さごずに粟床スコアを分散するために、長方圢ずりィスカヌのプロットが生成されたす。モデルのパフォヌマンスは、ツリヌの深さが最倧5レベルになるず増加する䞀般的な傟向があり、その埌はパフォヌマンスはかなりフラットなたたです。







孊習率調査



孊習率は、各モデルがアンサンブル予枬に寄䞎する床合いを制埡したす。速床が遅いず、アンサンブルでより倚くの決定ツリヌが必芁になる堎合がありたす。孊習率はlearning_rate匕数で制埡できたす。デフォルトでは0.1です。以䞋は、孊習率を調べ、0.0001から1.0たでの倀の効果を比范したす。



# explore lightgbm learning rate effect on performance
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from lightgbm import LGBMClassifier
from matplotlib import pyplot

# get the dataset
def get_dataset():
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
return X, y

# get a list of models to evaluate
def get_models():
models = dict()
rates = [0.0001, 0.001, 0.01, 0.1, 1.0]
for r in rates:
key = '%.4f' % r
models[key] = LGBMClassifier(learning_rate=r)
return models

# evaluate a give model using cross-validation
def evaluate_model(model):
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
return scores

# define dataset
X, y = get_dataset()
# get the models to evaluate
models = get_models()
# evaluate the models and store results
results, names = list(), list()
for name, model in models.items():
scores = evaluate_model(model)
results.append(scores)
names.append(name)
print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# plot model performance for comparison
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()


最初に䟋を実行するず、構成された各孊習率の平均粟床が衚瀺されたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を数回実行し、平均結果を比范するこずを怜蚎しおください。



ここでは、孊習率が高いほど、このデヌタセットのパフォヌマンスが向䞊するこずがわかりたす。アンサンブルにツリヌを远加しお孊習率を䞋げるず、パフォヌマンスがさらに向䞊するこずが期埅されたす。



>0.0001 0.800 (0.038)
>0.0010 0.811 (0.035)
>0.0100 0.859 (0.035)
>0.1000 0.925 (0.031)
>1.0000 0.928 (0.025)


蚭定された各孊習率の粟床スコアを配垃するために、口ひげボックスが䜜成されたす。孊習率が1.0たで䞊がるず、モデルのパフォヌマンスが䞊がるずいう䞀般的な傟向がありたす。







ブヌスティングタむプの研究



LightGBMの特城は、ブヌストタむプず呌ばれる倚くのブヌストアルゎリズムをサポヌトしおいるこずです。ブヌスティングタむプは、boosting_type匕数を䜿甚しお指定され、タむプを決定するために文字列を取りたす。可胜な倀



  1. 'gbdt'Gradient Boosted Decision TreeGDBT;
  2. 'dart'ドロップアりトの抂念がMARTに入力され、DARTが取埗されたす。
  3. ' goss '募配䞀方向フェッチGOSS。


デフォルトは、叀兞的な募配ブヌストアルゎリズムであるGDBTです。



DARTは、「DARTドロップアりトが耇数の加法回垰ツリヌに出䌚う」ずいうタむトルの2015幎の蚘事で説明されおおり、その名前が瀺すように、募配ブヌスト決定ツリヌの前身である耇数加法回垰ツリヌMARTアルゎリズムにディヌプラヌニングドロップアりトの抂念を远加したす。



このアルゎリズムは、Gradient TreeBoost、Boosted Trees、Multiple Additive Regression Trees and TreesMARTなど、倚くの名前で知られおいたす。埌者の名前を䜿甚しおアルゎリズムを参照したす。


GOSSには、LightGBMずlightbgmラむブラリに関する䜜業が衚瀺されたす。このアプロヌチは、倧きな゚ラヌ募配が発生するむンスタンスのみを䜿甚しおモデルを曎新し、残りのむンスタンスを削陀するこずを目的ずしおいたす。



...募配が小さいデヌタむンスタンスの倧郚分を陀倖し、残りの郚分のみを䜿甚しお情報の増加を掚定したす。


以䞋のLightGBMは、3぀の䞻芁なブヌスト方法を䜿甚した合成分類デヌタセットでトレヌニングされおいたす。



# explore lightgbm boosting type effect on performance
from numpy import arange
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from lightgbm import LGBMClassifier
from matplotlib import pyplot

# get the dataset
def get_dataset():
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=7)
return X, y

# get a list of models to evaluate
def get_models():
models = dict()
types = ['gbdt', 'dart', 'goss']
for t in types:
models[t] = LGBMClassifier(boosting_type=t)
return models

# evaluate a give model using cross-validation
def evaluate_model(model):
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
return scores

# define dataset
X, y = get_dataset()
# get the models to evaluate
models = get_models()
# evaluate the models and store results
results, names = list(), list()
for name, model in models.items():
scores = evaluate_model(model)
results.append(scores)
names.append(name)
print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# plot model performance for comparison

pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()


最初に䟋を実行するず、構成された各ブヌストタむプの平均粟床が衚瀺されたす。



泚アルゎリズムや掚定手順の確率的な性質、たたは数倀の粟床の違いにより、結果が異なる堎合がありたす。䟋を耇数回実行し、平均を比范するこずを怜蚎しおください。



デフォルトのブヌスト方法は、他の2぀の評䟡された方法よりもパフォヌマンスが優れおいるこずがわかりたす。



>gbdt 0.925 (0.031)
>dart 0.912 (0.028)
>goss 0.918 (0.027)


ボックスアンドりィスカヌ図を䜜成しお、構成された各増幅方法の粟床掚定倀を配垃し、方法を盎接比范できるようにしたす。







画像






おすすめ蚘事






All Articles