Пример #1
0
    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))
Пример #2
0
    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)