Skip to content

Commit a228e8a

Browse files
committed
FIX division by zero warning in LassoLarsIC
Fixes scikit-learn#3576. First time I named a variable after myself.
1 parent f5300d1 commit a228e8a

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

sklearn/linear_model/least_angle.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,8 @@ def fit(self, X, y, copy_X=True):
12871287
df[k] = np.sum(mask)
12881288

12891289
self.alphas_ = alphas_
1290-
self.criterion_ = n_samples * np.log(mean_squared_error) + K * df
1290+
with np.errstate(divide='ignore'):
1291+
self.criterion_ = n_samples * np.log(mean_squared_error) + K * df
12911292
n_best = np.argmin(self.criterion_)
12921293

12931294
self.alpha_ = alphas_[n_best]

sklearn/linear_model/tests/test_least_angle.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sklearn.utils.testing import assert_greater
1010
from sklearn.utils.testing import assert_raises
1111
from sklearn.utils.testing import ignore_warnings, assert_warns_message
12-
from sklearn.utils.testing import assert_warns
12+
from sklearn.utils.testing import assert_no_warnings, assert_warns
1313
from sklearn.utils import ConvergenceWarning
1414
from sklearn import linear_model, datasets
1515

@@ -468,6 +468,15 @@ def test_lasso_lars_ic():
468468
assert_raises(ValueError, lars_broken.fit, X, y)
469469

470470

471+
def test_no_warning_for_zero_mse():
472+
"""LassoLarsIC should not warn for log of zero MSE."""
473+
y = np.arange(10, dtype=float)
474+
X = y.reshape(-1, 1)
475+
lars = linear_model.LassoLarsIC(normalize=False)
476+
assert_no_warnings(lars.fit, X, y)
477+
assert_true(np.any(np.isinf(lars.criterion_)))
478+
479+
471480
if __name__ == '__main__':
472481
import nose
473482
nose.runmodule()

0 commit comments

Comments
 (0)