PCA

作者: 殁月 | 来源:发表于2021-01-18 16:05 被阅读0次

什么是PCA

PCA是目前最为流行的的降维算法
举个例子,把下图二维数据降维成一维数据。 我们可以找出更低维度的空间,将高纬降到这个空间里。下图就是找出一条直线将平面的点映射到这条直线上。


image

这条“线”有什么要求呢?可以看下图例子,假如我们找的是粉红色的线,那么需要对每个点做更大的变化才能投影到一条直线上。无疑,这一定不是合适的那条直线。我们要找的就是可以使蓝色线段最小的那条线。


image.png

问题的关键是如何找出这一条“直线”?
这里就要引入协方差的概念了。


协方差矩阵公式

假设X是一个二维的数据的集合。则下图右式便是求协方差矩阵的公式


协方差矩阵 协方差矩阵对角化

PCA实例

流程

1.“0”中心化
2.协方差矩阵计算公式

  1. 求出特征值

代码实现

#Python实现PCA
import numpy as np

def pca(X,k):
  n_samples, n_features = X.shape
  print(n_samples, n_features)
#   每个特征的平均值
  mean=np.array([np.mean(X[:,i]) for i in range(n_features)])

  #归一化
  norm_X=X-mean
  print(norm_X)
  #scatter matrix
  scatter_matrix=np.dot(np.transpose(norm_X),norm_X)
  #Calculate the eigenvectors and eigenvalues
  eig_val, eig_vec = np.linalg.eig(scatter_matrix)
  eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(n_features)]
  # sort eig_vec based on eig_val from highest to lowest
  eig_pairs.sort(reverse=True)
  # select the top k eig_vec
  feature=np.array([ele[1] for ele in eig_pairs[:k]])
  #get new data
  data=np.dot(norm_X,np.transpose(feature))
  return data

X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

print(pca(X,1))

相关文章

网友评论

      本文标题:PCA

      本文链接:https://www.haomeiwen.com/subject/pgwtzktx.html