Build training data. Get paid.

1 min read Original article ↗

1import numpy as np

2from sklearn.metrics import mean_squared_error

3 

4def train_gradient_boosted_regressor(

5 X_train, y_train, X_val, y_val,

6 n_estimators=500, lr=0.01, max_depth=4

7):

8 """Gradient boosted regressor with early stopping."""

9 

10 residuals = y_train.copy()

11 trees = []

12 val_scores = []

13 best_val, patience_ctr = np.inf, 0

14 

15 for i in range(n_estimators):

16 tree = DecisionTreeRegressor(

17 max_depth=max_depth,

18 min_samples_leaf=5

19 )

20 tree.fit(X_train, residuals)

21 pred = tree.predict(X_train)

22 residuals -= lr * pred

23 trees.append((lr, tree))

24 

25 val_pred = predict(trees, X_val)

26 val_mse = mean_squared_error(y_val, val_pred)

27 val_scores.append(val_mse)

28 

29 if val_mse < best_val - 1e-4:

30 best_val = val_mse

31 patience_ctr = 0

32 else:

33 patience_ctr += 1

34 if patience_ctr >= 20:

35 break

36 

37 return trees, val_scores