維數約減又稱爲降維。
使用維數約減的原因:
1. 數據壓縮(減少空間佔用,同時爲算法提速)
例1:從
存在如下圖所示樣本集,
希望找到如下圖中所示直線,把所有樣本映射到這條線上
如此,就可以使用下圖來表示樣本位置,只需要一個特徵變量即可:
例2:從
存在如下圖所示樣本集,
把所有樣本投影到一個二維平面上,如下圖所示:
則可以使用兩個特徵值來表示樣本點的位置,如下圖:
2. 數據可視化
當 時,無法有效觀察理解數據,將其降維至 或 ,就可以呈現爲 或 的圖像。
主成分分析法(PCA):是當前最常用的降維算法。
PCA實質爲尋找一個低維的面,把數據投射在上面,使得樣本點到面的垂直距離的平方和達到最小值。這些垂直距離也稱爲投影誤差。
更一般化的表達是:從 維降到 維,找到 個向量 ,將樣本數據投射在這 個向量上,使得投影誤差最小。
在應用PCA之前,通常會進行均值歸一化和特徵規範化。
訓練集:
在執行PCA算法前的數據預處理:
- 均值歸一化
用 替換 - 特徵縮放(可選)
如果不同特徵值取值範圍差異較大,則進行特徵縮放,使得各特徵值具有類似的取值範圍。
用 替換 , 表示特徵值 的最大值-最小值或標準差。
PCA算法:
將數據從 維降維到 維:
計算協方差矩陣: (注: 表示希臘字母Sigma)
代碼:Sigma=(1/m)*X'*X
其中
計算矩陣 的特徵向量:
代碼:[U,S,V]=svd(Sigma);
svd表示奇異值分解,在 中,也可以用eig()命令求特徵向量;
Sigma協方差矩陣是一個 矩陣;
上述語句輸出三個矩陣,我們需要的是 矩陣,也是 矩陣;
矩陣的列就是我們需要的向量: ;
提取 矩陣的前 列向量組成矩陣
代碼:Ureduce=U(:,1:k);
我們的目的是 ,
其中, ,所以
代碼:z=Ureduce'*x;
注:使用PCA算法, ,沒有 這一項。
PCA算法壓縮數據的原始數據重構:
由上已知: ,我們現在需要
所以: , 爲 矩陣, 爲 向量,故 爲 向量。
PCA算法中,把 維特徵變量降維到 維特徵變量, 也被稱爲主成分的數量。
如何選擇 ?
兩個定義:
平均平方映射誤差: ,表示樣本 和其在低維平面映射點之間的距離的平方的均值。
數據的總變差: ,訓練樣本長度的平方的均值,表示訓練樣本與 向量的平均距離。
選擇 的法則:
使
此時,保留了 的差異性。
算法:
用 嘗試PCA算法:
計算 ;
檢查 是否 ;
若符合條件,取 ,若不符合條件, ,直到找到滿足條件的最小的 值。
上述算法的計算過於繁雜,對該算法進行改進。
改進版算法:
執行語句[U,S,V]=svd(Sigma)
會得到 矩陣;
矩陣是一個正方形矩陣,形式爲
對於給定的 值,只需滿足 即
不斷增加 的取值來尋求滿足的條件的最小 值。
當使用特定的 值時,也可以用 來表示PCA算法性能。
PCA算法應用
監督學習算法加速
存在樣本集 ;
提取出輸入特徵值,無標籤數據集 ;
執行PCA算法,得到數據集 ;
形成新的訓練樣本: ;
提出基於新訓練樣本的假設函數 。
注: 的映射關係是通過在訓練集上運行PCA算法定義的,這個映射關係同樣適用於交叉驗證集和測試集的輸入特徵值。
常見的PCA算法應用:
- 數據壓縮(節約存儲空間,算法加速)
選擇 值,保留 的差異性。 - 數據可視化
或 。
PCA算法誤用
避免過擬合
用 代替 來減少特徵數量: ,且 ;
因爲特徵值越少,似乎越不容易過擬合;
這方法可能會有作用,但並不是好方法,避免過擬合應該用正則化方法。
在設計機器學習系統時,直接使用PCA算法
建議:在執行PCA算法前,首先在原始數據 上執行相關算法,只有當算法收斂緩慢,佔用內存/磁盤空間很大時,再執行PCA算法,使用 計算。