1. 多目标优化问题概述
在现实生活和工程实践中,我们经常面临需要同时优化多个相互冲突目标的决策问题。这类问题被称为多目标优化问题(Multi-objective Optimization Problems, MOPs)。与单目标优化不同,多目标优化不存在唯一的全局最优解,而是存在一组最优解,称为Pareto最优解集。
以信贷风险评估为例,我们既希望模型能够准确识别高风险客户(高召回率),又希望减少对低风险客户的误判(高精确率)。这两个目标往往是相互矛盾的——提高召回率通常会导致精确率下降,反之亦然。这就是典型的多目标优化场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 多目标优化基础理论
2.1 Pareto最优概念
Pareto最优是多目标优化的核心概念。一个解被称为Pareto最优解,当且仅当不存在其他解在所有目标上都不劣于它,且至少在一个目标上严格优于它。所有Pareto最优解构成的集合称为Pareto前沿(Pareto Front)。
提示:理解Pareto最优的一个简单方法是想象买房决策。一套房子可能在价格上最优,另一套在地段上最优,但没有一套能在所有方面都最优——这就是Pareto最优的直观体现。
2.2 多目标优化数学表达
一个标准的MOP可以表示为:
code复制min/max F(x) = [f₁(x), f₂(x), ..., fₖ(x)]
subject to gᵢ(x) ≤ 0, i = 1,2,...,m
hⱼ(x) = 0, j = 1,2,...,p
其中x是决策变量,F(x)是k个目标函数,g和h分别是不等式和等式约束。
3. 多目标优化算法实现
3.1 基于LightGBM的多目标优化
LightGBM是一个高效的梯度提升框架,我们可以通过自定义目标函数来实现多目标优化。以下是实现步骤:
python复制import lightgbm as lgb
import numpy as np
from sklearn.metrics import classification_report
# 自定义多目标损失函数
def multi_objective_loss(y_true, y_pred):
# 目标1: 交叉熵损失
ce_loss = -np.mean(y_true * np.log(y_pred) + (1-y_true)*np.log(1-y_pred))
# 目标2: 召回率相关损失
tp = np.sum(y_true * (y_pred > 0.5))
fn = np.sum(y_true * (y_pred <= 0.5))
recall_loss = -tp / (tp + fn + 1e-7)
# 加权组合
return 0.7 * ce_loss + 0.3 * recall_loss
# 模型训练
params = {
'objective': 'binary',
'metric': 'custom',
'learning_rate': 0.05,
'num_leaves': 31,
'verbose': -1
}
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
gbm = lgb.train(params,
lgb_train,
num_boost_round=100,
valid_sets=lgb_eval,
