PCA的作用
有時候次元太多計算太麻煩,通過降維來達到計算友善的目的。如圖
如果我們的目标是聚類的話,在平面上的四個點,如果将這四個點投影到紅線上,成了一維的點,但依舊能完成聚類,因為他們的分布狀況被影響地不大。
PCA的過程
1.我們首先獲得二維平面上的點的資料,寫成如下的矩陣
(1 1 2 4 2 )
1 3 3 4 4
2.然後計算出上下排的均值分别為2和3,然後為了友善後面的方差的計算将上下每一個數分别減去自己的均值得到
(-1 -1 0 2 0)
-2 0 0 1 1
3.然後我們要求協方差矩陣
首先協方差矩陣是什麼?
我們都知道方差,方差表示的是一組資料的離散程度,也就是說你的資料中有很多0到10000一定比另一組有很多0到1的資料方差來的大。
那麼協方差表示的是什麼呢?協方差表示的是次元之間的(線性)相關性。也就是說平面上的x軸和y軸的協方差是0因為他們是不相關的。但兩個y軸的協方差就很高。
協方差的公式是
這裡給數學和我一樣不好的朋友們一個連結,就是一個小例題,3分鐘内就能看完,卻比起網上一堆不明是以的公式有用多了:協方差小例題
我們得出我們的協方差矩陣是
C=(1.2 0.8)
0.8 1.2
是以這步什麼意思呢?将x軸和y軸相乘得出這些點在這兩個次元上的相關性。如果還是不是很明白的話,我覺得這一步要和下一步結合起來看,他們其實是兩步卻是為了達到一個目的。
4.然後求出協方差矩陣的特征值和特征矩陣
先介紹一下特征值和特征矩陣的意義,連結在後面,看下正文就好,後面例子就不用看了,:知乎:特征值特征矩陣的意義
重點就是這句話:特征值越大,說明矩陣在對應的特征向量上的方差越大,功率越大,資訊量越多。
那麼協方差矩陣的特征值就是指,特征值越大,那麼協方差在對應的特征向量上的方差就越大。我們因為需要将點分開,是以我們是希望方差盡量地大。是以我們想保證降維後方差盡量大,就要特征值盡量地大。
特征值怎麼計算,其實我們有工具啦特征值特征向量計算工具
然後我們可以得到我們的特征值為
(2)
0.4
(0.7071 0.7071)
0.7071 -0.7071
這步什麼意思呢?我來舉個例子吧
我們先忽略綠點,隻看藍點,我們可以看到藍點都集中在x軸附近。那麼我們根據這些點算出協方差矩陣後,再計算出特征值和特征矩陣後。我們可以看到我們的特征向量一定是近乎(1 0)的矩陣,
0 1
然後特征值是(一個極大的數),根據這個過程我們決定哪個(如果降維降到不止一維就是哪些)次元上的分布性比較好。
一個極小的數
反過來我們隻看綠點的話,我們得到的特征值可能就相差不是很大了,我們就要謹慎考慮是否要降維
5.然後我們根據特征值進行排序,選擇分布性最好的幾個次元,這裡我們就選擇特征值最大的那個也就是2,以及它對應的特征向量(0.7071 0.7071)。這就是我們最新的基向量了
6.我們最後通過内積求出在基向量上的投影作為這個次元上的值,内積的相關知識不難,在我參考的資料第一份資料中有很詳細的介紹。其實那份資料很詳細主要就是裡面矩陣的表示很不清楚
然後最後提一提神經網絡中的運用吧,在神經網絡中是通過Oja來實作的,不過Oja是隻降到一維的情況,降到多元的情況是Sanger算法,我查了下網上都沒有相關資料。我這裡稍微提一提
輸入是x1,x2,x2 輸出是y1,y2,y3
權重開始是随機的,然後學習算法是
在一個連接配接上的新權重 = 這個連接配接上的舊權重 + 步長* 這個輸出神經元的輸出*(輸入神經元的輸入 - 到現在為止所有神經元輸出乘以各自權重的和(如果現在是計算第二個輸出神經元的第三條連接配接那麼這個變量就是 第一個神經元的輸出*第一個神經元對應的第三條連接配接的權重+第二個神經元的輸出*第二個神經元對應的第三條連接配接的權重))
參考資料參考資料一
參考資料二