本文參考自:https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/13.PCA/pca.py
1. 用途:
-
通俗來說: 考察一個人的智力情況,就直接看數學成績就行(存在:數學、語文、英語成績) 。就是找出一個最主要的特征,然后進行分析。
-
數據壓縮 (Data Compression) ,將高維數據變為低維數據。
-
可視化數據 (3D->2D等)
2. 2D-->1D,nD-->kD
-
如下圖所示,所有數據點可以投影到一條直線,是投影距離的平方和(投影誤差)最小





# 歸一化數據
def featureNormalize(X):
'''(每一個數據-當前列的均值)/當前列的標准差'''
n = X.shape[1]
mu = np.zeros((1,n));
sigma = np.zeros((1,n))
mu = np.mean(X,axis=0)
sigma = np.std(X,axis=0)
for i in range(n):
X[:,i] = (X[:,i]-mu[i])/sigma[i]
return X,mu,sigma

Sigma = np.dot(np.transpose(X_norm),X_norm)/m # 求Sigma
eigVals,eigVects = np.linalg.eig(np.mat(Sigma))
>>> x = np.array([3, 1, 2])
>>> np.argsort(x)
array([1, 2, 0]) # index,1 = 1; index,2 = 2; index,0 = 3
>>> y = np.argsort(x)
>>> y[::-1]
array([0, 2, 1])
>>> y[:-3:-1]
array([0, 2]) # 取出 -1, -2
>>> y[:-6:-1]
array([0, 2, 1])
eigValInd = argsort(eigVals)
# print 'eigValInd1=', eigValInd
# -1表示倒序,返回topN的特征值[-1 到 -(topNfeat+1) 但是不包括-(topNfeat+1)本身的倒敘]
eigValInd = eigValInd[:-(topNfeat+1):-1]
# print 'eigValInd2=', eigValInd
# 重組 eigVects 最大到最小
redEigVects = eigVects[:, eigValInd]
(5)求降維后的數值
lowDDataMat = meanRemoved * redEigVects








