深度学习入门—PCA,白化 已经完整阐述了PCA和白化算法的原理,这篇博客更新其算法的Python实现。代码有很完整的注释。
#implement PCA
file=open('/notebooks/pcaData.txt','r')
dataSet=[]
for text in file:
tt=text.strip().split()
line=[]
for t in tt:
line.append(float(t))
dataSet.append(line)
dataSet=np.array(dataSet)
dataSet.shape #(2,45)
import matplotlib.pylab as plt
%matplotlib inline
#画出原数据
plt.figure(1)
plt.scatter(dataSet[0,:],dataSet[1,:])
plt.title("origin data")
#计算协方差矩阵sigma,以及特征向量矩阵u
sigma=dataSet.dot(dataSet.T)/dataSet.shape[1]
print(sigma.shape) #(2,2)
[u,s,v] = np.linalg.svd(sigma)
print(u.shape) #(2,2)
#画出两个主成分方向
plt.figure(2)
plt.plot([0, u[0,0]], [0, u[1,0]])
plt.plot([0, u[0,1]], [0, u[1,1]])
plt.scatter(dataSet[0,:],dataSet[1,:])
#PCA转换数据,不降维
xRot=u.T.dot(dataSet)
xRot.shape #(2,45)
#画出PCA转换后的数据
plt.figure(3)