为何Yellowbrick的RFECV可视化器得出的最优特征数超训练集特征数?
问题解决:RFECV可视化显示最优特征数大于实际特征数
问题分析
你用yellowbrick.model_selection.RFECV做特征选择时,训练集明明只有48个特征,但可视化结果却显示最优特征数为49,这是Yellowbrick的RFECV可视化组件的显示刻度bug——它的x轴刻度会比实际可选择的特征数多1,真实的最优特征数需要通过代码属性获取,而非仅看可视化图表。
解决步骤
- 确认真实最优特征数:在
fit之后,直接调用visualizer_xgb.n_features_,这个属性返回的是经过交叉验证选出的真实最优特征数量,不会受可视化显示影响。print("真实最优特征数:", visualizer_xgb.n_features_) - 验证训练集特征数:先确认训练集的特征数量确实是48,避免数据本身的问题:
print("训练集特征数:", X_train.shape[1]) - 手动绘制可视化结果(可选):如果需要准确的可视化,可基于RFECV的交叉验证得分自行绘制,避开Yellowbrick的显示问题:
import matplotlib.pyplot as plt # 获取不同特征数对应的交叉验证得分 scores = visualizer_xgb.cv_scores_ # 特征数范围是1到48 n_features_range = range(1, X_train.shape[1]+1) plt.plot(n_features_range, scores) plt.xlabel("保留的特征数") plt.ylabel("ROC-AUC得分") plt.title("RFECV特征选择结果") plt.show() - 调整step参数(可选):当前设置
step=3,每次迭代移除3个特征,若担心迭代逻辑影响,可将step设为1(虽然会增加运行时间,但结果更精细):visualizer_xgb = RFECV(xgboost_base_model, step=1, cv=3, scoring='roc_auc')
内容的提问来源于stack exchange,提问作者ds_giz
相关产品推荐
相关产品推荐

