单纯看公式推导看懂了,是没有用的。
'''Auther: DeniuHeDate:'''import numpy as npfrom sklearn.datasets import load_irisimport matplotlib.pyplot as pltclass PCA():def __init__(self,X,y):self.X = Xself.y = yself.N = len(self.y)self.mean = np.mean(self.X,axis=0)self.C = (1/self.N) * (self.X - self.mean).T @ (self.X-self.mean)self.eigvalue, self.eigvector = np.linalg.eig(self.C)def feature_reduct(self,nComposit):sub = [i for i in range(nComposit)]trans_X = self.X @ self.eigvector[:,sub]return trans_Xif __name__ == '__main__':X, y = load_iris(return_X_y=True)pca = PCA(X,y)print(pca.eigvalue)print(pca.eigvector)print("降维到2维:")trans_X = pca.feature_reduct(nComposit=2)print(trans_X)plt.scatter(trans_X[:,0],trans_X[:,1],c=y)plt.show()
绝知此事要躬行。
后续补充Kernel PCA
如果觉得《Python:PCA(principle component analysis)主成分分析手工代码实现》对你有帮助,请点赞、收藏,并留下你的观点哦!