决策树 Regressor 模型获取精度最高的模型的 max_depth 值

Posted

技术标签:

【中文标题】决策树 Regressor 模型获取精度最高的模型的 max_depth 值【英文标题】:Decision tree Regressor model get max_depth value of the model with highest accuracy 【发布时间】:2021-01-03 10:35:27 【问题描述】:

使用默认参数从 X_train 集和 Y_train 标签构建决策树回归模型。将模型命名为 dt_reg。

在训练数据集上评估模型准确度并打印其分数。

在测试数据集上评估模型准确性并打印其分数。

预测 X_test 集的前两个样本的房价并打印出来。(提示:使用 predict() 函数)

在 X_train 数据和 Y_train 标签上拟合多个决策树回归器,其中 max_depth 参数值从 2 变为 5。

评估每个模型在测试数据集上的准确性。

提示:利用 for 循环

打印精度最高的模型的max_depth值。

import sklearn.datasets as datasets
from sklearn.model_selection import train_test_split 
from sklearn.tree import DecisionTreeRegressor
import numpy as np
np.random.seed(100) 
boston = datasets.load_boston()
X_train, X_test, Y_train, Y_test = train_test_split(boston.data, boston.target, random_state=30)
print(X_train.shape)
print(X_test.shape)

dt_reg = DecisionTreeRegressor()   
dt_reg = dt_reg.fit(X_train, Y_train) 
print(dt_reg.score(X_train,Y_train))
print(dt_reg.score(X_test,Y_test))
y_pred=dt_reg.predict(X_test[:2])
print(y_pred)

我想要打印精度最高的模型的max_depth值。但是 fresco play 没有提交 让我知道是什么错误。

max_reg = None
max_score = 0  
t=()
for m in range(2, 6) :
    rf_reg = DecisionTreeRegressor(max_depth=m)
    rf_reg = rf_reg.fit(X_train, Y_train) 
    rf_reg_score = rf_reg.score(X_test,Y_test)
    print (m, rf_reg_score ,max_score) 
    if rf_reg_score > max_score :
        max_score = rf_reg_score
        max_reg = rf_reg
        t = (m,max_score) 
print (t)

【问题讨论】:

【参考方案1】:

如果您希望像以前一样继续使用循环,您可以创建另一个名为“best_max_depth”的变量,如果满足您的 if 语句条件(它是最好的模型,所以用 dt_reg.max_depth 替换它的值)远)。

不过,我建议您使用 GridSearchCV 从您的最佳模型中提取参数并循环遍历不同的参数值。

max_reg = None
max_score = 0  
best_max_depth = None
t=()
for m in range(2, 6) :
    rf_reg = DecisionTreeRegressor(max_depth=m)
    rf_reg = rf_reg.fit(X_train, Y_train) 
    rf_reg_score = rf_reg.score(X_test,Y_test)
    print (m, rf_reg_score ,max_score) 
    if rf_reg_score > max_score :
        max_score = rf_reg_score
        max_reg = rf_reg
        
        best_max_depth = rf_reg.max_depth
        
        t = (m,max_score) 
print (t)

【讨论】:

【参考方案2】:

试试这个代码 -

myList = list(range(2,6))
scores =[]
for i in myList:
  dt_reg = DecisionTreeRegressor(max_depth=i)
  dt_reg.fit(X_train,Y_train)
  scores.append(dt_reg.score(X_test, Y_test))
print(myList[scores.index(max(scores))])

【讨论】:

以上是关于决策树 Regressor 模型获取精度最高的模型的 max_depth 值的主要内容,如果未能解决你的问题,请参考以下文章

基于Python实现的决策树模型

scikit学习决策树模型评估

决策树的分类报告参数(精度、召回率、f1 分数、支持)为 1.0

预测模型是否准确率越高越好?

如何在 pyspark 中可视化决策树模型/对象?

机器学习之决策树与随机森林模型