PCA主成分分析 原理講解 python代碼實現


本文參考自:https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/13.PCA/pca.py 

https://github.com/lawlite19/MachineLearning_Python#%E5%85%ADpca%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E9%99%8D%E7%BB%B4

1. 用途:

  • 通俗來說: 考察一個人的智力情況,就直接看數學成績就行(存在:數學、語文、英語成績) 。就是找出一個最主要的特征,然后進行分析。

  • 數據壓縮 (Data Compression) ,將高維數據變為低維數據。

  • 可視化數據 (3D->2D等)

2. 2D-->1D,nD-->kD

  • 如下圖所示,所有數據點可以投影到一條直線,是投影距離的平方和(投影誤差)最小

  •  
  • 注意數據需要歸一化處理

  • 思路是找1向量u,所有數據投影到上面使投影距離最小

  • 那么nD-->kD就是找k個向量$${u^{(1)}},{u^{(2)}} \ldots {u^{(k)}}$$,所有數據投影到上面使投影誤差最小

  • eg:3D-->2D,2個向量$${u^{(1)}},{u^{(2)}}$$就代表一個平面了,所有點投影到這個平面的投影誤差最小即可

3. 降維原理(數學推導)

                                                                     

 

 

 

 

# 歸一化數據
   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

(3)求的特征值和特征向量。  

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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM