Модель регрессора дерева решений получить значение max_depth модели с наивысшей точностью

#python #tensorflow #machine-learning #decision-tree #machine-learning-model

#питон #тензорный поток #машинное обучение #дерево решений #модель машинного обучения #python

Вопрос:

Постройте модель регрессора дерева решений на основе меток X_train set и 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 не отправлены, дайте мне знать, в чем ошибка.

 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’ и заменить ее значение на dt_reg.max_depth, если ваше условие if-statement выполнено (на данный момент это лучшая модель).

Однако я предлагаю вам заглянуть в 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))])