一般步驟來實(shí)現(xiàn)PCA算法

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括思南網(wǎng)站建設(shè)、思南網(wǎng)站制作、思南網(wǎng)頁制作以及思南網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,思南網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到思南省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
(1)零均值化
假如原始數(shù)據(jù)集為矩陣dataMat,dataMat中每一行代表一個(gè)樣本,每一列代表同一個(gè)特征。零均值化就是求每一列的平均值,然后該列上的所有數(shù)都減去這個(gè)均值。也就是說,這里零均值化是對每一個(gè)特征而言的,零均值化都,每個(gè)特征的均值變成0。實(shí)現(xiàn)代碼如下:
[python]?view plain?copy
def?zeroMean(dataMat):
meanVal=np.mean(dataMat,axis=0)?????#按列求均值,即求各個(gè)特征的均值
newData=dataMat-meanVal
return?newData,meanVal
函數(shù)中用numpy中的mean方法來求均值,axis=0表示按列求均值。
該函數(shù)返回兩個(gè)變量,newData是零均值化后的數(shù)據(jù),meanVal是每個(gè)特征的均值,是給后面重構(gòu)數(shù)據(jù)用的。
(2)求協(xié)方差矩陣
[python]?view plain?copy
newData,meanVal=zeroMean(dataMat)
covMat=np.cov(newData,rowvar=0)
numpy中的cov函數(shù)用于求協(xié)方差矩陣,參數(shù)rowvar很重要!若rowvar=0,說明傳入的數(shù)據(jù)一行代表一個(gè)樣本,若非0,說明傳入的數(shù)據(jù)一列代表一個(gè)樣本。因?yàn)閚ewData每一行代表一個(gè)樣本,所以將rowvar設(shè)置為0。
covMat即所求的協(xié)方差矩陣。
(3)求特征值、特征矩陣
調(diào)用numpy中的線性代數(shù)模塊linalg中的eig函數(shù),可以直接由covMat求得特征值和特征向量:
[python]?view plain?copy
eigVals,eigVects=np.linalg.eig(np.mat(covMat))
eigVals存放特征值,行向量。
eigVects存放特征向量,每一列帶別一個(gè)特征向量。
特征值和特征向量是一一對應(yīng)的
(4)保留主要的成分[即保留值比較大的前n個(gè)特征]
第三步得到了特征值向量eigVals,假設(shè)里面有m個(gè)特征值,我們可以對其排序,排在前面的n個(gè)特征值所對應(yīng)的特征向量就是我們要保留的,它們組成了新的特征空間的一組基n_eigVect。將零均值化后的數(shù)據(jù)乘以n_eigVect就可以得到降維后的數(shù)據(jù)。代碼如下:
[python]?view plain?copy
eigValIndice=np.argsort(eigVals)????????????#對特征值從小到大排序
n_eigValIndice=eigValIndice[-1:-(n+1):-1]???#最大的n個(gè)特征值的下標(biāo)
n_eigVect=eigVects[:,n_eigValIndice]????????#最大的n個(gè)特征值對應(yīng)的特征向量
lowDDataMat=newData*n_eigVect???????????????#低維特征空間的數(shù)據(jù)
reconMat=(lowDDataMat*n_eigVect.T)+meanVal??#重構(gòu)數(shù)據(jù)
return?lowDDataMat,reconMat
代碼中有幾點(diǎn)要說明一下,首先argsort對特征值是從小到大排序的,那么最大的n個(gè)特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出這個(gè)n個(gè)特征值對應(yīng)的下標(biāo)。【python里面,list[a:b:c]代表從下標(biāo)a開始到b,步長為c。】
cov函數(shù)計(jì)算的是協(xié)方差。
如果輸入?yún)?shù)為兩個(gè)隨機(jī)變量,則計(jì)算二者之間的協(xié)方差。
如果輸入?yún)?shù)為隨機(jī)變量組成的矩陣并指定表示隨機(jī)變量的維度,返回值是隨機(jī)變量的協(xié)方差矩陣。
cov
這個(gè)函數(shù)是實(shí)現(xiàn)這個(gè)功能的
另外,對于任意兩個(gè)維度之間的相關(guān)關(guān)系可以用pearsonr來計(jì)算
哦,忘了說了,cov是numpy里面的,pearsonr是scipy.stats里面的
有些Python小白對numpy中的常見函數(shù)不太了解,今天小編就整理出來分享給大家。
Numpy是Python的一個(gè)科學(xué)計(jì)算的庫,提供了矩陣運(yùn)算的功能,其一般與Scipy、matplotlib一起使用。其實(shí),list已經(jīng)提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。
數(shù)組常用函數(shù)
1.where()按條件返回?cái)?shù)組的索引值
2.take(a,index)從數(shù)組a中按照索引index取值
3.linspace(a,b,N)返回一個(gè)在(a,b)范圍內(nèi)均勻分布的數(shù)組,元素個(gè)數(shù)為N個(gè)
4.a.fill()將數(shù)組的所有元素以指定的值填充
5.diff(a)返回?cái)?shù)組a相鄰元素的差值構(gòu)成的數(shù)組
6.sign(a)返回?cái)?shù)組a的每個(gè)元素的正負(fù)符號
7.piecewise(a,[condlist],[funclist])數(shù)組a根據(jù)布爾型條件condlist返回對應(yīng)元素結(jié)果
8.a.argmax(),a.argmin()返回a最大、最小元素的索引
改變數(shù)組維度
a.ravel(),a.flatten():將數(shù)組a展平成一維數(shù)組
a.shape=(m,n),a.reshape(m,n):將數(shù)組a轉(zhuǎn)換成m*n維數(shù)組
a.transpose,a.T轉(zhuǎn)置數(shù)組a
數(shù)組組合
1.hstack((a,b)),concatenate((a,b),axis=1)將數(shù)組a,b沿水平方向組合
2.vstack((a,b)),concatenate((a,b),axis=0)將數(shù)組a,b沿豎直方向組合
3.row_stack((a,b))將數(shù)組a,b按行方向組合
4.column_stack((a,b))將數(shù)組a,b按列方向組合
數(shù)組分割
1.split(a,n,axis=0),vsplit(a,n)將數(shù)組a沿垂直方向分割成n個(gè)數(shù)組
2.split(a,n,axis=1),hsplit(a,n)將數(shù)組a沿水平方向分割成n個(gè)數(shù)組
數(shù)組修剪和壓縮
1.a.clip(m,n)設(shè)置數(shù)組a的范圍為(m,n),數(shù)組中大于n的元素設(shè)定為n,小于m的元素設(shè)定為m
2.a.compress()返回根據(jù)給定條件篩選后的數(shù)組
數(shù)組屬性
1.a.dtype數(shù)組a的數(shù)據(jù)類型
2.a.shape數(shù)組a的維度
3.a.ndim數(shù)組a的維數(shù)
4.a.size數(shù)組a所含元素的總個(gè)數(shù)
5.a.itemsize數(shù)組a的元素在內(nèi)存中所占的字節(jié)數(shù)
6.a.nbytes整個(gè)數(shù)組a所占的內(nèi)存空間7.a.astype(int)轉(zhuǎn)換a數(shù)組的類型為int型
數(shù)組計(jì)算
1.average(a,weights=v)對數(shù)組a以權(quán)重v進(jìn)行加權(quán)平均
2.mean(a),max(a),min(a),middle(a),var(a),std(a)數(shù)組a的均值、最大值、最小值、中位數(shù)、方差、標(biāo)準(zhǔn)差
3.a.prod()數(shù)組a的所有元素的乘積
4.a.cumprod()數(shù)組a的元素的累積乘積
5.cov(a,b),corrcoef(a,b)數(shù)組a和b的協(xié)方差、相關(guān)系數(shù)
6.a.diagonal()查看矩陣a對角線上的元素7.a.trace()計(jì)算矩陣a的跡,即對角線元素之和
以上就是numpy中的常見函數(shù)。更多Python學(xué)習(xí)推薦:PyThon學(xué)習(xí)網(wǎng)教學(xué)中心。
是相等的。
cov函數(shù)
cov函數(shù)用于求協(xié)方差矩陣,計(jì)算協(xié)方差的數(shù)學(xué)公式為:cov(x1,x2)=E[(x1-u1)(x2-u2)]。其中,E是數(shù)學(xué)期望,u1=Ex1,u2=Ex2。cov函數(shù)的調(diào)用語法如下。
(1)C=cov(x):若x為一向量,返回的則是向量元素的方差,為一標(biāo)量;若x為一個(gè)矩陣,則返回協(xié)方差矩陣。
(2)C=cov(x,y):計(jì)算列向量x、y的協(xié)方差,要求x、y具有相等的元素個(gè)數(shù)。如果x、y是矩陣,那么MATLAB會(huì)將其轉(zhuǎn)換為列向量,相當(dāng)于cov([A(:),B(:)])。
文章題目:python的cov函數(shù),python cov
URL分享:http://chinadenli.net/article34/dseihpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、自適應(yīng)網(wǎng)站、ChatGPT、靜態(tài)網(wǎng)站、微信公眾號、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)