机器学习实战---PCA降维
一:参考资料
(一)机器学习基础---无监督学习之降维
(二)机器学习作业---主成分分析PCA
(三)PCA的数学原理(墙)
(四)numpy.linalg,eig(a)函数
(五)numpy.linalg.svd函数
二:代码实现
import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): data = np.loadtxt(filename) return data def pca(dataArr,topNfeat=9999999): #以前使用svd分解,这里直接去求特征值和特征向量 """ :param dataArr: 传入的数据集 :param topNfeat: 可选参数,表示应用的特征 """ meanV = np.mean(dataArr,0) meanRem = dataArr - meanV covArr = np.cov(meanRem,rowvar=0) #获取协方差矩阵 eigVals,eigVects = np.linalg.eig(covArr) #求解特征值和特征向量矩阵 eigValsInd = np.argsort(eigVals)[::-1] #默认获取小到大值,::-1求其逆向 eigValsInd = eigValsInd[:topNfeat] #获取最大N个值 #上面获取了特征值索引,下面获取特征向量 redEigVects = eigVects[:,eigValsInd] #新的特征向量矩阵 #降维 lowDDataArr = meanRem@redEigVects #pca降维 reconArr = lowDDataArr@redEigVects.T+meanV #pca还原,因为redEigVects.T即为redEigVects的逆矩阵,所以这里说进行还原操作 return lowDDataArr,reconArr data = loadDataSet("testSet.txt") lowD,reconArr = pca(data,1) print(lowD.shape) plt.figure() plt.scatter(data[:,0],data[:,1],marker="^",s=90) plt.scatter(reconArr[:,0],reconArr[:,1],marker="o",c="r",s=50) plt.show()
本文不多介绍,详细见前面推荐的博客!!!