参数配置 #

参数分类 #

LightGBM 的参数可以分为以下几类:

text
┌─────────────────────────────────────────────────────────────┐
│                    LightGBM 参数分类                         │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  核心参数 (Core Parameters)                                  │
│  ├── objective: 目标函数                                    │
│  ├── metric: 评估指标                                       │
│  └── task: 任务类型                                         │
│                                                             │
│  学习参数 (Learning Parameters)                              │
│  ├── num_leaves: 叶子节点数                                 │
│  ├── learning_rate: 学习率                                  │
│  ├── n_estimators: 迭代次数                                 │
│  └── max_depth: 树深度                                      │
│                                                             │
│  IO 参数 (IO Parameters)                                     │
│  ├── max_bin: 最大分箱数                                    │
│  ├── feature_fraction: 特征采样比例                         │
│  └── bagging_fraction: 数据采样比例                         │
│                                                             │
│  目标参数 (Objective Parameters)                             │
│  ├── num_class: 类别数                                      │
│  ├── is_unbalance: 是否不平衡                               │
│  └── scale_pos_weight: 正样本权重                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心参数 #

objective(目标函数) #

说明 适用场景
binary 二分类 二分类问题
multiclass 多分类 多分类问题
regression 回归 回归问题
lambdarank 排序 排序问题
cross_entropy 交叉熵 分类问题
xentropy 交叉熵 分类问题
python
params = {
    'objective': 'binary'
}

params = {
    'objective': 'multiclass',
    'num_class': 3
}

params = {
    'objective': 'regression'
}

metric(评估指标) #

说明 适用场景
auc AUC 二分类
binary_logloss 二分类对数损失 二分类
multi_logloss 多分类对数损失 多分类
rmse 均方根误差 回归
mae 平均绝对误差 回归
mape 平均绝对百分比误差 回归
ndcg NDCG 排序
map MAP 排序
python
params = {
    'objective': 'binary',
    'metric': ['auc', 'binary_logloss']
}

params = {
    'objective': 'multiclass',
    'num_class': 3,
    'metric': 'multi_logloss'
}

params = {
    'objective': 'regression',
    'metric': ['rmse', 'mae']
}

学习参数 #

num_leaves(叶子节点数) #

控制模型复杂度的最重要参数:

python
params = {
    'num_leaves': 31
}

调优建议

  • 默认值:31
  • 较小值(15-31):简单模型,防过拟合
  • 较大值(63-255):复杂模型,可能过拟合
  • 经验公式:num_leaves <= 2^(max_depth)

learning_rate(学习率) #

python
params = {
    'learning_rate': 0.05
}

调优建议

  • 默认值:0.1
  • 较小值(0.01-0.05):需要更多迭代,模型更稳定
  • 较大值(0.1-0.3):快速收敛,可能不精确
  • 推荐组合:小学习率 + 大迭代次数

n_estimators(迭代次数) #

python
from lightgbm import LGBMClassifier

clf = LGBMClassifier(
    n_estimators=1000,
    learning_rate=0.05
)

调优建议

  • 配合早停机制使用
  • 学习率越小,需要的迭代次数越多

max_depth(树深度) #

python
params = {
    'max_depth': 6
}

调优建议

  • 默认值:-1(不限制)
  • 通常不需要设置,用 num_leaves 控制
  • 设置时建议 3-10

min_data_in_leaf(叶子最少样本数) #

python
params = {
    'min_data_in_leaf': 20
}

调优建议

  • 默认值:20
  • 较大值防止过拟合
  • 值过大可能导致欠拟合

IO 参数 #

max_bin(最大分箱数) #

python
params = {
    '_max_bin': 255
}

调优建议

  • 默认值:255
  • 较小值(63-127):更快训练,更少内存
  • 较大值(255-511):更高精度,更多内存

feature_fraction(特征采样比例) #

python
params = {
    'feature_fraction': 0.8
}

调优建议

  • 默认值:1.0
  • 范围:(0, 1]
  • 较小值防止过拟合,加速训练

bagging_fraction(数据采样比例) #

python
params = {
    'bagging_fraction': 0.8,
    'bagging_freq': 5
}

调优建议

  • 默认值:1.0
  • 范围:(0, 1]
  • 需要配合 bagging_freq 使用
  • 较小值防止过拟合

bagging_freq(采样频率) #

python
params = {
    'bagging_fraction': 0.8,
    'bagging_freq': 5
}

