发动机剩余使用寿命预测(3)

职场   2025-01-01 15:50   四川  
在上一篇总结中,我们用分段线性模型来近似发动机性能衰退的不同阶段,最终的预测效果有了极大的提升。今天我们再基于分段线性模型,尝试使用XGBoost算法来对RUL进行预测,对比一下与LSTM谁的性能更优一些。
XGBoost(极限梯度提升,extreme gradient boosting)是一种集成学习算法,以效率、速度、准确性闻名,主要用于分类和回归问题。虽然它的名字中包含“提升”二字,但误差的修正其实还是沿着梯度下降方向进行的,“提升” 指的是模型性能在每次迭代后都得到改善。它的核心思想是将多个简单的决策树模型组合起来,让每棵树都学习前面树没有学好的地方,形成一个强大的预测模型:第一个弱模型预测结果往往不太准确,但第二棵树会特别关注第一棵树的预测误差,给这些样本更高的权重。通过一棵棵树叠加,每棵树都在修正前面的错误,最终逐步提高整体预测能力。
举个简单的例子,假设我们要用XGBoost来预测一个学生的考试成绩:
科目
每天学习时间(小时)
考试成绩(真实值)
数学
3
100
语文
2
90
英语
1
70
第一步:初始预测,并计算残差。
XGBoost会用一个简单的常数值作为初始预测,比如100:
科目
学习时间
成绩
初始预测值
残差(误差)
数学
3
100
100
0
语文
2
90
100
-10
英语
1
70
100
-30
残差=真实值-预测值
第二步:训练新树来拟合残差,调整预测值。
新树的目标是预测当前的残差(0,-10,-30)。
科目
学习时间
残差目标值
新树预测误差
更新预测值
数学
3
0
0
100-0=100
语文
2
-10
-5
100-5=95
英语
1
-30
-15
100-15=85
新树特别关注预测误差较大的样本,例如第二行和第三行。
重复上述步骤(使用梯度计算误差对预测值的影响,指导如何更新模型),每次生成一棵新的树,通过不断迭代训练,逐步逼近真实值,同时通过正则化避免过拟合:
第1颗树
第2颗树
第3颗树
第4颗树
数学
100
100
100
100
语文
100
95
90
90
英语
100
85
80
75

与梯度下降算法相似,二者都是依赖损失函数对模型参数或预测值的梯度(导数)来判断如何更新。不同点是:梯度下降直接调整参数,在参数空间中最小化损失函数;梯度提升调整模型结构(新的决策树),通过叠加多个弱模型逐步逼近最优解。
对比维度
XGBoost
梯度下降
模型类型
集成学习模型(树模型)
线性或非线性模型(如线性回归、神经网络等)
优化目标
预测误差(残差)的拟合
参数调整以最小化损失函数
更新方式
- 构建新树修正误差
- 每次迭代更新权重或系数值

- 依赖一阶梯度和二阶导数调整增量
- 只依赖一阶梯度
迭代步骤
每棵树逐步修正前面树的残差
每一步调整参数来逼近最优值
学习能力
非参数模型(决策树结构自动学习复杂关系)
参数模型(需要手动设计特征和关系)
收敛速度
快速,尤其适合大数据集(支持并行计算和特征筛选)
收敛速度较慢,尤其在复杂高维空间时可能卡在局部最优
防止过拟合
内置正则化(树剪枝、L1、L2 惩罚项)
依赖学习率、正则化或早停机制
缺失值处理
自动处理缺失值
必须手动处理缺失值
XGBoost 的数学推导是建立在梯度提升决策树的基础上的,通过二阶近似和正则化项优化目标函数,来提高计算效率和模型泛化能力。核心步骤如下:
1、初始化模型
2、对于每一轮迭代:
     计算损失函数的一阶和二阶导数;
     遍历所有特征,找到最佳的分裂点;
     根据最佳分裂点构建新的树;
     更新模型。
