'Fit linear model.
Parameters
X : numpy array or sparse matrix of shape [n_samples,n_features]
Training data
y : numpy array of shape [n_samples, n_targets]
Target values. Will be cast to X\'s dtype if necessary
sample_weight : numpy array of shape [n_samples]
Individual weights for each sample
.. versionadded:: 0.17
parameter *sample_weight* support to LinearRegression.
Returns
self : returns an instance of self.'

def fit(self, X, y, sample_weight=None):

    n_jobs_ = self.n_jobs
    (X, y) = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'], y_numeric=True, multi_output=True)
    if ((sample_weight is not None) and (np.atleast_1d(sample_weight).ndim > 1)):
        raise ValueError('Sample    weights    must    be    1D    array    or    scalar')
    (X, y, X_offset, y_offset, X_scale) = self._preprocess_data(X, y, fit_intercept=self.fit_intercept, normalize=self.normalize, copy=self.copy_X, sample_weight=sample_weight)
    if (sample_weight is not None):
        (X, y) = _rescale_data(X, y, sample_weight)
    if sp.issparse(X):
        if (y.ndim < 2):
            out = sparse_lsqr(X, y)
            self.coef_ = out[0]
            self._residues = out[3]
        else:
            outs = Parallel(n_jobs=n_jobs_)((delayed(sparse_lsqr)(X, y[:, j].ravel()) for j in range(y.shape[1])))
            self.coef_ = np.vstack((out[0] for out in outs))
            self._residues = np.vstack((out[3] for out in outs))
    else:
        (self.coef_, self._residues, self.rank_, self.singular_) = linalg.lstsq(X, y)
        self.coef_ = self.coef_.T
    if (y.ndim == 1):
        self.coef_ = np.ravel(self.coef_)
    self._set_intercept(X_offset, y_offset, X_scale)
    return self
