Files
qsar/1d-qsar/cuda/RFECV流程.md
mm644706215 818f461beb update
2025-03-03 22:34:33 +08:00

86 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 置换重要性计算原理与 RFECV 完整流程
### 置换重要性的计算公式与原理
计算公式:
置换重要性 = 平均打乱后的 MSE 原始基线MSE
原理说明:
基线性能首先在原始数据上计算模型的均方误差MSE作为基线性能。
打乱特征:对于每个特征,重复 n 次将该特征的数值随机打乱(破坏其与目标变量的关联),然后计算模型在打乱后数据上的 MSE。
重要性度量打乱某个特征后如果模型性能恶化MSE 增加),说明该特征对预测有较强贡献;反之,如果 MSE 变化不大甚至降低,则说明该特征的重要性较低。
因此,置换重要性反映了打乱一个特征后模型性能的下降程度——数值越大(正值越大),表明该特征越重要;若为负值,则可能暗示该特征对模型存在“干扰”作用(或模型过拟合某些噪声)。
### RFECV 的完整流程
RFECV递归特征消除交叉验证在代码中的实现是一个贪心的特征筛选过程完整流程如下
初始特征集
从原始数据 $X$ 的所有特征开始,构成完整的特征集。
模型性能评估
利用当前的特征集,通过交叉验证(例如 5 折)计算模型的平均 MSE作为当前特征组合的基线性能。
计算置换重要性
针对当前特征集,训练一个随机森林模型。
对于每个特征:
将该特征的数值在验证数据中随机打乱(注意这里打乱是对当前特征集中的一个特征进行,而其它特征保持不变)。
重复打乱 n 次,分别计算模型在打乱数据上的 MSE。
取平均后减去基线 MSE即得到该特征的置换重要性。
剔除最不重要特征
从当前特征集中,选择置换重要性最低的那个特征(也就是打乱后对模型性能影响最小的特征)。
将这个特征剔除,同时记录该特征的置换重要性变化。
迭代更新
在新的特征集下重复步骤 2~4不断剔除对模型贡献较小的特征。
在每一次迭代中,都记录下当前特征组合对应的交叉验证 MSE。
选择最佳特征组合
当特征数量逐步减少时,保存使得交叉验证 MSE 最低的特征组合。
最终输出最佳的特征子集,即使得模型预测性能最优的那一组特征。
注意几点:
这里的“组合”指的是当前保留的特征集,并不是说对
𝑋
X 中的所有可能子集进行遍历(那样的组合数目将非常庞大),而是采用逐步剔除的贪心策略。
每一步只考虑剔除一个特征,而不是一次性移除多个特征。这种方法的优势在于计算量大幅降低,但也可能不保证全局最优。
置换重要性的计算是有重复n_repeats其目的是降低随机扰动带来的波动从而得到一个较为稳定的特征重要性评价。
### CV MSE 曲线 与 置换重要性图
1. CV MSE 与树的数量和特征组合的关系
提取日志绘制CV MSE 曲线:脚本 extract_log_CV_MSE.py
确定随机森林树数:
在动态评估树数的过程中CV MSE 用于观察随着树数增加,模型预测性能(均方误差)的变化,直到达到收敛(即连续两次差值低于阈值)。
确定最佳特征组合:
在 RFECV 的过程中,每一次迭代都计算当前特征集合下的 CV MSE。即便不同组合间的变化可能很小整体趋势也能告诉我们哪些特征组合使得 CV MSE 达到最低值。
如果不同特征组合下 CV MSE 的变化都很小,可能表明这些分子特征对 y 的解释力本身就不强,或者模型对部分特征缺失具有较强鲁棒性。
打印并绘制 CV MSE 曲线:
你可以将每轮迭代打印的结果(例如 print(f"Current number of features: {len(features)}, CV MSE: {current_score:.4f}"))记录下来,然后绘制一张图,横轴为当前保留特征的数量,纵轴为对应的 CV MSE。
如果在这张图中某个迭代点出现了较大的波动(例如 CV MSE 突然增大或减小),可能说明在这一轮剔除的特征对整体预测影响较大。
如果突然下降,则可能说明删除了一个干扰特征;如果突然上升,则可能删除了一个很重要的特征,使得模型性能大幅下降。
2. rfecv_perm_importance.png 的意义
置换重要性图:
这个图记录了 RFECV 过程中每次剔除的特征对应的置换重要性(也就是:打乱该特征后的 MSE与基线 MSE 的差值)。
置换重要性反映的是单个特征被打乱时对模型性能的影响。
图中每个点表示在某个迭代中被删除特征的置换重要性,数值越大(正值),说明该特征单独对模型有较大贡献;数值较小(接近 0 或负值)则说明单独贡献较低。
两张图之间的关系:
CV MSE 曲线图: 展示的是每个特征子集整体的预测性能变化,反映了特征组合对模型表现的影响。
置换重要性图: 反映了在每次迭代中,被剔除的那个特征对模型性能影响的大小。
如果在某一次迭代中,剔除某个特征导致 CV MSE 突然上升,并且那一轮的置换重要性数值明显较大,那么这可以表明该特征在组合中起到了关键作用,即使它单独的相关性不高,也可能在和其它特征交互时非常重要。
总结来说:
CV MSE 图主要展示整体特征组合的效果;
置换重要性图反映每次剔除操作对模型影响的即时变化。
这两者可以互相印证:当置换重要性图中出现较大波动时(比如一个点明显高于其他点),对应的 CV MSE 曲线通常也会显示出一个拐点,提示这个特征在整个组合中的重要性。这样你既可以从整体角度看模型的稳定性,也可以从单个特征角度分析它们对模型的贡献。