Skip to content

Commit

Permalink
update discriminant analysis for memory usage
Browse files Browse the repository at this point in the history
  • Loading branch information
bobchennan committed Apr 2, 2018
1 parent cd76f9b commit 48005ac
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions sklearn/discriminant_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,15 @@ def _class_means(X, y):
Returns
-------
means : array-like, shape (n_features,)
means : array-like, shape (n_classes, n_features)
Class means.
"""
means = []
classes = np.unique(y)
for group in classes:
means = np.empty(shape=(len(classes), X.shape[1]), dtype=X.dtype)
for idx, group in enumerate(classes):
Xg = X[y == group, :]
means.append(Xg.mean(0))
return np.asarray(means)
means[idx] = Xg.mean(0)
return means


def _class_cov(X, y, priors=None, shrinkage=None):
Expand Down Expand Up @@ -120,11 +120,14 @@ def _class_cov(X, y, priors=None, shrinkage=None):
Class covariance matrix.
"""
classes = np.unique(y)
covs = []
for group in classes:
cov = np.zeros((X.shape[1], X.shape[1]), dtype=X.dtype)
for idx, group in enumerate(classes):
Xg = X[y == group, :]
covs.append(np.atleast_2d(_cov(Xg, shrinkage)))
return np.average(covs, axis=0, weights=priors)
if priors is None:
cov = cov + np.atleast_2d(_cov(Xg, shrinkage)) / len(classes)
else:
cov = cov + priors[idx] * np.atleast_2d(_cov(Xg, shrinkage))
return cov


class LinearDiscriminantAnalysis(BaseEstimator, LinearClassifierMixin,
Expand Down

0 comments on commit 48005ac

Please sign in to comment.