機器學習(白化-whitening)


1、相關理論     白化這個詞,可能在深度學習領域比較常遇到,挺起來就是高大上的名詞,然而其實白化是一個比PCA稍微高級一點的算法而已,因此若是熟悉PCA,那麼其實會發現這是一個很是簡單的算法。     白化的目的是去除輸入數據的冗餘信息。假設訓練數據是圖像,因爲圖像中相鄰像素之間具備很強的相關性,因此用於訓練時輸入是冗餘的;白化的目的就是下降輸入的冗餘性。    php

     輸入數據集X,通過白化處理後,新的數據X’知足兩個性質: (1)特徵之間相關性較低; (2)全部特徵具備相同的方差。     其實咱們以前學的PCA算法中,可能PCA給咱們的印象是通常用於降維操做。然而其實PCA若是不降維,而是僅僅使用PCA求出特徵向量,而後把數據X映 射到新的特徵空間,這樣的一個映射過程,其實就是知足了咱們白化的第一個性質:除去特徵之間的相關性。所以白化算法的實現過程,第一步操做就是PCA,求出新特徵空間中X的新座標,而後再對新的座標進行方差歸一化操做。 2、算法概述 白化分爲PCA白化、ZCA白化,下面主要講解算法實現。這部分主要是學了UFLDL的深度學習《白化》教程:        http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96。算法

        本身的一點歸納總結,算法實現步驟以下: 一、首先是PCA預處理       上面圖片,左圖表示原始數據X,而後咱們經過協方差矩陣能夠求得特徵向量u一、u2,而後把每一個數據點,投影到這兩個新的特徵向量,獲得進行座標以下: 這就是所謂的pca處理。 二、PCA白化 所謂的pca白化是指對上面的pca的新座標X’,每一維的特徵作一個標準差歸一化處理。由於從上面咱們看到在新的座標空間中,(x1,x2)兩個座標軸方向的數據明顯標準差不一樣,所以咱們接着要對新的每一維座標作一個標註差歸一化處理: 固然你也能夠採用下面的公式: X’爲通過PCA處理的新PCA座標空間,而後λi就是第i維特徵對應的特徵值(前面pca獲得的特徵值),ε是爲了不除數爲0。 三、ZCA白化 ZCA白虎是在PCA白化的基礎上,又進行處理的一個操做。具體的實現是把上面PCA白化的結果,又變換到原來座標系下的座標: 給人的感受就像是在PCA空間作了處理完後,而後又把它變換到原始的數據空間。 具體源碼實現以下:學習

        def zca_whitening(inputs):     sigma = np.dot(inputs, inputs.T)/inputs.shape[1] #inputs是通過歸一化處理的,因此這邊就至關於計算協方差矩陣     教程

        U,S,V = np.linalg.svd(sigma) #奇異分解     epsilon = 0.1                #白化的時候,防止除數爲0         ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(np.diag(S) + epsilon))), U.T)       #計算zca白化矩陣     圖片

  return np.dot(ZCAMatrix, inputs)   #白化變換input

 

參考文獻:一、http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96源碼

相關文章
相關標籤/搜索