def transform(self, X, y):
"""transform function"""
XMat = np.array(X)
yMat = np.array(y)
if XMat.shape[0] != yMat.shape[0]:
yMat = yMat.T
assert XMat.shape[0] == yMat.shape[0]
XMat -= XMat.mean(axis=0)
Sw, Sb = calc_Sw_Sb(XMat, yMat)
if self.method == 'svd':
U, S, V = np.linalg.svd(Sw)
S = np.diag(S)
Sw_inversed = V * np.linalg.pinv(S) * U.T
A = Sw_inversed * Sb
elif self.method == 'auto':
A = np.linalg.pinv(Sw) * Sb
eigval, eigvec = np.linalg.eig(A)
eigval = eigval[0:self.n_components]
eigvec = eigvec[:, 0:self.n_components]
X_transformed = np.dot(XMat, eigvec)
self.W = eigvec
return X_transformed
评论列表
文章目录