ホームページ  >  記事  >  テクノロジー周辺機器  >  LightGBM実戦+ランダム探索パラメータ調整:命中率96.67%

LightGBM実戦+ランダム探索パラメータ調整:命中率96.67%

PHPz
PHPzオリジナル
2024-06-08 22:45:30676ブラウズ

LightGBM実戦+ランダム探索パラメータ調整:命中率96.67%

皆さんこんにちは、ピーターです〜

LightGBM は古典的な機械学習アルゴリズムであり、その背景、原理、特性は非常に研究する価値があります。 LightGBM のアルゴリズムは、効率、拡張性、高精度などの機能をもたらします。この記事では、LightGBM の特徴と原理、および LightGBM とランダム検索最適化に基づくいくつかの事例を簡単に紹介します。

LightGBM アルゴリズム

機械学習の分野では、勾配ブースティング マシン (GBM) は、弱い学習器 (通常は決定木) を徐々に追加することで予測誤差を最小限に抑える強力なアンサンブル学習アルゴリズムのクラスです。 GBM は、予測誤差を最小限に抑え、残差関数または損失関数を最小限に抑えることで達成できる強力なモデルを構築するためによく使用されます。このアルゴリズムは広く使用されており、デシジョン ツリーなどの弱い学習器で構築された強力なモデルの予測誤差を最小限に抑えるためによく使用されます。

ビッグデータの時代では、データセットのサイズが劇的に増大しており、従来の GBM はコンピューティングとストレージのコストが高いため、効果的に拡張することが困難です。

  • たとえば、水平分割デシジョン ツリー成長戦略の場合、バランスの取れたツリーを生成できますが、多くの場合、モデルの識別能力の低下につながりますが、リーフベースの成長戦略の場合は、向上する可能性があります。精度が高くなると、オーバーフィットしやすくなります。
  • さらに、ほとんどの GBM 実装では、各反復で勾配を計算するためにデータセット全体を走査する必要がありますが、データ量が膨大な場合、これは非効率的です。したがって、モデルの精度を維持しながら大規模なデータを効率的に処理できるアルゴリズムが必要です。

これらの問題を解決するために、Microsoft は 2017 年に、より高速でメモリ消費量が低く、パフォーマンスの高い勾配ブースティング フレームワークである LightGBM (Light Gradient Boosting Machine) を発売しました。

公式学習アドレス: https://lightgbm.readthedocs.io/en/stable/

LightGBMの原理

1. ヒストグラムに基づく決定木アルゴリズム:

  • 原理: LightGBMは、連続特徴値にヒストグラム最適化技術を使用します。特定のビン (つまり、ヒストグラムのバケット) に離散化されるため、ノードが分割されるときに計算する必要があるデータの量が削減されます。
  • 利点: この方法では、メモリ使用量を削減しながら計算速度を向上させることができます。
  • 実装の詳細: アルゴリズムは、特徴ごとに、特徴の統計情報をさまざまなバケットに記録するヒストグラムを維持します。ノード分割を実行する場合、すべてのデータを走査することなく、これらのヒストグラムの情報を直接利用できます。

2. 深さ制限のあるリーフごとのツリー成長戦略:

  • 原則: 従来の水平分割とは異なり、リーフごとの成長戦略は、現在のすべてのリーフ ノードから最大の分割利益を持つノードを毎回選択することです。スプリット。
  • 利点: この戦略により、デシジョン ツリーはデータの異常な部分により重点を置くことができ、通常は精度が向上します。
  • 短所: 特にデータにノイズがある場合、簡単に過学習につながる可能性があります。
  • 改善策: LightGBM は深さの最大制限を設定することでオーバーフィッティングを防ぎます。

3. 片側勾配サンプリング (GOSS):

  • 原則: データセット内の大きな勾配サンプルの場合、GOSS アルゴリズムはデータの一部 (通常は大きな勾配を持つサンプル) のみを保持し、データ量を削減します。損失を出さないように計算する 情報が多すぎる。
  • 利点: この方法では、精度を大幅に損なうことなくトレーニングを高速化できます。
  • アプリケーションシナリオ: データの偏りが深刻な状況に特に適しています。

4. 相互排他的機能バンドリング (EFB):

  • 原則: EFB は、機能の数を減らし、計算効率を向上させるテクノロジーです。相互に排他的な特徴 (つまり、同時にゼロ以外にならない特徴) を組み合わせて、特徴の次元を削減します。
  • 利点: メモリ使用効率とトレーニング速度が向上しました。
  • 実装の詳細: 特徴の相互排他性により、アルゴリズムはより多くの特徴を同時に処理できるため、実際に処理される特徴の数が減少します。

5. 並列学習と分散学習のサポート:

  • 原則: LightGBM はマルチスレッド学習をサポートし、並列トレーニングに複数の CPU を使用できます。
  • 利点: マルチコアプロセッサーでのトレーニング速度が大幅に向上します。
  • スケーラビリティ: 分散学習もサポートしており、複数のマシンを使用してモデルを共同トレーニングできます。

6. キャッシュの最適化:

  • 原則: データの読み取り方法が最適化され、より多くのキャッシュを使用してデータ交換を高速化できます。
  • 利点: 特に大規模なデータセットでは、キャッシュの最適化によりパフォーマンスが大幅に向上します。

