Source code for kaggler.ensemble.linear

import numpy as np


[docs]def netflix(es, ps, e0, l=.0001): """Combine predictions with the optimal weights to minimize RMSE. Ref: Töscher, A., Jahrer, M., & Bell, R. M. (2009). The bigchaos solution to the netflix grand prize. Args: es (list of float): RMSEs of predictions ps (list of np.array): predictions e0 (float): RMSE of all zero prediction l (float): lambda as in the ridge regression Returns: (tuple): - (np.array): ensemble predictions - (np.array): weights for input predictions """ m = len(es) n = len(ps[0]) X = np.stack(ps).T pTy = .5 * (n * e0**2 + (X**2).sum(axis=0) - n * np.array(es)**2) w = np.linalg.pinv(X.T.dot(X) + l * n * np.eye(m)).dot(pTy) return X.dot(w), w