2018-07-15 16:38:26 +12:00
import numpy as np
from numpy . testing import assert_approx_equal
2022-10-26 16:56:11 +08:00
import xgboost as xgb
2018-07-15 16:38:26 +12:00
train_data = xgb . DMatrix ( np . array ( [ [ 1 ] ] ) , label = np . array ( [ 1 ] ) )
2020-11-19 17:00:15 -08:00
class TestTreeRegularization :
2018-07-15 16:38:26 +12:00
def test_alpha ( self ) :
params = {
2023-01-11 02:04:56 +08:00
" tree_method " : " exact " ,
" verbosity " : 0 ,
" objective " : " reg:squarederror " ,
" eta " : 1 ,
" lambda " : 0 ,
" alpha " : 0.1 ,
" base_score " : 0.5 ,
2018-07-15 16:38:26 +12:00
}
model = xgb . train ( params , train_data , 1 )
preds = model . predict ( train_data )
# Default prediction (with no trees) is 0.5
# sum_grad = (0.5 - 1.0)
# sum_hess = 1.0
# 0.9 = 0.5 - (sum_grad - alpha * sgn(sum_grad)) / sum_hess
assert_approx_equal ( preds [ 0 ] , 0.9 )
def test_lambda ( self ) :
params = {
2023-01-11 02:04:56 +08:00
" tree_method " : " exact " ,
" verbosity " : 0 ,
" objective " : " reg:squarederror " ,
" eta " : 1 ,
" lambda " : 1 ,
" alpha " : 0 ,
" base_score " : 0.5 ,
2018-07-15 16:38:26 +12:00
}
model = xgb . train ( params , train_data , 1 )
preds = model . predict ( train_data )
# Default prediction (with no trees) is 0.5
# sum_grad = (0.5 - 1.0)
# sum_hess = 1.0
# 0.75 = 0.5 - sum_grad / (sum_hess + lambda)
assert_approx_equal ( preds [ 0 ] , 0.75 )
def test_alpha_and_lambda ( self ) :
params = {
2023-01-11 02:04:56 +08:00
" tree_method " : " exact " ,
" verbosity " : 1 ,
" objective " : " reg:squarederror " ,
" eta " : 1 ,
" lambda " : 1 ,
" alpha " : 0.1 ,
" base_score " : 0.5 ,
2018-07-15 16:38:26 +12:00
}
model = xgb . train ( params , train_data , 1 )
preds = model . predict ( train_data )
# Default prediction (with no trees) is 0.5
# sum_grad = (0.5 - 1.0)
# sum_hess = 1.0
# 0.7 = 0.5 - (sum_grad - alpha * sgn(sum_grad)) / (sum_hess + lambda)
assert_approx_equal ( preds [ 0 ] , 0.7 )
2022-01-10 09:37:44 -08:00
def test_unlimited_depth ( self ) :
x = np . array ( [ [ 0 ] , [ 1 ] , [ 2 ] , [ 3 ] ] )
y = np . array ( [ 0 , 1 , 2 , 3 ] )
model = xgb . XGBRegressor (
n_estimators = 1 ,
eta = 1 ,
tree_method = " hist " ,
grow_policy = " lossguide " ,
reg_lambda = 0 ,
max_leaves = 128 ,
max_depth = 0 ,
) . fit ( x , y )
assert np . array_equal ( model . predict ( x ) , y )