#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))])