PCA理論與實踐

2021-08-18 13:05:07 字數 3090 閱讀 2175

pca作用:

降維,pca試圖在力保資料資訊丟失最少的原則下,用較少的綜合變數代替原本較多的變數,而且綜合變數間互不相關,減少冗餘以及盡量消除雜訊.

pca的計算步驟:

假設樣本觀測資料矩陣為:

1.對原始資料標準化處理(0均值化處理)

2.計算樣本相關係數矩陣

3.計算協方差矩陣的特徵值和特徵向量

4.選擇重要的主成分,並寫出主成分表示式

5.計算主成分得分

6.根據主成分得分的資料,做進一步的統計分析.

最大方差理論:

(1)、在訊號處理中認為訊號具有較大的方差,雜訊具有較小的方差,訊雜比就是訊號與雜訊的方差比,越大越好.因此,選擇具有較大方差的特徵值維度.

(2)、最小特徵根接近於零,說明存在多重共線性問題

判斷主成分的個數:

最常見的是基於特徵值的方法,每個主成分都與相關係數矩陣的特徵值 關聯,第一主成分與最大的特徵值相關聯,第二主成分與第二大的特徵值相關聯,依此類推.

1、kaiser-harris準則建議保留特徵值大於1的主成分,特徵值小於1的成分所解釋的方差比包含在單個變數中的方差更少.

2、cattell碎石檢驗則繪製了特徵值與主成分數的圖形,這類圖形可以展示圖形彎曲狀況,在圖形變化最大處之上的主成分都保留.

3、可以進行模擬,依據與初始矩陣相同大小的隨機數矩陣來判斷要提取的特徵值.若基於真實資料的某個特徵值大於一組隨機資料矩陣相應的平均特徵值,那麼該主成分可以保留.該方法稱作平行分析.

優缺點:

優點:首先它利用降維技術用少數幾個綜合變數來代替原始多個變數,這些綜合變數集中了原始變數的大部分資訊.其次它通過計算綜合主成分函式得分,對客觀經濟現象進行科學評價.再次它在應用上側重於資訊貢獻影響力綜合評價.

缺點:1、在pca中,首先應保證所提取的前幾個主成分的累計貢獻率達到乙個較高的水平(即變數降維後的資訊量須保持在乙個較高水平上),其次對這些被提取的主成分必須都能夠給出符合實際背景和意義的解釋(否則主成分將空有資訊量而無實際含義). 

2、主成分的解釋其含義一般多少帶有點模糊性,不像原始變數的含義那麼清楚、確切,這是變數降維過程中不得不付出的代價.因此,提取的主成分個數m通常應明顯小於原始變數個數p(除非p本身較小),否則維數降低的「利」可能抵不過主成分含義不如原始變數清楚的「弊」.

#################r語言########################

法1:data=usarrests

data

#prcomp()####:主成分分析,通過奇異值分解做主成分分析,而不使用協方差矩陣的特徵根;

dtsummary(dt)####提取主成分資訊 loadings=t顯示主成分分析或因子分析中載荷的內容,提取主成分對應的特徵向量;

loadings(dt)####載荷矩陣,檢視每個變數對主成分的貢獻度;

#predict()############3**主成分的值;

screeplot(dt,type="lines")####畫出主成分的碎石圖;

biplot(dt)#######畫出資料關於主成分的散點圖和原座標在主成分下的方向,雙重資訊圖#################biplot,檢視各個變數的表現.

法2(細節過程):

d=read.table("clipboard",header=t) #從剪貼簿讀取資料

sd=scale(d)  #對資料進行標準化處理

d=read.table("clipboard",header=t)  #從剪貼簿讀取標準化資料

pca=princomp(d,cor=t)  #pca函式

screeplot(pca,type="line",mian="碎石圖",lwd=2)  #畫出碎石圖

dcor=cor(d) #求相關矩陣

deig=eigen(dcor)  #求相關矩陣的特徵值和特徵向量

deig$values #輸出特徵值

sumeigv=sum(deig$values)

sum(deig$values[1:2])/k #求前兩個主成分的累積方差貢獻率

pca$loadings[,1:2]  #輸出前2個主成分的載荷係數

deig$values[1]/k;deig$values[2]/k; #計算主成分c1、c2的係數b1、b2

c=(b1*c1+b2*c2)/(b1+b2)=q1*c1+q2*c2

s=pca$scores[,1:2] #輸出前兩個主成分的得分

c=s[1:評價物件的個數,1]*q1+s[1:評價物件的個數,2]*q2

cbind(s,c)

####################python#########################

from numpy import *

def loaddataset(filename,delim='\t'):

fr=open(filename)

stringarr=[line.strip().split(delim) for line in fr.readlines]

datarr=[map(float,line) for line in stringarr]

return mat(datarr)

def pca(datamat,topnfeat=9999999):

meanvals=mean(datamat,axis=0)

meanremoved=datamat-meanvals

covmat=cov(meanremoved,rowvar=0)

eigvals,eigvects=linalg.eig(mat(covmat()))

eigvalind=argsort(eigvals)

eigvalind=eigvalind[:-(topnfeat+1):-1]

redeigvects=eigvects[:,eigvalind]

lowddatamat=meanremoved*redeigvects

reconmat=(lowddatamat*redeigvects.t)+meanvals

return lowddatamat,reconmat

https理論與實踐

本文內容分為以下三部分 part1 https協議 普通的http請求,在通訊雙方建立了tcp連線之後,就可以進行了。而https則不同,在建立tcp連線之後,需要先進行ssl協議的握手過程,然後才是http的通訊。ssl的握手過程如下圖所示 alice想要與bob進行https的通訊,需要以下幾步...

https理論與實踐

本文內容分為以下三部分 part1 https協議 普通的http請求,在通訊雙方建立了tcp連線之後,就可以進行了。而https則不同,在建立tcp連線之後,需要先進行ssl協議的握手過程,然後才是http的通訊。ssl的握手過程如下圖所示 alice想要與bob進行https的通訊,需要以下幾步...

https理論與實踐

本文內容分為以下三部分 part1 https協議 普通的http請求,在通訊雙方建立了tcp連線之後,就可以進行了。而https則不同,在建立tcp連線之後,需要先進行ssl協議的握手過程,然後才是http的通訊。ssl的握手過程如下圖所示 alice想要與bob進行https的通訊,需要以下幾步...