使用python的數(shù)值計算庫numpy來計算矩陣的特征值,特征向量與標準正交向量組
創(chuàng)新互聯(lián)是專業(yè)的高邑網(wǎng)站建設(shè)公司,高邑接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行高邑網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
1.求矩陣 的特征值和各特征值所對應(yīng)的特征向量
2.求矩陣 的特征值和各特征值所對應(yīng)的特征向量
3.由向量組 構(gòu)造一組標準正交向量組
拍子在求特征值和特征向量的過程中,你可以一定要變成這些正確編寫,正確之后的話就能夠直接出來了。
一般步驟來實現(xiàn)PCA算法
(1)零均值化
假如原始數(shù)據(jù)集為矩陣dataMat,dataMat中每一行代表一個樣本,每一列代表同一個特征。零均值化就是求每一列的平均值,然后該列上的所有數(shù)都減去這個均值。也就是說,這里零均值化是對每一個特征而言的,零均值化都,每個特征的均值變成0。實現(xiàn)代碼如下:
[python]?view plain?copy
def?zeroMean(dataMat):
meanVal=np.mean(dataMat,axis=0)?????#按列求均值,即求各個特征的均值
newData=dataMat-meanVal
return?newData,meanVal
函數(shù)中用numpy中的mean方法來求均值,axis=0表示按列求均值。
該函數(shù)返回兩個變量,newData是零均值化后的數(shù)據(jù),meanVal是每個特征的均值,是給后面重構(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ù)一行代表一個樣本,若非0,說明傳入的數(shù)據(jù)一列代表一個樣本。因為newData每一行代表一個樣本,所以將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存放特征向量,每一列帶別一個特征向量。
特征值和特征向量是一一對應(yīng)的
(4)保留主要的成分[即保留值比較大的前n個特征]
第三步得到了特征值向量eigVals,假設(shè)里面有m個特征值,我們可以對其排序,排在前面的n個特征值所對應(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個特征值的下標
n_eigVect=eigVects[:,n_eigValIndice]????????#最大的n個特征值對應(yīng)的特征向量
lowDDataMat=newData*n_eigVect???????????????#低維特征空間的數(shù)據(jù)
reconMat=(lowDDataMat*n_eigVect.T)+meanVal??#重構(gòu)數(shù)據(jù)
return?lowDDataMat,reconMat
代碼中有幾點要說明一下,首先argsort對特征值是從小到大排序的,那么最大的n個特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出這個n個特征值對應(yīng)的下標?!緋ython里面,list[a:b:c]代表從下標a開始到b,步長為c?!?/p>
分享標題:python求特征值函數(shù),python求特征值和特征向量
文章出自:http://weahome.cn/article/dscidch.html