Означает ли `tree_method = 'correct'` в` xgboost` точный жадный алгоритм? - PullRequest
1 голос
/ 10 марта 2019

Действительно ли tree_method = 'exact' in xgboost означает использование точного жадного алгоритма для поиска разделения?

Я задаю этот вопрос, потому что xgboost работает неоправданно быстро.Вот сценарий, который я использовал для запуска теста

from xgboost import XGBRegressor as rr
import numpy as np
from sklearn.model_selection import train_test_split
import pickle 
import sys
from time import time

t1 = time()
data = sys.argv[1]
with open(data, 'rb') as source:
    data = pickle.load(source)
np.random.shuffle(data)
x = [item[0] for item in data]
y = [item[1] for item in data]
x_train, x_val, y_train, y_val = train_test_split(x, y, test_size = 0.2, random_state = 100)
eval_set = [(x_train, y_train), (x_val, y_val)]

# Exact model
model_exact = rr(max_depth = 5, 
                 n_estimators = 1,
                 slient = False, 
                 min_child_weight = 0, 
                 tree_method = 'exact')
model_exact.fit(x_train, 
                y_train, 
                eval_set=eval_set,
                eval_metric="mae",
                early_stopping_rounds=30)
t2 = time()
print(f"Time used: {t2 - t1}")

Выбранные данные, использованные для тестирования, были загружены здесь .

В каждом имеется 96 функцийэкземпляра, и всего имеется 11450 экземпляров.

xgboost находит первое разбиение в 0.9804270267486572s, работая на одном ядре (1.3 GHz Intel Core i5).Если xgboost фактически выполняет жадный поиск всех возможных разбиений, это означает, что xgboost оценивает 11450 x 96 = 1099200 разбиений всего за 0.9804270267486572s!

Действительно ли xgboost такой мощный?Или я неправильно понимаю tree_method = exact?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...