Skip to content

Commit 2df283d

Browse files
authored
Update dimensionality_reduction.py
1 parent cbd03e9 commit 2df283d

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

machine_learning/dimensionality_reduction.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,14 +183,17 @@ def linear_discriminant_analysis(
183183
sb = covariance_between_classes(features, labels, classes)
184184
sw = covariance_within_classes(features, labels, classes)
185185

186+
# Add regularization to Sw to avoid singular matrix
187+
sw_reg = sw + 1e-6 * np.eye(sw.shape[0])
188+
186189
# Solve the generalized eigenvalue problem: Sb v = λ Sw v
187-
eigenvalues, eigenvectors = eigh(sb, sw)
190+
eigenvalues, eigenvectors = eigh(sb, sw_reg)
188191

189192
# Sort eigenvectors by eigenvalues (descending)
190193
idx = np.argsort(eigenvalues)[::-1]
191194
eigenvectors = eigenvectors[:, idx]
192195

193-
# Take top "dimensions"
196+
# Take top "dimensions" eigenvectors
194197
filtered_eigenvectors = eigenvectors[:, :dimensions]
195198

196199
projected_data = np.dot(filtered_eigenvectors.T, features)
@@ -200,7 +203,6 @@ def linear_discriminant_analysis(
200203
logging.error("Dataset empty")
201204
raise AssertionError
202205

203-
204206
def locally_linear_embedding(
205207
features: np.ndarray, dimensions: int, n_neighbors: int = 12, reg: float = 1e-3
206208
) -> np.ndarray:

0 commit comments

Comments
 (0)