|
10 | 10 | from sklearn.utils.testing import assert_equal
|
11 | 11 |
|
12 | 12 | from sklearn.linear_model.base import LinearRegression
|
13 |
| -from sklearn.linear_model.base import center_data, sparse_center_data, _rescale_data |
| 13 | +from sklearn.linear_model.base import center_data |
| 14 | +from sklearn.linear_model.base import sparse_center_data |
| 15 | +from sklearn.linear_model.base import _rescale_data |
| 16 | +from sklearn.utils.extmath import safe_sparse_dot |
14 | 17 | from sklearn.utils import check_random_state
|
15 |
| -from sklearn.utils.testing import assert_raise_message |
16 | 18 | from sklearn.utils.testing import assert_greater
|
17 | 19 | from sklearn.datasets.samples_generator import make_sparse_uncorrelated
|
18 | 20 | from sklearn.datasets.samples_generator import make_regression
|
@@ -47,31 +49,33 @@ def test_linear_regression_sample_weights():
|
47 | 49 | rng = np.random.RandomState(0)
|
48 | 50 | n_samples, n_features = 6, 50 # over-determined system
|
49 | 51 |
|
50 |
| - for fit_intercept in [True, False]: |
51 |
| - y = rng.randn(n_samples) |
52 |
| - X = rng.randn(n_samples, n_features) |
53 |
| - sample_weight = 1.0 + rng.rand(n_samples) |
54 |
| - |
55 |
| - reg = LinearRegression(fit_intercept=fit_intercept) |
56 |
| - reg.fit(X, y, sample_weight=sample_weight) |
57 |
| - coefs1 = reg.coef_ |
58 |
| - intercept1 = reg.intercept_ |
59 |
| - |
60 |
| - assert_equal(reg.coef_.shape, (X.shape[1], )) |
61 |
| - assert_greater(reg.score(X, y, sample_weight=sample_weight), 0.9) |
62 |
| - assert_greater(r2_score(y, reg.predict(X), |
63 |
| - sample_weight=sample_weight), 0.9) # same as above |
64 |
| - |
65 |
| - # Sample weight can be implemented via a simple rescaling |
66 |
| - # for the square loss. |
67 |
| - scaled_y = y * np.sqrt(sample_weight) |
68 |
| - scaled_X = X * np.sqrt(sample_weight)[:, np.newaxis] |
69 |
| - reg.fit(scaled_X, scaled_y) |
70 |
| - coefs2 = reg.coef_ |
71 |
| - intercept2 = reg.intercept_ |
72 |
| - |
73 |
| - assert_array_almost_equal(coefs1, coefs2) |
74 |
| - assert_array_almost_equal(intercept1, intercept2) |
| 52 | + y = rng.randn(n_samples) |
| 53 | + X_ = rng.randn(n_samples, n_features) |
| 54 | + sample_weight = 1.0 + rng.rand(n_samples) |
| 55 | + |
| 56 | + for X in [X_, sparse.csr_matrix(X_)]: |
| 57 | + for fit_intercept in [True, False]: |
| 58 | + reg = LinearRegression(fit_intercept=fit_intercept) |
| 59 | + reg.fit(X, y, sample_weight=sample_weight) |
| 60 | + coefs1 = reg.coef_ |
| 61 | + intercept1 = reg.intercept_ |
| 62 | + |
| 63 | + assert_equal(reg.coef_.shape, (X.shape[1], )) |
| 64 | + assert_greater(reg.score(X, y, sample_weight=sample_weight), 0.9) |
| 65 | + assert_greater(r2_score(y, reg.predict(X), |
| 66 | + sample_weight=sample_weight), 0.9) # same as above |
| 67 | + |
| 68 | + # Sample weight can be implemented via a simple rescaling |
| 69 | + # for the square loss. |
| 70 | + scaled_y = y * np.sqrt(sample_weight) |
| 71 | + scaled_X = \ |
| 72 | + safe_sparse_dot(np.diag(np.sqrt(sample_weight)), X) |
| 73 | + reg.fit(scaled_X, scaled_y) |
| 74 | + coefs2 = reg.coef_ |
| 75 | + intercept2 = reg.intercept_ |
| 76 | + |
| 77 | + assert_array_almost_equal(coefs1, coefs2) |
| 78 | + assert_array_almost_equal(intercept1, intercept2) |
75 | 79 |
|
76 | 80 |
|
77 | 81 | def test_raises_value_error_if_sample_weights_greater_than_1d():
|
|
0 commit comments