问题描述
这是我的代码:
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
试试。
其次,用于定义模型与数据拟合程度的性能指标完全取决于您和您面临的问题的背景。例如,在自然科学(如物理学)中,您可能希望 R2 指标高于 0.9,但也许在社会科学(如经济学)中,R2 为 0.5 可能就足够了。就像我说的,这取决于数据的上下文。你的 mse 是 0.66,对我来说这听起来很合理,但考虑到你的因变量的范围,这个错误可能很大。
您可以做的一件事是测试结果的稳定性。如果训练和测试数据上的 R2 差异很大,则您的决策树可能在训练数据集上过度拟合。为了解决这个问题,您可能需要增加测试规模、使用 k 折交叉验证、使用另一组超参数重新训练模型、切换到另一种算法、添加更多特征或通过删除不相关的自变量来降低问题的维度。
我建议在您的自变量上下文中评估 MSE,并比较多种算法的性能指标,例如逻辑回归、随机森林、梯度提升等,然后选择您最喜欢的一种。
查看所有 these performance metrics(在 sklearn.metrics
中可用)。