Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.21 KB | None | 0 0
  1. class GradientBoostingMSE:
  2.     def __init__(self, n_estimators, learning_rate=0.1, max_depth=5, feature_subsample_size=None,
  3.                  **trees_parameters):
  4.  
  5.         self.n_estimators = n_estimators
  6.         self.learning_rate = learning_rate
  7.         self.max_depth = max_depth
  8.         self.feature_subsample_size = feature_subsample_size
  9.  
  10.         self.trees = []
  11.         for _ in range(n_estimators):
  12.             self.trees.append(DecisionTreeRegressor(max_depth=max_depth,
  13.                                                     max_features=feature_subsample_size,
  14.                                                     splitter='random',
  15.                                                     **trees_parameters))
  16.         """
  17.        n_estimators : int
  18.            The number of trees in the forest.
  19.  
  20.        learning_rate : float
  21.            Use learning_rate * gamma instead of gamma
  22.  
  23.        max_depth : int
  24.            The maximum depth of the tree. If None then there is no limits.
  25.  
  26.        feature_subsample_size : float
  27.            The size of feature set for each tree. If None then use recommendations.
  28.        """
  29.  
  30.  
  31.     def fit(self, X, y):
  32.         """
  33.        X : numpy ndarray
  34.            Array of size n_objects, n_features
  35.  
  36.        y : numpy ndarray
  37.            Array of size n_objects
  38.        """
  39.         pred_values = 0
  40.         self.opt_params = np.zeros(self.n_estimators)
  41.         for j in range(self.n_estimators):
  42.             b = self.trees[j].fit(X, y)
  43.             values = b.predict(X)
  44.             res = minimize_scalar(lambda alpha: self.MSE(y, pred_values + alpha * values))
  45.             self.opt_params[j] = res.x
  46.             pred_values = values
  47.  
  48.  
  49.  
  50.     def MSE(self, y_true, y_pred):
  51.         return np.mean((y_true - y_pred)**2)
  52.  
  53.     def predict(self, X):
  54.         """
  55.        X : numpy ndarray
  56.            Array of size n_objects, n_features
  57.  
  58.        Returns
  59.        -------
  60.        y : numpy ndarray
  61.            Array of size n_objects
  62.        """
  63.  
  64.         pred_b = 0
  65.         for j in range(self.n_estimators):
  66.             a_j = self.trees[j].predict(X)
  67.             b = pred_b + self.opt_params[j] * self.learning_rate * a_j
  68.             pred_b = b
  69.  
  70.         return pred_b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement