PCA(主成成分分析)是实现降维的方法,其原理涉及到方差、协方差、SVD等等。
推导过程链接:https://zhuanlan.zhihu.com/p/21580949
实现过程细节部分可参考链接:http://www.jianshu.com/p/4528aaa6dc48
总体来说,PCA算法步骤如下:
1. 将原始数据按列组成n行m列矩阵X
2. 将X每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3. 求出协方差矩阵C
4. 求出协方差矩阵对应的特征值和特征向量
5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6. Y=PX即为降维到k维后的数据
环境:python3
使用代码实现为:
import numpy as np
#将矩阵转置
X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]).T
def zeroMean(dataMat):
#按行求均值
meanVal = np.mean(dataMat,axis=1)
newMat = dataMat.T - meanVal
return newMat.T
def pca(X,k):
newMat = zeroMean(X)
#求协方差
C = np.cov(newMat, bias=0)
#求特征值和特征向量,特征向量是按列放的,即一列代表一个特征向量
eigVals, eigVects = np.linalg.eig(C)
#对特征值从小到大排序
eigValIndice = np.argsort(eigVals)
n_eigValIndice = eigValIndice[-1:-(n+1):-1]
#最大的n个特征对应的特征向量
n_eigVect=eigVects[:,n_eigValIndice]
lowData = n_eigVect.T.dot(newMat)
return lowData.T
pca(X,1)