Source code for heamy.utils.optimizer

# coding:utf-8
from scipy.optimize import minimize


[docs]class Optimizer(object): def __init__(self, models, scorer, test_size=0.2): self.test_size = test_size self.scorer = scorer self.models = models self.predictions = [] self.y = None self._predict() def _predict(self): for model in self.models: y_true_list, y_pred_list = model.validate(k=1, test_size=self.test_size) if self.y is None: self.y = y_true_list[0] self.predictions.append(y_pred_list[0])
[docs] def loss_func(self, weights): final_prediction = 0 for weight, prediction in zip(weights, self.predictions): final_prediction += weight * prediction return self.scorer(self.y, final_prediction)
[docs] def minimize(self, method): starting_values = [0.5] * len(self.predictions) cons = ({'type': 'eq', 'fun': lambda w: 1 - sum(w)}) bounds = [(0, 1)] * len(self.predictions) res = minimize(self.loss_func, starting_values, method=method, bounds=bounds, constraints=cons) print('Best Score (%s): %s' % (self.scorer.__name__, res['fun'])) print('Best Weights: %s' % res['x']) return res['x']