scikit-learn中RFECV的cv_results属性排序规则咨询
关于RFECV的cv_results_排序逻辑说明
首先明确:rfecv.cv_results_里的结果是按特征数升序排列的,也就是你看到的先14、再19、24…最后154的顺序,这和递归消除的执行顺序完全相反。
核心原因
递归消除的实际执行流程是从全量特征(154个)开始,每次删除5个特征,直到特征数接近min_features_to_select(你设置的是10,最后停在14是因为14-5=9<10,触发终止条件)。但sklearn在整理cv_results_时,会把所有测试过的特征子集按特征数量从小到大排序,而非执行时的从多到少顺序。
行号与特征数的对应关系
- DataFrame第1行:对应特征数最少的子集(14个)
- DataFrame最后1行:对应全量特征子集(154个)
验证方式
你可以直接提取cv_results_中的n_features字段确认顺序,代码如下:
import pandas as pd df_cv = pd.DataFrame(rfecv.cv_results_) # 打印特征数的排列顺序 print(df_cv['n_features'].tolist())
输出结果会是[14,19,24,...,149,154],和mean_test_score的顺序完全匹配。
调整顺序的方法
如果需要按照递归执行的顺序(从多到少)查看结果,只需对DataFrame按n_features降序排序:
df_cv_sorted = df_cv.sort_values(by='n_features', ascending=False)
内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

