diff --git a/doc/whats_new.rst b/doc/whats_new.rst index 66e8212947cf0..ebdbd2c03d666 100644 --- a/doc/whats_new.rst +++ b/doc/whats_new.rst @@ -182,6 +182,10 @@ Bug fixes would be raised on trying to stack matrices with different dimensions. :issue:`8093` by :user:`Peter Bull `. + - Fix a bug where :func:`sklearn.linear_model.LassoLars.fit` sometimes + left `coef_` as a list, rather than an ndarray. + :issue:`8160` by :user:`CJ Carey `. + API changes summary ------------------- diff --git a/sklearn/linear_model/least_angle.py b/sklearn/linear_model/least_angle.py index 4384cb56535fe..c31edebca79c1 100644 --- a/sklearn/linear_model/least_angle.py +++ b/sklearn/linear_model/least_angle.py @@ -665,9 +665,9 @@ def fit(self, X, y, Xy=None): self.alphas_ = [] self.n_iter_ = [] + self.coef_ = np.empty((n_targets, n_features)) if self.fit_path: - self.coef_ = [] self.active_ = [] self.coef_path_ = [] for k in xrange(n_targets): @@ -682,7 +682,7 @@ def fit(self, X, y, Xy=None): self.active_.append(active) self.n_iter_.append(n_iter_) self.coef_path_.append(coef_path) - self.coef_.append(coef_path[:, -1]) + self.coef_[k] = coef_path[:, -1] if n_targets == 1: self.alphas_, self.active_, self.coef_path_, self.coef_ = [ @@ -690,7 +690,6 @@ def fit(self, X, y, Xy=None): self.coef_)] self.n_iter_ = self.n_iter_[0] else: - self.coef_ = np.empty((n_targets, n_features)) for k in xrange(n_targets): this_Xy = None if Xy is None else Xy[:, k] alphas, _, self.coef_[k], n_iter_ = lars_path( diff --git a/sklearn/linear_model/tests/test_least_angle.py b/sklearn/linear_model/tests/test_least_angle.py index fbd559695e3b7..9651b1239d08d 100644 --- a/sklearn/linear_model/tests/test_least_angle.py +++ b/sklearn/linear_model/tests/test_least_angle.py @@ -366,8 +366,15 @@ def test_multitarget(): X = diabetes.data Y = np.vstack([diabetes.target, diabetes.target ** 2]).T n_targets = Y.shape[1] - - for estimator in (linear_model.LassoLars(), linear_model.Lars()): + estimators = [ + linear_model.LassoLars(), + linear_model.Lars(), + # regression test for gh-1615 + linear_model.LassoLars(fit_intercept=False), + linear_model.Lars(fit_intercept=False), + ] + + for estimator in estimators: estimator.fit(X, Y) Y_pred = estimator.predict(X) alphas, active, coef, path = (estimator.alphas_, estimator.active_,