说明:每 5 次迭代进行一次采样

正则化参数 #

lambda_l1(L1 正则化) #

python
params = {
    'lambda_l1': 0.1
}

调优建议

  • 默认值:0
  • 较大值增加稀疏性
  • 范围:[0, ∞)

lambda_l2(L2 正则化) #

python
params = {
    'lambda_l2': 0.1
}

调优建议

  • 默认值:0
  • 较大值防止过拟合
  • 范围:[0, ∞)

min_split_gain(最小分裂增益) #

python
params = {
    'min_split_gain': 0.01
}

调优建议

  • 默认值:0
  • 较大值防止过拟合
  • 范围:[0, ∞)

类别不平衡参数 #

is_unbalance #

python
params = {
    'objective': 'binary',
    'is_unbalance': True
}

scale_pos_weight #

python
n_pos = np.sum(y_train == 1)
n_neg = np.sum(y_train == 0)

params = {
    'objective': 'binary',
    'scale_pos_weight': n_neg / n_pos
}

完整参数示例 #

二分类任务 #

python
params = {
    'objective': 'binary',
    'metric': ['auc', 'binary_logloss'],
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': -1,
    'lambda_l1': 0.1,
    'lambda_l2': 0.1,
    'min_data_in_leaf': 20
}

多分类任务 #

python
params = {
    'objective': 'multiclass',
    'num_class': 3,
    'metric': 'multi_logloss',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.8,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': -1
}

回归任务 #

python
params = {
    'objective': 'regression',
    'metric': ['rmse', 'mae'],
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': -1
}

排序任务 #

python
params = {
    'objective': 'lambdarank',
    'metric': 'ndcg',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'verbose': -1
}

参数调优策略 #

调优顺序 #

text
1. 固定学习率和迭代次数
   ├── learning_rate = 0.1
   └── n_estimators = 1000 (配合早停)

2. 调整树参数
   ├── num_leaves
   ├── min_data_in_leaf
   └── max_depth (可选)

3. 调整采样参数
   ├── feature_fraction
   ├── bagging_fraction
   └── bagging_freq

4. 调整正则化参数
   ├── lambda_l1
   ├── lambda_l2
   └── min_split_gain

5. 降低学习率
   └── learning_rate = 0.01

网格搜索示例 #

python
from sklearn.model_selection import GridSearchCV
from lightgbm import LGBMClassifier

clf = LGBMClassifier(random_state=42, verbose=-1)

param_grid = {
    'num_leaves': [15, 31, 63],
    'learning_rate': [0.01, 0.05, 0.1],
    'n_estimators': [100, 200, 500]
}

grid_search = GridSearchCV(
    clf, param_grid, cv=5, scoring='roc_auc', n_jobs=-1
)

grid_search.fit(X_train, y_train)

print(f"最佳参数: {grid_search.best_params_}")
print(f"最佳分数: {grid_search.best_score_:.4f}")

随机搜索示例 #

python
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint, uniform

param_distributions = {
    'num_leaves': randint(15, 127),
    'learning_rate': uniform(0.01, 0.3),
    'n_estimators': randint(100, 1000),
    'feature_fraction': uniform(0.5, 0.5),
    'bagging_fraction': uniform(0.5, 0.5),
    'lambda_l1': uniform(0, 1),
    'lambda_l2': uniform(0, 1)
}

random_search = RandomizedSearchCV(
    clf, param_distributions, n_iter=50, cv=5, 
    scoring='roc_auc', n_jobs=-1, random_state=42
)

random_search.fit(X_train, y_train)

print(f"最佳参数: {random_search.best_params_}")
print(f"最佳分数: {random_search.best_score_:.4f}")

参数默认值 #

参数 默认值 说明
num_leaves 31 叶子节点数
learning_rate 0.1 学习率
n_estimators 100 迭代次数
max_depth -1 最大深度(不限制)
min_data_in_leaf 20 叶子最少样本数
feature_fraction 1.0 特征采样比例
bagging_fraction 1.0 数据采样比例
bagging_freq 0 采样频率
lambda_l1 0 L1 正则化
lambda_l2 0 L2 正则化
min_split_gain 0 最小分裂增益
max_bin 255 最大分箱数

下一步 #

现在你已经掌握了 LightGBM 的参数配置,接下来学习 训练与预测,深入了解模型训练和预测的细节!

最后更新:2026-04-04