绘制随机森林Gini特征重要性触发ValueError错误求解
问题原因定位
错误触发自你调用ax.set_yticklabels()的传参错误:matplotlib的Axes.set_yticklabels()方法第一个入参仅接收标签列表,你额外传入了range(len(idx_gini))作为第一个参数,方法内部会把传入的多组参数误识别为待更新的字典键值序列,触发参数长度不匹配的报错。
修复方案
你需要先设置y轴刻度位置,再传入对应的特征名称作为标签,修正后的绘图部分代码如下:
# Plotting fig, ax = plt.subplots(1, 1, figsize=(23, 25)) ax.barh(range(len(idx_gini)), gini_impu[idx_gini], yerr = std_gini[idx_gini], color = "b", align = "center") ax.set_title("Random Forest Feature Importance (Gini)", fontsize = 20) ax.set_xlabel("Gini Impurity", fontsize = 15) # 先设置y轴刻度位置和标签对应 ax.set_yticks(range(len(idx_gini))) ax.set_yticklabels(feature_names[idx_gini]) ax.tick_params(labelsize=15) # 可选:避免特征标签被画布截断 plt.tight_layout()
可选优化建议
- 如果你不需要展示全部191个特征,可以只提取重要性排名前N的特征绘图,避免标签过密难以阅读,示例如下:
# 取前20个最重要的特征 top_n = 20 idx_gini_top = np.argsort(gini_impu)[-top_n:] # 后续绘图替换idx_gini为idx_gini_top即可
内容的提问来源于stack exchange,提问作者softmax55
相关产品推荐
相关产品推荐

