Python 回归树解释

Python Regression Tree interpretation

这是我的代码:

regr = DecisionTreeRegressor(max_depth = 2)

regr.fit(X_train, y_train)

y_pred = regr.predict(X_test)

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print('DT: mse = '+ str(mse) + ' r2 = '+ str(r2))
->result: DT: mse = 0.6600129794020736 r2 = 0.46983848613583734

sTree = export_text(regr, feature_names = list(X_train.columns))
#here is a mistake
#it says: 'numpy.ndarray' object has no attribute 'columns'

plt.figure()
plot_tree(regr, filled = True, feature_names=list(X.columns),fontsize = 9)
plt.savefig('tree.pdf')

我有两个问题。 首先,正如我添加的那样,sTree 行中存在错误。如果你能告诉我我在那行的错误,那就太好了。 我的第二个问题是,我不知道这个回归树是否良好且有效。我如何解释回归树?

解决您的意见:MSE 是每个预测值减去实际值的平均值的 2 次方。直观地说,它是您的模型所产生的平方误差的平均值。越接近零越好。 R2 是您的模型可以解释的目标方差的比例。越接近 1,你的模型越好。

现在,第一个错误出现了,因为显然 X_train 是一个 numpy 多维数组,因此没有 columns 属性。请尝试使用 X_train.dtype.names

其次,用于定义模型与数据拟合程度的性能指标完全取决于您和您所面临问题的背景。例如,在物理学等自然科学中,您可能需要 0.9 以上的 R2 指标,但在经济学等社会科学中,0.5 的 R2 可能就足够了。就像我说的,这取决于您的数据的上下文。你的 mse 是 0.66,这对我来说听起来很合理,但考虑到你的因变量的范围,这个错误可能很大。

您可以做的一件事是测试结果的稳定性。如果训练数据和测试数据的 R2 差异很大,则您的决策树可能在训练数据集上过度拟合。要解决这个问题,您可能需要增加测试规模、使用 k 折交叉验证、使用另一组超参数重新训练您的模型、切换到另一种算法、添加更多功能或通过删除不相关的自变量来降低问题的维度。

我建议在你的自变量的上下文中评估 MSE,并比较多种算法的性能指标,例如逻辑回归、随机森林、梯度提升等,然后选择你最喜欢的一个。

查看所有 these performance metricssklearn.metrics 可用)。