在之前的介紹中,一幅影象只能表示乙個物件。那麼對於w x h的灰度影象,只能表示為w x h位的向量,那麼乙個有100*100的影象就需要10000維的向量空間。對於一幅人臉而言,是否所有維的資料都是有用的呢?在矩陣論當中我們知道,矩陣可以近似的表示為乙個特徵值與特徵向量的乘積。
根據這個原理,如果我們能夠提取出高維向量中某些特有特徵或相關變數,就能用乙個近似說的低維向量表示這個高維向量。因為對於這個高維向量,只有包含最多資訊的那些維上的資料才有意義,而那些不重要的維可以在計算中忽略,降維後的低維向量不會損失掉特徵間的差異性。這就是主成分分析的思想。
pca的基本原理是:乙個高維資料集如果能夠被相關變數表示,那麼自由一些維的資料才有意義,包含最多的資訊。如果尋找資料中擁有最大方差的哪些方向,就被稱之為向量的主成分。
令首先,計算x的均值向量u:
然後根據這個均值計算協方差矩陣s:
計算s的特徵值
最對特徵值和特徵向量進行遞減排序。如果定義乙個向量有k個主成分,那麼這個向量的主成分就是k個最大特徵值對應的特徵向量。
觀測向量x的k個主成分可以表示為:
pca基的變換為:
子程式
from numpy import *
defloaddataset
(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)
defpca
(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 #向量x表示為y
reconmat = (lowddatamat * redeigvects.t) + meanvals#pca基的變換x
return lowddatamat, reconmat
主程式
PCA降維原理和作用
降維的作用 資料在低維下更容易處理 更容易使用 相關特徵,特別是重要特徵更能在資料中明確的顯示出來 如果只有兩維或者三維的話,更便於視覺化展示 去除資料雜訊 降低演算法開銷 降維通俗點的解釋 一些高維度的資料,比如 交易資料,為便於解釋降維作用,我們在這假設有下單數,付款數,商品類別,售價四個維度,...
PCA 1 降維原理
上圖為含有兩個特徵的樣本空間,資料的維度為2,可以忽視乙個不明顯的特徵,保留乙個相對差距明顯的特徵進行降維 顯然選擇特徵1效果好一點 我們也可以選擇一條更適合的直線 方差最大 把所有的點對映到這個直線上,來達到降維的目的 方差定義 var x frac sum x i bar 2 第一步 將所有樣本...
降維PCA原理個人總結
pca是一種經典的降維方法,基礎的pca是一種線性的降維,本質是線性座標變換,經典的pca目標優化解釋思路有兩種 一種是單個維度上方差最大化,另一種是採用最小二乘線性回歸的思想最小化樣本點到超平面的距離。這裡普及下協方差,方差的定義。協方差刻畫的是資料 兩個變數 的相關性。資料的方差指的是 資料樣本...