7. 複数の損失関数をサポートします:

  • 特徴: 一般的に使用される回帰および分類損失関数に加えて、LightGBM はさまざまなビジネス ニーズを満たすカスタム損失関数もサポートします。

8. 正則化と枝刈り:

  • 原則: L1 および L2 正則化項は、モデルの複雑さを制御し、過剰適合を回避するために提供されます。
  • 実装: 過剰適合をさらに防ぐために、後方枝刈り戦略を実装しました。

9. モデルの解釈可能性:

  • 特徴: LightGBMはデシジョンツリーに基づくモデルであるため、モデルの解釈性が高く、特徴の重要度やその他の方法を通じてモデルの決定ロジックを理解できます。

LightGBMの特徴

効率

  • 速度の利点: ヒストグラムの最適化とリーフごとの成長戦略により、LightGBMは精度を確保しながらトレーニング速度を大幅に向上させます。
  • メモリ使用量: LightGBM は他の GBM 実装よりも必要なメモリが少ないため、より大きなデータ セットを処理できます。

精度

  • ベストファースト成長戦略: LightGBM が採用するリーフごとの成長戦略は、データをより厳密に適合させることができ、通常は水平セグメンテーションよりも高い精度を達成できます。
  • 過学習を回避する方法: 深さの最大制限と後方枝刈りを設定することにより、LightGBM は過学習を回避しながらモデルの精度を向上させることができます。

スケーラビリティ

  • 並列分散学習: LightGBM は、マルチスレッドと分散コンピューティングをサポートするように設計されており、最新のハードウェアのコンピューティング能力を最大限に活用できます。
  • マルチプラットフォームのサポート: LightGBM は Windows、macOS、Linux などの複数のオペレーティング システムで実行でき、Python、R、Java などの複数のプログラミング言語をサポートします。

使いやすさ

  • パラメータ調整: LightGBM は、ユーザーが特定の問題に応じて調整しやすいように豊富なパラメータ オプションを提供します。
  • 事前トレーニングされたモデル: ユーザーは事前トレーニングされたモデルから開始して、モデリング プロセスを加速できます。
  • モデル解釈ツール: LightGBM は、ユーザーがモデルの意思決定プロセスを理解するのに役立つ機能重要度評価ツールを提供します。

ライブラリのインポート

In [1]:

import numpy as npimport lightgbm as lgbfrom sklearn.model_selection import train_test_split, RandomizedSearchCVfrom sklearn.datasets import load_irisfrom sklearn.metrics import accuracy_scoreimport warningswarnings.filterwarnings("ignore")

データのロード

パブリックアヤメデータセットのロード:

In [2]:

# 加载数据集data = load_iris()X, y = data.data, data.targety = [int(i) for i in y]# 将标签转换为整数

In [3]:

X[:3]

アウト[3]:

array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]])

In [4]:

y[:10]

Out[4]:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

データを分割

In [5]:

# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

同時に:

[6]内:

lgb_train = lgb.Dataset(X_train, label=y_train)

パラメータ設定

[7]内:

# 设置参数范围param_dist = {'boosting_type': ['gbdt', 'dart'],# 提升类型梯度提升决策树(gbdt)和Dropouts meet Multiple Additive Regression Trees(dart)'objective': ['binary', 'multiclass'],# 目标;二分类和多分类'num_leaves': range(20, 150),# 叶子节点数量'learning_rate': [0.01, 0.05, 0.1],# 学习率'feature_fraction': [0.6, 0.8, 1.0],# 特征采样比例'bagging_fraction': [0.6, 0.8, 1.0],# 数据采样比例'bagging_freq': range(0, 80),# 数据采样频率'verbose': [-1]# 是否显示训练过程中的详细信息,-1表示不显示}

パラメータ調整のランダム検索

[8]内:

# 初始化模型model = lgb.LGBMClassifier()# 使用随机搜索进行参数调优random_search = RandomizedSearchCV(estimator=model, param_distributinotallow=param_dist, # 参数组合 n_iter=100,  cv=5, # 5折交叉验证 verbose=2,  random_state=42,  n_jobs=-1)# 模型训练random_search.fit(X_train, y_train)Fitting 5 folds for each of 100 candidates, totalling 500 fits

最適なパラメータを出力組み合わせ:

In [9]:

# 输出最佳参数print("Best parameters found: ", random_search.best_params_)Best parameters found:{'verbose': -1, 'objective': 'multiclass', 'num_leaves': 87, 'learning_rate': 0.05, 'feature_fraction': 0.6, 'boosting_type': 'gbdt', 'bagging_freq': 22, 'bagging_fraction': 0.6}

最適なパラメータを使用したモデリング

In [10]:

# 使用最佳参数训练模型best_model = random_search.best_estimator_best_model.fit(X_train, y_train)# 预测y_pred = best_model.predict(X_test)y_pred = [round(i) for i in y_pred]# 将概率转换为类别# 评估模型print('Accuracy: %.4f' % accuracy_score(y_test, y_pred))Accuracy: 0.9667

以上がLightGBM実戦+ランダム探索パラメータ調整:命中率96.67%の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。