機器學習(3.1)--PCA降維基本原理

PCA(Principal components analysis)也稱主成分分析,是機器學習中降維的一種方法
爲什麼要降維
在真實的數據中有各種問題,PCA的思想是將n維特徵映射到m維上(m<n)
1、如多餘的數據,商店的客流量與營業額,很明顯這兩組的數據相關度比較高
     ,簡單的理解就是把上述客流量與營業額合併成一個維度
2、由於信道不理想的,怎麼濾去傳輸過程中的噪音

   ,簡單的理解就是減少特徵數


本文將以一個2維數據來說明PCA的計算過程,PCA的具體步驟
1、求平均值(dataAvg)
2、求每個值與平均值的差(dataAdjust)
3、求協方差矩陣
4、求協方差矩陣的特徵值與特徵向量

5、將特徵值從大到小排序,選擇最大的M個,取的這M個特徵向量。

同時另一個實驗性的例子通過鳶尾花的特徵作爲數據,來查看降維後的效果
點擊查看 機器學習(3.2)--PCA降維鳶尾花數據降維演示

# -*- coding:utf-8 -*-  
import numpy as np

#建立十個樣本的二維數組
data=[[2.5,2.4]      ,[0.5,0.7]      ,[2.2,2.9]      ,[1.9,2.2]      ,[3.1,3.0]
      ,[2.3,2.7]      ,[2,1.6]      ,[1,1.1]      ,[1.5,1.6]      ,[1.1,0.9]]
data=np.array(data).astype(np.float)  

#1、求平均值(dataAvg)
dataAvg=np.average(data,axis=0)# x的均值是1.81,y的均值是1.91
#print(dataAvg) 

#2、求每個值與平均值的差(dataAdjust)
dataAdjust=data-dataAvg# X-avg(x)  與y-avg(y)的值
#print(dataAdjust) 

#3、求協方差矩陣
#計算任意兩組數據協方差函數,
def covariance(getDataAdjust,index1,index2):
    x=getDataAdjust[:,index1:index1+1]
    y=getDataAdjust[:,index2:index2+1]
    n=x.shape[0]
    return (x*y).sum()/(n-1)

#計算協方差矩陣,
'''
在二維數據中這個矩陣就是
[[cov(x,x),cov(x,y)]
,[cov(y,x),cov(y,y)]]

同理在三維數據這個矩陣就是
[[cov(x,x),cov(x,y),cov(x,z)]
,[cov(y,x),cov(y,y),cov(y,z)
,[cov(z,x),cov(z,y),cov(z,z)
]]
'''
CovMatrix=[[covariance(dataAdjust,0,0),covariance(dataAdjust,0,1)]
           ,[covariance(dataAdjust,1,0),covariance(dataAdjust,1,1)]]
print('協方差矩陣爲:')
print(CovMatrix)


#4、求協方差矩陣的特徵值與特徵向量,如果不知道什麼是特徵值與特徵向量,可以查查線性代數
e1,e2 = np.linalg.eig(CovMatrix)
print('------------------------')
print('協方差矩陣的特徵值:')
print(e1) #[0.0490834  1.28402771] ,這裏的兩個值,當要降到M維(本例只能降到1維),即取最大的值,這裏是1.28402771
print('------------------------')
print('協方差矩陣的特徵向量:')
print(e2)

#5、將特徵值從大到小排序,選擇最大的M個,取的這M個特徵向量。這裏只是取數,沒有計算步驟
#[[-0.73517866 -0.6778734 ]     因數爲上述特徵值最大的取1.28402771,爲第2個,所以,這裏我們取每個元素數組的第2個,即e2[:,1:]
# [ 0.6778734  -0.73517866]]
#取出的值應該是[-0.6778734, -0.73517866]

#做矩陣乘法,將dataAdjust 乘以上述 e2[:,1:] 得出的結果即爲降維後的值
finalDataX=np.matmul(dataAdjust,e2[:,1:])
print('------------------------')
print('降維後的數據:')
print(finalDataX)
本例使用二維數據,降維前,降維後都是數字,很多東西並不是直觀,
可以參考,機器學習(3.2)--PCA降維鳶尾花數據降維演示

發佈了46 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章