1、簡介html
2、Numpy中實現PCApython
from numpy import * ''' 10.235186 11.321997 10.122339 11.810993 9.190236 8.904943 9.306371 9.847394 8.330131 8.340352 10.152785 10.123532 10.408540 10.821986 ... ... ''' 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) #計算列均值 print meanVals # [[ 9.06393644 9.09600218]] print '======' meanRemoved = dataMat - meanVals #remove mean # 每一列都減去均值 covMat = cov(meanRemoved, rowvar=0) # 計算新矩陣(減去均值)協方差 print covMat # [ [ 1.05198368 1.1246314 ] [ 1.1246314 2.21166499] ] #協方差 print '======' eigVals,eigVects = linalg.eig(mat(covMat)) #計算協方差矩陣的特徵值和特徵向量 print eigVals # [ 0.36651371 2.89713496] print '======' print eigVects # [ [-0.85389096 -0.52045195] [ 0.52045195 -0.85389096] ] print '======' eigValInd = argsort(eigVals) #按照特徵值從大到小排序。選擇topN eigValInd = eigValInd[:-(topNfeat+1):-1] redEigVects = eigVects[:,eigValInd] print redEigVects print '======' #[ [-0.52045195] [-0.85389096] ] lowDDataMat = meanRemoved * redEigVects # N x 2 * 2 x 1 ==> N x 1 即把N x 2的矩陣轉化成N x 1 的矩陣,維度降到1 reconMat = (lowDDataMat * redEigVects.T) + meanVals return lowDDataMat, reconMat
http://www.cnblogs.com/chaosimple/p/3182157.html spa
均值: mean(X) = (x0 + x1 + ... + xn) / ncode
標準差:std = Math.sqrt([x0 - mean(x)]^2/(n-1),2)htm
方差:var=[x0 - mean(x)]^2/(n-1)blog
好比兩個集合[0,8,12,20]、[8,9,11,12] 均值都是10.可是兩個集合的差異很大。計算兩個標準差,前者是8.3和後者是1.8.排序
顯示後者比較集中。標準差描述了數據的「散佈度」。之因此除以n-1而不是n。是由於能使咱們以較小的樣本更好的逼近整體的標準差。即「無偏估計」ip
爲何須要協方差?rem
標準差和方差通常是用來描述一維的數據。可是現實生活中,咱們經常遇到含有二維數據的數據集。最簡單的是你們上學免不了的統計多個學科的考試成績。多維數據之間的關係。協方差就是這樣一種度量兩個隨機變量關係的統計量get
var(X) = {Math.pow(xi-mean(X),2)}/(n-1) = {xi-mean(X)}{xi-mean(X)}/(n-1)
仿照方差的定義:
cov(X,Y)= {xi-mean(X)}{yi-mean(Y)}/(n-1)
來度量各個維度偏離其均值的程度。
協方差結果的意義:
若是是正值,則說明二者是正相關,若是結果是負值,則說明二者是負相關。若是是0,表示二者沒有關聯,相互獨立。
多維協方差:矩陣來表示
cov(x,x) cov(x,y) cov(x,z)
C=cov(y,x) cov(y,y) cov(y,z) ===> 可見協方差矩陣是一個對稱矩陣,並且對角線是各個維度的方差。 是3*3
cov(z,x) cov(z,y) cov(z,z)