Coursea-吳恩達-machine learning學習筆記(十四)【week 8之Dimensionality Reduction】

維數約減又稱爲降維。
使用維數約減的原因:
1. 數據壓縮(減少空間佔用,同時爲算法提速)
例1:從2D1D
存在如下圖所示樣本集,x(i)R2
這裏寫圖片描述
希望找到如下圖中所示直線,把所有樣本映射到這條線上
這裏寫圖片描述
如此,就可以使用下圖來表示樣本位置,只需要一個特徵變量即可:
這裏寫圖片描述
x(1)R2z(1)R
x(2)R2z(2)R

x(m)R2z(m)R

例2:從3D2D
存在如下圖所示樣本集,x(i)R3
這裏寫圖片描述
把所有樣本投影到一個二維平面上,如下圖所示:
這裏寫圖片描述
則可以使用兩個特徵值來表示樣本點的位置,如下圖:
這裏寫圖片描述
z(i)=[z1(i)z2(i)]
2. 數據可視化
x(i)R50 時,無法有效觀察理解數據,將其降維至z(i)R3z(i)R2 ,就可以呈現爲3D2D 的圖像。

主成分分析法(PCA):是當前最常用的降維算法。

PCA實質爲尋找一個低維的面,把數據投射在上面,使得樣本點到面的垂直距離的平方和達到最小值。這些垂直距離也稱爲投影誤差。
更一般化的表達是:從n 維降到k 維,找到k 個向量u(1),u(2),,u(k) ,將樣本數據投射在這k 個向量上,使得投影誤差最小。

在應用PCA之前,通常會進行均值歸一化和特徵規範化。

訓練集:{x(1),x(2),,x(m)}
在執行PCA算法前的數據預處理

  1. 均值歸一化
    μj=1mi=1mxj(i)
    xj(i)μj 替換xj(i)
  2. 特徵縮放(可選)
    如果不同特徵值取值範圍差異較大,則進行特徵縮放,使得各特徵值具有類似的取值範圍。
    xj(i)μjsj 替換xj(i)sj 表示特徵值xj 的最大值-最小值或標準差。

PCA算法
將數據從n 維降維到k 維:
計算協方差矩陣:Σ=1mi=1m(x(i))(x(i))T (注:Σ 表示希臘字母Sigma)
Octave 代碼:Sigma=(1/m)*X'*X 其中X=[x(1)Tx(2)Tx(m)T]
計算矩陣Σ 的特徵向量:
Octave 代碼:[U,S,V]=svd(Sigma);
svd表示奇異值分解,在Octave 中,也可以用eig()命令求特徵向量;
Sigma協方差矩陣是一個n×n 矩陣;
上述語句輸出三個矩陣,我們需要的是U 矩陣,也是n×n 矩陣;
U 矩陣的列就是我們需要的向量:U=[u(1),u(2),,u(n)]Rn×n
提取U 矩陣的前k 列向量組成矩陣Ureduce=[u(1),u(2),,u(k)]Rn×k
Octave 代碼:Ureduce=U(:,1:k);
我們的目的是xRnzRkz=UreduceTx
其中,UreduceTRk×n,xRn×1 ,所以zRk
Octave 代碼:z=Ureduce'*x;
注:使用PCA算法,xRn ,沒有x0=1 這一項。

PCA算法壓縮數據的原始數據重構
由上已知:z=UreduceTx ,我們現在需要zRkxRn
所以:xapprox=UreducezxUreducen×k 矩陣,zk×1 向量,故xapproxn×1 向量。

PCA算法中,把n 維特徵變量降維到k 維特徵變量,k 也被稱爲主成分的數量。

如何選擇k
兩個定義:

平均平方映射誤差:1mi=1mx(i)xapprox(i)2 ,表示樣本x 和其在低維平面映射點之間的距離的平方的均值。
數據的總變差:1mi=1mx(i)2 ,訓練樣本長度的平方的均值,表示訓練樣本與0 向量的平均距離。

選擇k 的法則
使

1mi=1mx(i)xapprox(i)21mi=1mx(i)20.01
的最小的k 值。
此時,保留了99% 的差異性。

算法
k=1 嘗試PCA算法:
計算Ureduce,z(1),z(2),,z(m),xapprox(1),,xapprox(m)
檢查1mi=1mx(i)xapprox(i)21mi=1mx(i)2 是否0.01
若符合條件,取k=1 ,若不符合條件,k++ ,直到找到滿足條件的最小的k 值。

上述算法的計算過於繁雜,對該算法進行改進。

改進版算法
執行語句[U,S,V]=svd(Sigma)會得到S 矩陣;
S 矩陣是一個正方形矩陣,形式爲[S11S22Snn]
對於給定的k 值,只需滿足1i=1kSiii=1nSii0.01i=1kSiii=1nSii0.99
不斷增加k 的取值來尋求滿足的條件的最小k 值。

當使用特定的k 值時,也可以用i=1kSiii=1nSii 來表示PCA算法性能。

PCA算法應用

監督學習算法加速
存在樣本集{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}
提取出輸入特徵值,無標籤數據集{x(1),x(2),,x(m)}R10000
執行PCA算法,得到數據集{z(1),z(2),,z(m)}R1000
形成新的訓練樣本:{(z(1),y(1)),(z(2),y(2)),,(z(m),y(m))}
提出基於新訓練樣本的假設函數hθ(z)
注:x(i)z(i) 的映射關係是通過在訓練集上運行PCA算法定義的,這個映射關係同樣適用於交叉驗證集和測試集的輸入特徵值。

常見的PCA算法應用:

  1. 數據壓縮(節約存儲空間,算法加速)
    選擇k 值,保留x% 的差異性。
  2. 數據可視化
    k=23

PCA算法誤用

避免過擬合
z(i) 代替x(i) 來減少特徵數量:nk ,且k<n
因爲特徵值越少,似乎越不容易過擬合;
這方法可能會有作用,但並不是好方法,避免過擬合應該用正則化方法。

在設計機器學習系統時,直接使用PCA算法
建議:在執行PCA算法前,首先在原始數據x(i) 上執行相關算法,只有當算法收斂緩慢,佔用內存/磁盤空間很大時,再執行PCA算法,使用z(i) 計算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章