当前位置:   article > 正文

主成分分析(PCA)简单代码实现(原理待补)_如何使用pca代码构建情绪指数

如何使用pca代码构建情绪指数

简单用代码实现了主成分分析(PCA)原理详解_李春春的专栏-CSDN博客_主成分分析中的PCA实例,只是简单实现了数理逻辑,通用性不高。

第一步:计算均值

  1. avrg = np.mean(Data, axis=0)
  2. x_avrg = avrg[0]
  3. y_avrg = avrg[1]
  4. print("Avrg:", x_avrg, y_avrg)
  1. for i in range(10):
  2. DataAdjust[i, 0] = Data[i, 0] - x_avrg
  3. DataAdjust[i, 1] = Data[i, 1] - y_avrg
  4. print("DataAdjust:", DataAdjust)

第二步:求特征方差矩阵

  1. cov = np.cov(DataAdjust, rowvar = False) # or
  2. print("Cov:", cov)

第三步:求协方差的特征值和特征向量 

  1. eigenvectors = np.linalg.eig(cov)[1]
  2. eigenvalues = np.linalg.eig(cov)[0]
  3. print("Eig_Vectors:", eigenvectors)
  4. print("Eig_Values:", eigenvalues)

 第四步:将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

  1. max_eigenvalues = np.argsort(-eigenvalues)
  2. print("Max_Eig_Value:", max_eigenvalues)
  3. tmp = max_eigenvalues[0]
  4. for i in range(2):
  5. EigenVectors[i] = eigenvectors[i, tmp]
  6. print("EigenVectors:",EigenVectors)

第五步: 将样本点投影到选取的特征向量上。

  1. FinalData = np.matmul(DataAdjust, EigenVectors)
  2. print("FinalData:", FinalData)

这次代码较为简单,过程比较顺利,大部分计算NumPy以及涵盖,这次学到了很多新功能。

如np.mean() np.cov() np.linalg.eig() np.matmul()等。

特别注意的是第五步的矩阵乘法:如果矩阵是二维的,那么 dot 和 matmul 函数的结果是相同的。

完整代码如下:

  1. import numpy as np
  2. Data = np.array([[2.5, 2.4],
  3. [0.5, 0.7],
  4. [2.2, 2.9],
  5. [1.9, 2.2],
  6. [3.1, 3.0],
  7. [2.3, 2.7],
  8. [2, 1.6],
  9. [1, 1.1],
  10. [1.5, 1.6],
  11. [1.1, 0.9]])
  12. DataAdjust = np.zeros((10, 2))
  13. eigenvectors = np.zeros(2)
  14. eigencvalues = np.zeros((2,2))
  15. max_eigenvalues = np.zeros(2)
  16. FinalData = np.zeros((10,1))
  17. EigenVectors = np.zeros((1,2))
  18. avrg = np.mean(Data, axis=0)
  19. x_avrg = avrg[0]
  20. y_avrg = avrg[1]
  21. print("Avrg:", x_avrg, y_avrg)
  22. for i in range(10):
  23. DataAdjust[i, 0] = Data[i, 0] - x_avrg
  24. DataAdjust[i, 1] = Data[i, 1] - y_avrg
  25. print("DataAdjust:", DataAdjust)
  26. cov = np.cov(DataAdjust, rowvar = False)
  27. print("Cov:", cov)
  28. eigenvectors = np.linalg.eig(cov)[1]
  29. print("Eig_Vectors:", eigenvectors)
  30. eigenvalues = np.linalg.eig(cov)[0]
  31. print("Eig_Values:", eigenvalues)
  32. max_eigenvalues = np.argsort(-eigenvalues)
  33. print("Max_Eig_Value:", max_eigenvalues)
  34. tmp = max_eigenvalues[0]
  35. for i in range(2):
  36. EigenVectors[i] = eigenvectors[i, tmp]
  37. print("EigenVectors:",EigenVectors)
  38. FinalData = np.matmul(DataAdjust, EigenVectors)
  39. print("FinalData:", FinalData)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/127182
推荐阅读
相关标签
  

闽ICP备14008679号