3、重复步骤2,直到满足停止条件。
以下是数学原理推导过程:
1. 目标函数:
XGBoost的目标是通过最小化损失函数来优化模型,同时加入正则化项控制模型复杂度。因此,它的整体损失目标函数的数学表达式我们定义为:
其中,第一项是损失函数,用来评估模型预测误差(如MSE、RMSE或对数损失),第二项为正则化项,用来控制模型复杂度,防止过拟合。
对于决策树模型,正则化公式为:
其中,γT用于控制树的复杂度(叶子节点数量T)。每增加一个叶子节点,就会有固定惩罚γ。防止树无限制生长,限制过于复杂的模型结构。后面一项相当于 L2 正则化,用于平滑权重值,避免过大权重导致过拟合。
2. 目标函数的近似:
由于损失函数可能是复杂的非线性函数,直接优化比较困难,XGBoost 使用二阶泰勒展开对损失函数进行近似:

损失函数的一阶导数(梯度)

损失函数的二阶导数(曲率)

于是得到最终的目标函数:
3. 树的构建:
在构建决策树时,需要计算某个特征分裂后的增益Gain(分裂前后的目标函数变化量表示为增益)XGBoost通过贪心算法来寻找最佳的分裂点,使得分裂后的目标函数的增益最大
增益公式反映了在某个特征上划分数据后,模型误差下降的程度。如果增益Gain小于 0,则放弃该分裂。
4. 模型预测:
完成树的构建后,模型的预测值为所有树的加权和:
其中,是第t轮添加的树模型。

如果上面的数学推导过程不太理解也没关系,从工程应用的角度出发,掌握以下两种训练XGBoost模型的调用方法,知道怎么调超参数就可以了。
常用的超参数有:
  • max_depth:控制树的最大深度
  • n_estimators:控制树的数量
  • learning_rate:控制步长大小
  • subsample:随机抽样比率
  • colsample_bytree:每棵树采样的特征比例
  • lambda:L2 正则化项
  • alpha:L1 正则化项
1、 xgboost.train
xgboost.train是基于原生XGBoost API设计的,必须将输入数据转换为XGBoost专用的DMatrix格式以自定义损失函数、监控训练过程,能更高效地处理大规模数据。
# 将数据转化为 DMatrix 格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 设置参数
params = {
    'objective''reg:squarederror',  # 回归任务
    'max_depth': 6,                   # 树的最大深度
    'eta': 0.1,                       # 学习率
    'subsample': 0.8,                 # 每次样本随机采样比例
    'colsample_bytree': 0.8,          # 每次特征随机采样比例
    'lambda': 1.0,                    # L2 正则化
    'alpha': 0.0                      # L1 正则化
}

# 训练模型
model = xgb.train(
    params,
    dtrain,
    num_boost_round=100,
    evals=evallist,         # 监控训练过程
    early_stopping_rounds=10  # 如果 10 次迭代不再改进,则停止训练
)

# 预测和评估
y_pred = model.predict(dtest)
模型最终预测性能远不如LSTM,R^2=0.5598

2、xgboost.XGBRegressor
XGBRegressor是基于Scikit-Learn风格的API设计的,适合与Scikit-Learn的工具(如交叉验证、网格搜索)集成。
# 定义模型和参数
model = XGBRegressor(
    max_depth=6,
    learning_rate=0.1,
    n_estimators=100,  # 指定树的数量
    reg_lambda=1,      # L2正则化
    reg_alpha=0.1,     # L1正则化
    gamma=0.5,         # 分裂阈值控制
    objective='reg:squarederror',  # 损失函数
)

# 模型训练
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)
3、 超参数调优
XGBoost 有这么多超参数,合理的参数组合才能提高模型性能,从而避免过拟合或欠拟合。那我们应该如何优化这些超参数呢?
3.1 GridSearchCV
常用的网格搜索优化方法如下,首先自定义一个超参网格param,接着再创建一个GridSearchCV对象,GridSearchCV将遍历这些param中的所有可能组合
# 初始化 XGBoost 回归器,目标函数设置为均方误差
model = XGBRegressor(objective='reg:squarederror')

