鱼C论坛

 找回密码
 立即注册
查看: 1902|回复: 1

[技术交流] Python实现PCA

[复制链接]
发表于 2020-11-19 16:42:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
参考书籍:《机器学习实战》


  1. import numpy as np

  2. def loadDataSet(fileName, delim = '\t'):
  3.     fr = open(fileName)
  4.     stringArr = [line.strip().split(delim) for line in fr.readlines()]
  5.     datArr = [list(map(float,line)) for line in stringArr]
  6.     return np.mat(datArr)

  7. def pca(dataMat, topNfeat = 9999999):
  8.     meanVals = np.mean(dataMat, axis = 0)
  9.     meanRemoved = dataMat - meanVals
  10.     covMat = np.cov(meanRemoved, rowvar = 0)#rowvar=0表示传入的一行表示一个样本
  11.     eigVals, eigVects = np.linalg.eig(np.mat(covMat))
  12.     eigValInd = np.argsort(eigVals)           
  13.     eigValInd = eigValInd[:-(topNfeat+1):-1]  
  14.     redEigVects = eigVects[:,eigValInd]      
  15.     lowDDataMat = meanRemoved * redEigVects#所有点在新的一组基上的值,无方向
  16.     reconMat = (lowDDataMat * redEigVects.T) + meanVals#所有点在新的一组基上的投影,有方向的
  17.     return lowDDataMat, reconMat


  18. if __name__ == '__main__':
  19.     dataMat = loadDataSet(r'C:\...\testSet.txt')
  20.     lowData, reconMat = pca(dataMat, 1)
  21.    
  22.     import matplotlib.pyplot as plt
  23.     fig = plt.figure()
  24.     ax = fig.add_subplot(111)
  25.     ax.scatter(dataMat[:, 0].flatten().A[0], dataMat[:, 1].flatten().A[0],
  26.                marker = '^', s = 90)
  27.     ax.scatter(reconMat[:, 0].flatten().A[0], reconMat[:, 1].flatten().A[0],
  28.                marker = 'o', s = 50, c = 'red')
  29.    
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-19 16:43:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表