You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

绘制随机森林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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:42:02