-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpca.py
38 lines (30 loc) · 1.01 KB
/
pca.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np
class PCA:
def __init__(self, n_components):
self.n_components = n_components
self.components = None
self.mean = None
def fit(self, X):
# Mean centering
self.mean = np.mean(X, axis=0)
X = X - self.mean
# Computing covariance matrix
cov = np.cov(X.T)
# Eigen decomposition
eigenvalues, eigenvectors = np.linalg.eig(cov)
# Sorting eigenvectors by eigenvalues in descending order
eigenvectors = eigenvectors.T
idxs = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idxs]
eigenvectors = eigenvectors[idxs]
# Storing first n eigenvectors
self.components = eigenvectors[0:self.n_components]
def transform(self, X):
# Project data
X = X - self.mean
return np.dot(X, self.components.T)
# Example usage:
# X would be predefined data
# pca = PCA(n_components=2)
# pca.fit(X)
# X_projected = pca.transform(X)