降維目的:樣本數據為高維數據時,對數據進行降維操作,避免模型出現過擬合。
1.過擬合含義:訓練集誤差小,驗證集誤差大。
過擬合三種解決方案:1)增加數據集;2)正則化; 3)降維。
2.高維災難:
具有高維度特征的數據易導致高維災難。
高維災難的幾何角度解釋: 高維災難含義:高維數據分布具有稀疏性;不容易根據特征對數據進行分類.
3.降維
降維分類:
1)直接降維(特征選擇(lasso))
2)線性降維(PCA,MDS)
3)非線性降維(流形:ISOMAP,LLE)
4.主成分分析(PCA) 【一般要求覆蓋率達到85%以上】
1) PCA本質:將一組線性相關的數據通過正交變換轉化為一組線性無關的數據,本質是特征空間的重構+主成分篩選。
2)PCA轉化為優化問題:最大投影方差(最小重構距離)
最大投影方差:數據進行特征轉換后,篩選出投影方差最大的前q個基變量,即主成分(盡可能多地保留原數據的信息)
【最小重構代價:數據進行特征轉換后,篩選出重構代價最小的(p-(q+1))個基變量,即被篩掉的特征(使轉換篩選后去掉的信息盡可能少),本質和最大投影方差一樣】
轉化為帶約束的優化問題:用拉格朗日乘子法求解,輸出為主成分P【被篩去的成分P1】
最大投影誤差 【最小重構代價】
=> problem: optimization
P = argmax PT*S*P 【PT*S*P是變換后樣本的協方差】
s.t PTP = 1 【P為正交陣】
=> solution: P,lambda 【拉格朗日乘子法通過求解導數為0得出的最優解:當變換矩陣 P 等於協方差矩陣S的特征向量時,可以實現方差最大化】
SP=lambda*P
取 lambda 的前q個最大的特征值; 取前q個最大的特征值對應的特征向量組成變換矩陣P;
newdata=data*T(因為data(nxm):n為樣本數,m為特征數,所以右乘變換矩陣;反之則左乘);
i)均值、協方差、中心矩陣H(幾何角度理解:將數據平移至特征空間的原點)
矩陣表示:(視頻更為清楚,僅為自己方便回顧)
X={x1 x2 x3 ... xN}
mean: x_bar=1/N*XT*1n
covariance: S=1/N*XTHX || S=1/N*XTX (兩者相等?)
centering matrix H: H=IN-1/N*1N1NT
ii) 為什么用協方差(的特征值和特征向量) 【另一種解釋可以通過拉格朗日乘子法公式推導】
PCA目標:最大化特征本身的方差;最小化不同特征間的相關度(這里的特征指的是變換后的特征)
=> 最大化轉化后的樣本的協方差 S1(S1=uTSu);最小化S'除了對角元素之外的元素。
為什么要追求最大化方差:
根據信息論,某維度的方差越大,表示所包含的信息越多,表明在該維度上不同樣本的差異性越大,所以要某一維度上追求樣本的方差最大化。
為什么要最小化S1除了主對角元素之外的元素:
協方差矩陣主對角線的元素表示某一特征維度自己的方差,除此之外的元素表示不同特征之間的相關性,也就是問為什么要最小化不同維度間的相關性。因為特征間如果有相關性,即可以通過一個特征推導出另一個特征,那么兩個特征中就有一個是冗余的,沒必要。所以要最小化不同特征間的相關性,可以通過使最終的主成分均為正交向量來實現相關性為0。(正交向量相關性為0,實對稱矩陣特征向量均為正交向量,所以只要協方差矩陣為實對稱矩陣,對其求解特征向量,將特征向量作為主成分,則自動滿足主成分相關性為0的條件)
為什么要選取大的特征值:
當一個矩陣作用於它的特征向量時,相當於對特征向量進行大小縮放,不改變其方向,特征值越大,說明其拉伸的的比例越大,協方差的特征值的絕對值表示變換后該主成分上保留原始信息的多少,所以要提取出大的特征值。大的特征值對應的特征向量就是主成分。
4)PCA 步驟:
去均值化得到中心化的樣本X=X-X_bar;
公式得到協方差矩陣S;
公式求協方差矩陣特征值和特征向量;
特征值從大到小排序,取前p個特征值(對特征值歸一化,p的大小由設置的貢獻率約束);
p個特征值對應的特征向量組成變換矩陣T;
得到降維后的新樣本 newdata=data*T;
5)代碼例子
特征值函數:
matlab:eig
python3:numpy.linalg.eig
參考資料:
B站PCA白板推導:
1.https://www.bilibili.com/video/BV1vW411S7tH?from=search&seid=9820368741324620986
2.https://www.bilibili.com/video/BV1vW411S7tH?from=search&seid=16536718430318256576
3.https://www.bilibili.com/video/BV1vW411S7tH?p=4
4.https://www.cnblogs.com/simon-c/p/4902651.html 作者:simon_c
5.https://blog.csdn.net/qq_34562093/article/details/80568060, PCA與協方差矩陣,作者:Fourier
6.https://www.cnblogs.com/tclikang/archive/2012/11/26/2789200.html,數理統計協方差,作者:superbug
7.https://github.com/LJRice/KL-PAC-_face ,PCA人臉識別python代碼