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

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

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

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


PCA实例

1.“0”中心化
2.协方差矩阵计算公式
- 求出特征值
代码实现
#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))
网友评论