# 定义超参数网格
param = {
    'n_estimators': [100, 150, 200, 250, 300],
    'learning_rate': [0.001, 0.01, 0.05, 0.1],
    'max_depth': [3, 4, 5, 6, 7, 8, 9],
    'subsample': [0.6, 0.7, 0.8, 0.9, 1.0],
    'colsample_bytree': [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
}

# 创建 GridSearchCV 对象
grid = GridSearchCV(model, params, cv=3, scoring='neg_mean_squared_error', n_jobs=-1)

# 训练模型
grid.fit(X_train, y_train)

# 获取最佳参数和最佳模型
best_params = grid.best_params_
best_model = grid.best_estimator_
scoring='neg_mean_squared_error'表示使用负均方误差作为评分标准,cv=3表示使用3折交叉验证来评估不同参数组合的性能。由于GridSearchCV是穷举所有可能的组合,所以最好设置n_jobs=-1,这样可以启用多进程并行处理,来提高训练速度。
要不然,搜索一遍都会让你怀疑人生 截止至发稿,还没出结果……
当然,如果你有GPU可用的话,可以在参数中指定 tree_method='gpu_hist' ,使用 GPU来加快训练过程。
gpu_available = 'NVIDIA' in os.popen('nvidia-smi -L').read()
tree_method = 'gpu_hist' if gpu_available else 'hist' 

3.2 RandomizedSearchCV
随机搜索(RandomizedSearchCV)相比于网格搜索,在参数空间内随机选择参数组合会快一些,有时还可能找到更好的结果。方法如下:
from sklearn.model_selection import RandomizedSearchCV, KFold

# 定义超参数分布
param_distributions = {
    'n_estimators': [100, 150, 200, 250, 300],
    'learning_rate': [0.001, 0.01, 0.05, 0.1],
    'max_depth': [3, 4, 5, 6, 7, 8, 9],
    'subsample': [0.6, 0.7, 0.8, 0.9, 1.0],
    'colsample_bytree': [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
}

model = xgb.XGBRegressor(verbosity=0)
cv_splitter = KFold(n_splits=3, shuffle=True, random_state=42)

# 初始化 RandomizedSearchCV
random_search = RandomizedSearchCV(
    estimator=model,
    param_distributions=param_distributions,
    n_iter=50,  # 随机选择 50 组超参数组合
    cv=cv_splitter,
    scoring='neg_mean_squared_error',
    verbose=0,  # 关闭详细输出
    n_jobs=-1,  # 并行处理
    random_state=42
)

random_search.fit(flat_seq_array, label_array.ravel())
# 找到最佳参数和结果
best_params = random_search.best_params_
best_score = -random_search.best_score_
50组参数组合,3折交叉验证,耗时2小时。然而,预测性能依然不尽人意:

下一篇,我们再继续尝试使用不同的机器学习算法吧。

感谢大家对机务论坛的支持,关注机务论坛,倾听机务心声!航企优秀的方面必定宣传,不足的地方也必须指出,让领导们重视问题,解决问题,营造更好的机务维修环境。

征稿:
所见所闻,个人感悟,个人成长历程及感人故事。
特别征稿:我师傅的故事!
同时,征集劳动仲裁案例,分享案例,让更多的小伙伴能了解劳动纠纷的解决方式,通过劳动仲裁维护自己的合法权益。


评论区留言,同意的点赞
扫码添加小编微信
匿名爆料



民航机务论坛微信公众平台
改名为:机务论坛
发布最新行业动向 深入解读政策法规
开辟维修工程专栏 交流飞机排故经验
分享前沿技术应用 预测职业发展前景
行业大咖讲经布道 业界专家授业解惑
致力打造一流的民航机务朋友圈----机务论坛
关注机务论坛,倾听机务心声!
投稿邮箱:duanwei0615@163.com


机务论坛
民航机务论坛改名为:机务论坛 发布最新行业动向 深入解读政策法规 开辟维修工程专栏 交流飞机排故经验 分享前沿技术应用 预测职业发展前景 行业大咖讲经布道 业界专家授业解惑 致力打造一流的民航机务朋友圈----机务论坛
 最新文章