def test_linear_regression(self): np.random.seed(55) X = np.random.rand(1000, 3) w = [0.5, 1.3, -2.5] b = 12.5 y = X[:, 0] * w[0] + X[:, 1] * w[1] + X[:, 2] * w[2] + b # should convert to the exact solution with only a little regularization lr = LinearRegression(lam=0.001) lr.fit(X, y) ypred = lr.predict(X) self.assertTrue(pearsonr_weighted(y, ypred) > 0.99) # try weighted weights = np.random.rand(1000) lr = LinearRegression(lam=0.001) lr.fit(X, y, weights=weights) ypred = lr.predict(X) self.assertTrue(pearsonr_weighted(y, ypred, weights))
def test_pearson_weighted(self): from scipy.stats import pearsonr x = np.array([1, 2, 3, 4, 5]) y = np.array([1.0, 1.5, -0.5, 3.4, 2.9]) weights = np.array([1, 0, 0.5, 2, 1.5]) r_no_wgt = pearsonr(x, y)[0] r_no_wgt_test = evaluation.pearsonr_weighted(x, y) r_ones_wgt = evaluation.pearsonr_weighted(x, y, np.ones(x.shape)) self.assertTrue(abs(r_no_wgt - r_no_wgt_test) < 1e-12) self.assertTrue(abs(r_no_wgt - r_ones_wgt) < 1e-12) xm = mean_std_weighted(x, weights) ym = mean_std_weighted(y, weights) r_wgt = np.sum( (x - xm['mean']) * (y - ym['mean']) * weights) / np.sum(weights) self.assertTrue( (evaluation.pearsonr_weighted(x, y, weights) - r_wgt) < 1e-12)