def PCA(dataset, topFeatNum = 2):
#????
#1????????????
#2???????????
#3??????????????
#4???xx??????????
#5?????????????
datasetMat = np.mat(dataset)
meanValues = np.mean(datasetMat, axis = 0)
stds = np.std(datasetMat, axis = 0)
adjustedDatasetMat = datasetMat - meanValues
adjustedDatasetMat = adjustedDatasetMat / stds
plt.plot(adjustedDatasetMat[:, 0], adjustedDatasetMat[:, 1], "r^")
plt.show()
covMat = np.cov(adjustedDatasetMat, rowvar = 0)
#covMat = (adjustedDatasetMat.T * adjustedDatasetMat) / datasetMat.shape[0] #?????0????????
eigenVals, eigenVecs = np.linalg.eig(np.mat(covMat))
draw(eigenVals) #?????????????????
eigenValsIndex = np.argsort(eigenVals) #?eigenVals???????????????
eigenValsIndex = eigenValsIndex[: -(topFeatNum+1) : -1] #??eigenVals???topFeatNum?????
eigenVecs = eigenVecs[:, eigenValsIndex] #????topFeatNum????????eigenValues????
transformedDatasetMat = adjustedDatasetMat * eigenVecs
return transformedDatasetMat
评论列表
文章目录