xgboost中的tree_method ='exact'真的意味着使用精确的贪婪算法进行拆分查找吗?
我问这个问题是因为xgboost运行得很快。这是我用于运行测试的脚本
从xgboost导入XGBRegressor作为rr
将numpy导入为np
从sklearn.model_selection导入train_test_split
进口泡菜
导入系统
从进口时间开始
t1 =时间()
数据= sys.argv [1]
使用open(data,'rb')作为源:
数据= pickle.load(源)
np.random.shuffle(数据)
x = [数据中项目的[item [0]]
y = [针对数据中项目的[item [1]]
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)]
#确切的型号
model_exact = rr(max_depth = 5,
n_estimators = 1,
slient = False,
min_child_weight = 0,
tree_method ='精确')
model_exact.fit(x_train,
y_train,
eval_set = eval_set,
eval_metric =“ mae”,
early_stopping_rounds = 30)
t2 =时间()
print(f“使用时间:{t2-t1}”)
用于测试的腌制数据已在此处上传。
每个实例中有96个功能部件,总共11450个实例。
xgboost通过在单核(1.3 GHz Intel Core i5)上运行找到了0.9804270267486572s中的第一个拆分。如果xgboost实际上对所有可能的分割都进行了贪婪搜索,则意味着xgboost仅在0.9804270267486572s中就可以计算11450 x 96 = 1099200个分割!
xgboost真的那么强大吗?还是我误会了tree_method =确切?