基本步驟: 對資料進行歸一化處理(程式碼中並非這麼做的,而是直接減去均值) 計算歸一化後的資料集的協方差矩陣 計算協方差矩陣的特徵值和特徵向量 保留最重要的k個特徵(通常k要小於n),也可以自己制定,也可以選擇一個閾值,然後透過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k 找出k個特徵值對應的特徵向量 將m * n的資料集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的資料。 其實PCA的本質就是對角化協方差矩陣。有必要解釋下為什麼將特徵值按從大到小排序後再選。首先,要明白特徵值表示的是什麼?線上性代數里面我們求過無數次了,那麼它具體有什麼意義呢?對一個n*n的對稱矩陣進行分解,我們可以求出它的特徵值和特徵向量,就會產生n個n維的正交基,每個正交基會對應一個特徵值。然後把矩陣投影到這N個基上,此時特徵值的模就表示矩陣在該基的投影長度。 特徵值越大,說明矩陣在對應的特徵向量上的方差越大,樣本點越離散,越容易區分,資訊量也就越多。因此,特徵值最大的對應的特徵向量方向上所包含的資訊量就越多,如果某幾個特徵值很小,那麼就說明在該方向的資訊量非常少,我們就可以刪除小特徵值對應方向的資料,只保留大特徵值方向對應的資料,這樣做以後資料量減小,但有用的資訊量都保留下來了。PCA就是這個原理。
基本步驟: 對資料進行歸一化處理(程式碼中並非這麼做的,而是直接減去均值) 計算歸一化後的資料集的協方差矩陣 計算協方差矩陣的特徵值和特徵向量 保留最重要的k個特徵(通常k要小於n),也可以自己制定,也可以選擇一個閾值,然後透過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k 找出k個特徵值對應的特徵向量 將m * n的資料集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的資料。 其實PCA的本質就是對角化協方差矩陣。有必要解釋下為什麼將特徵值按從大到小排序後再選。首先,要明白特徵值表示的是什麼?線上性代數里面我們求過無數次了,那麼它具體有什麼意義呢?對一個n*n的對稱矩陣進行分解,我們可以求出它的特徵值和特徵向量,就會產生n個n維的正交基,每個正交基會對應一個特徵值。然後把矩陣投影到這N個基上,此時特徵值的模就表示矩陣在該基的投影長度。 特徵值越大,說明矩陣在對應的特徵向量上的方差越大,樣本點越離散,越容易區分,資訊量也就越多。因此,特徵值最大的對應的特徵向量方向上所包含的資訊量就越多,如果某幾個特徵值很小,那麼就說明在該方向的資訊量非常少,我們就可以刪除小特徵值對應方向的資料,只保留大特徵值方向對應的資料,這樣做以後資料量減小,但有用的資訊量都保留下來了。PCA就是這個原理。