數據壓縮
將二維數據降低到一維數據的方法,有直接替換的方法。下圖中,將數據條目的二維特徵x1,x2,轉化爲了一維特徵z1。其中,x1和x2是直接相關的(因爲四捨五入出現了一些偏差),而z1等於x1。
但是更通用的方法,應該是建立一個直線,該直線到所有特徵點的距離平方和是最小的。以該直線建立座標軸z,以數據投影作爲z值,將二維數據降低到一維吧。
從本質的方法是,三維數據降低到二維數據的方法,將三維數據投射到一個二維平面上,該二維平面與所有數據點的距離平方和,應該要求最小。
最後,使用該二維平面所組建的新的座標,將數據的在平面的投影作爲座標值,將三維數據降低到二維。如下圖。
數據可視化
將高維數據降維到三維以下,可以實現可視化效果。但是降維後的數據中,每個維表示的意義,則需要自己定義。
如下,是將國家之間的一些數據,每條數據有50維,最後降低到二維z1,z2,然後繪製出來的數據可視化效果。而通過觀察,認爲z1與國家規模或者GDP總量有關,而z2則與個人GDP有關。
主成分分析(Principal Component Analysis)問題闡述
主成分分析的方法原理,和之前所述數據降維基本一致,即,找到一個新的座標軸、平面、或者超平面,使得數據到這些座標軸、平面、或者超平面的距離平方和最小。
和機器學習中的有監督訓練的,線性迴歸方法,不同的是,主成分分析法使用的爲投影的距離平方和最小化,而線性迴歸要求,由輸入x到模型產生的數據值,到標籤y的距離平方和,最小化。這是針對不同領域的,兩種不同的方法。
下圖中,左爲線性迴歸,右爲主成分分析法。
主成分分析算法
首先需要進行數據表示的說明:
數據爲X的矩陣(大小n*m,m條數據,n列特徵)。每一行表示不同數據條目的相同特徵。其中每條數據xi,大小爲n行1列。
這是和之前數據表示方面,可能有不同的地方。
算法第一步是進行數據預處理。
在不同數據條目的相同特徵下,進行歸一化處理:求得特徵均值,並將特徵進行替換。(必要的吧,可能與協方差的定義有關)
在所有數據條目的不同特徵下,將影響過大的特徵值進行縮放,使得不同的特徵表示出的數據具有可比性。(可選的)
算法的第二步是計算協方差矩陣sigma。協方差的計算方法如下圖中公式的第一個。但是注意,其中的xi,表示的是所有樣本的某一個特徵值的向量。
即,在m個數據,每個數據n個特徵,最終要將m個數據的特徵降低到k個特徵的過程中,xi,爲n*1的向量。最終得到的大sigma,即爲n*n大小的協方差矩陣。
算法的第三步是使用大sigma作爲參數,通過svd(singular value decomposition)奇異值分解函數(另外eig函數也有類似效果,但是svd可能更好用一點吧),獲取特徵向量U。如上圖
從特徵向量U中,取得前k列特徵向量,得到Ureduce(大小爲n*k)。轉秩後,通過與每個數據x(規模n*1)相乘,得到該條數據的k個特徵。
總結如下:其中,Sigma可以使用X的矩陣乘法,獲取到n*n的協方差矩陣。
選擇主成分的數量
選擇數量時,根據PCA的方法,得到投影的均方差,當均方差和原始數據的均方差,比值最小,則有最小的數據量損失比例。誤差爲0,則投影均方差爲0,誤差比例爲1,則Xapprox爲0。
如下圖,分子爲投影均方差,分母爲總均方差。通過k的增長,測試如下公式,選擇最小的k,並滿足誤差損失比例,得到選擇的k。其中:Xapprox爲近似的原有特徵,該特徵使用投影Ureduce(n*k)與降維後的數據z(k*1)的乘積,得到近似的原始的n維數據,爲Xapprox(n*1)。
或者,使用svd函數的計算結果中的S,由於該矩陣爲對角矩陣,容易計算,得到結果。也容易編程吧。
重建的壓縮表示
數據重構的方法如下所示,已經說明過。其含義是將低維數據,通過Ureduce特徵向量,重新投射到高維數據的世界中。
如下圖中,表示降維前數據的位置(左),降維後的數據位置(下),恢復後的數據位置(右)。
主成分分析法的應用建議
PCA可以壓縮數據,可視化數據,加速神經網絡訓練等。
在圖像識別方面,使用PCA,將原始的100*100像素進行降維做預處理,是可行的。在訓練集過程中使用Ureduce,同樣也應該使用訓練集中的Ureduce,以獲取驗證集和測試集的,降維後的數據。
PCA可以用來加速神經網絡的訓練過程,但是並不是一個必要的部分。在可以不需要使用PCA的時候,就不應該使用降維損失數據。
另外,使用PCA方法,降低過擬合效果是不可取的。過擬合是由於泛化能力差,樣本量不夠導致,在m個樣本n個特徵情況下,雖然降低特徵似乎可以降低過擬合,但是不可取(沒有從根本上解決問題??)。應該使用正則化降低過擬合。
下圖爲原始材料:另外的一些關於過擬合、欠擬合材料:https://zhuanlan.zhihu.com/p/72038532