Python回归树export_text列属性报错及模型评估、解读方法咨询
export_text代码报错原因定位 报错的核心触发逻辑是:你传入feature_names参数时引用的X_train不是pandas DataFrame类型,是numpy.ndarray对象,而numpy数组本身没有.columns属性,因此触发AttributeError。
常见的触发场景
- 拆分数据集时直接传入了numpy格式的特征矩阵,没有保留原DataFrame的列名结构
- 特征预处理环节(如标准化、独热编码)的输出为numpy数组,没有转换回带列名的DataFrame格式
对应修复方案
- 已知特征列名的情况下,直接把列名列表传给参数即可,例如:
export_text(regr, feature_names=["房龄", "面积", "位置评分"]) - 原特征为DataFrame的场景,可将预处理/拆分得到的ndarray转回带列名的结构,再调用
.columns属性,例如:X_train = pd.DataFrame(X_train, columns=原特征列名列表) export_text(regr, feature_names=list(X_train.columns)) - 不需要显示具体特征名的场景,直接删除
feature_names参数即可,导出的文本会自动用X[0]、X[1]这类默认占位符标记特征位置
回归树模型的效果与效率规范解读
模型效果判断方法
你当前运行得到的结果为测试集上mse = 0.6600129794020736、r2 = 0.46983848613583734,绝对数值不能脱离数据本身的特征判断优劣,需要对照基准值做横向对比:
- 先对比训练集和测试集的指标差:
- 如果训练集MSE远低于0.66、训练集R²远高于0.47,说明模型存在过拟合,当前max_depth=2的设置可能过深
- 如果训练集和测试集的MSE、R²差值在10%以内,说明模型的泛化稳定性较好
- 再对照数据集本身的基准判断拟合度:
- MSE需要和目标变量的方差做对比:如果目标变量自身的方差就在1左右,0.66的MSE属于合理范围;如果目标变量方差达到10以上,说明当前模型的拟合度严重不足
- R²取值范围为(-∞, 1],越接近1代表模型对目标值波动的解释能力越强:0.47的R²代表模型可以解释测试集47%的目标值变化,属于基础基线水平——如果业务需要粗粒度趋势判断,这个结果是合格的;如果需要高精度数值预测,就需要调整max_depth、min_samples_split、min_samples_leaf等超参数优化效果
模型运行效率判断
- 你当前设置
max_depth=2的回归树结构极其简单,对十万样本以内规模的数据集,训练和推理都是毫秒级完成,不会出现性能瓶颈 - 后续如果调整树深、扩大数据集规模,决策树的推理逻辑为纯条件分支判断,整体运行效率远高于集成树、神经网络类模型,评估效率时只需关注两个指标:单样本推理延迟、千级样本批量预测吞吐量即可
配套绘图代码的注意点
- 如果你的
plot_tree代码同样引用了X_train.columns作为特征名参数,会触发和export_text完全相同的报错,修复逻辑和上文一致 - 导出PDF格式的树结构时,需要在
plt.savefig方法中加入bbox_inches="tight"参数,否则会出现节点文字、图形被裁切的问题
内容的提问来源于stack exchange,提问作者booklover
相关产品推荐
相关产品推荐

