一. 乙個場景
已知一家超市,銷售a,b,c,d四種產品,現對每種產品的一周之內每天的銷售情況記錄如下:
a b c d
周一 2 0 8 9
周二 4 0 11 13
週三 3 1 10 12
周四 2 3 11 10
周五 1 0 12 9
週六10 11 1 2
週日11 12 2 1
我們將a,b,c,d在一周內的銷售情況分別記為事件a,事件b,事件c,事件d,則a,b,c,d均為乙個7維的向量,即我們可以得到4條7維向量組成的資料。
不難發現,a,b事件相似度高(在周一到周五銷售較少,在週六和週日銷售較多); c,d事件相似度高。於是,我們可以假設存在乙個向量t,將a,b,c,d分別投射到t上,得到乙個新的資料:
a b c d
t a' b' c' d'
如果在這個向量t上,a和b的距離很近,c和d的距離很近,同時ab,cd的距離很遠,我們就成功的將乙個7維的資料降維到了一維。
二. 降維目標抽象化
在上述場景中,我們並不知道向量t是什麼,也未明確如何表徵在向量t上,a,b,c,d之間的距離,同時,如果要將資料降為二維改如何表述呢?
實際上,對於上述t向量,我們需要使所有事件在向量t上的投影所組成的新陣列(a『,b',c',d')的方差最大,也就是在在t向量方向上,所有事件的差異可以最大化,故t向量即為這組4條7維陣列的第一主成分。而在與第一主成分垂直的六維空間裡,再尋找第二向量t2,使得所有事件在向量t2上的投影所組成的新陣列(a'',b'',c'',d'')的方差最大,向量t2即為這組4條7維陣列的第二主成分,以此類推,可獲得第一到第七主成分。
降維問題的優化目標:將一組n維向量(每一列為乙個記錄)降為k維(k大於0,小於n),其目標是選擇k個單位(模為1)正交基,使得原始資料變換到這組基上後,在各維度上兩兩間協方差為0,而每個維度內的方差則盡可能大(在正交的約束下,取最大的k個方差)。
三.演算法推演
1.假設原始矩陣為x(每列為乙個事件,每行為乙個特徵維度),x的協方差矩陣為c1;變換基矩陣為p,變換後的矩陣為y,y的協方差矩陣為c2;pca的實質就是找到矩陣p,使得c2為對角陣。
2.又, y=px, c1=xt(x), c2=yt(y); 故c2=(px)(t(px))=p(x(t(x))t(p)=pc1t(p)
3.故,優化目標變成了尋找乙個變換基矩陣p,滿足pc1t(p)是乙個對角矩陣,並且對角元素按從大到小依次排列,那麼p的前k行就是要尋找的基,用p的前k行組成的矩陣乘以x就使得x從n維降到了k維並滿足上述優化條件。
4.根據協方差矩陣的特徵,以其特徵值為行的矩陣即為變化矩陣p。
四.演算法
設有m條n維資料;
1)將原始資料按列組成n行m列矩陣x(每一列代表乙個事件,每一行代表乙個特徵值維度)
2)將x的每一行(代表乙個屬性字段)進行零均值化,即減去這一行的均值
3)求出協方差矩陣c=(1/m)xt(x)
4)求出協方差矩陣的特徵值及對應的特徵向量(模為1)
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣p
6)y=px即為降維到k維後的資料
五.演算法實現:r語言
> a=c(2,4,3,2,1,10,11)
> b=c(0,0,1,3,0,11,12)
> c=c(8,11,10,11,12,1,2)
> d=c(9,13,12,10,9,2,1)
> sale=data.frame(a,b,c,d)
> rownames(sale)=c('mon','tue','wed','thu',"fri",'sat','sun')
> data.pca<-prcomp(sale)
> data.pca
standard deviations:
[1] 9.0818425 1.6889849 1.3284286 0.6531112
rotation:
pc1 pc2 pc3 pc4
a 0.4302964 0.62644196 -0.01270685 -0.6498108
b 0.5787863 0.11382130 -0.62985188 0.5053095
c -0.4840149 -0.09097089 -0.77652218 -0.3930232
d -0.4955613 0.76572807 0.01176625 0.4098062
> plot(x=data.pca$rotation[,1],y=data.pca$rotation[,2],pch=19,col=c(rep(2,length(data))),cex=1.25)
> biplot(data.pca)
> plot(data.pca, type="lines")
PCA的數學原理
pca的數學原理 pca principal component analysis 是一種常用的資料分析方法。pca通過線性變換將原始資料變換為一組各維度線性無關的表示,可用於提取資料的主要特徵分量,常用於高維資料的降維。網上關於pca的文章有很多,但是大多數只描述了pca的分析過程,而沒有講述其中...
PCA的數學原理 詳細
pca principal component analysis 是一種常用的資料分析方法。pca通過線性變換將原始資料變換為一組各維度線性無關的表示,可用於提取資料的主要特徵分量,常用於高維資料的降維。網上關於pca的文章有很多,但是大多數只描述了pca的分析過程,而沒有講述其中的原理。這篇文章的...
PCA的數學原理Matlab演示
pca principal component analysis 主成分分析,是svd singular value decomposition 奇異值分析的一種特殊情況。主要用於資料降維,特徵提取。這裡生成乙個3 3 的小矩陣便於說明。a rand 3,3 a 2.7694 1.3499 3.03...