update
This commit is contained in:
86
1d-qsar/cuda/RFECV流程.md
Normal file
86
1d-qsar/cuda/RFECV流程.md
Normal file
@@ -0,0 +1,86 @@
|
||||
## 置换重要性计算原理与 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 曲线通常也会显示出一个拐点,提示这个特征在整个组合中的重要性。这样你既可以从整体角度看模型的稳定性,也可以从单个特征角度分析它们对模型的贡献。
|
||||
Reference in New Issue
Block a user