局部保留投影算法(個人學習)


LPP(局部保留投影算法)

LPP是降維算法之一,降維的目的是為了緩解維數災難的問題,一個維度為m的原始空間,當m足夠大時,對其進行內積運算就會產生內存不足的情況,特別是在處理人臉識別數據集的時候,人臉數據集中有很多冗余的信息,而降維的目的就是刪除掉這些冗余的信息,構建一個新的坐標軸,是原始數據點可以投影到一個新的坐標軸上。

 

典型的降維的例子:PCA(Principal Component Analysis):主元分析、主成分法。常用於高維數據的降維。可用於提取數據的主要特征分量

 

【總問題】如何提取數據的主要特征分量?

其幾何表示見下圖:

                                 

我們可以看出A 與 B 的內積等於 A 到 B 的投影長度乘以 B 的模。如果假設 B 的模為 1,那么就變成了A·B=|A|·|B|cosA=|A|cosA,也就是說A 與 B 的內積值等於 A 向 B 所在直線投影的矢量長度。
我們想要描述一個向量,首先要確定一組基,然后給出所在基上的投影值,例如。向量(5,2),我們可以說它在\left ( 1,0 \right )\left ( 0,1\right )這組基下,分別內積即可。向量基最好選擇模長為1,當模長為1時,內積直接就可以表示向量投影,而且向量基要求線性無關。
 
舉個栗子:例如對於數據點 [公式] 來說,想變換到剛才那組基上[公式] 和 [公式] ,則可以這樣表示:

$$ \begin{bmatrix} \left ( \sqrt{2}\right ) ^{-1}& \left ( \sqrt{2}\right ) ^{-1} \\ \left ( -\sqrt{2}\right ) ^{-1}& \left ( \sqrt{2}\right ) ^{-1} \end{bmatrix} \tag{4} $$$$ \begin{bmatrix} \left 1& 2&3 \\1}&2&3\end{bmatrix} \tag{2} $$=$$ \begin{bmatrix} \left 2/\sqrt{2}& 4/\sqrt{2}&6/\sqrt{2} \\0}&0&0\end{bmatrix} \tag{2} $$
 
 
通用的表示形式:

                  

其中p_{i}是一個行向量,表示第 i 個基,a_{i}是一個列向量,表示第 j 個原始數據記錄。實際上也就是做了一個向量矩陣化的操作。

現在我們可以對矩陣相乘有了一個新的物理解釋:
兩個矩陣相乘的意義是將右邊矩陣中的每一列向量 a_{i}變換到左邊矩陣中以每一行行向量為基所表示的空間中去。也就是說一個矩陣可以表示一種線性變換。
而且我們還可以看出,如果基的數量少於向量本身的維數,則可以達到降維的效果。
 
【問題一】如何得到一個最優的向量基?
直觀的想法是投影后的值盡可能分散,如果數據重疊,有些樣本就會消失。
1.一維用方差:
分散程度我們可以用方差來表示,一個變量的方差可以看作是每個元素與變量均值的差的平方和的均值,(圍繞平均數波動的大小,在一維空間中我們用方差來表示數據的分散程度)即: 

                                                          

 

那么我們想要使數據盡量分散,就期望當我們在尋找最優的基的時候,是的所有數據變換為這個基上的坐標后,方差最大。

2.多維數據用協方差:

協方差可以表示兩個變量的相關性。為了讓兩個變量盡可能表示更多的原始信息,我們希望它們之間不存在線性相關性,因為相關性意味着兩個變量不是完全獨立,必然存在重復表示的信息。

協方差公式為:

                                                        

當協方差為 0 時,表示兩個變量完全獨立。為了讓協方差為 0,我們選擇第二個基時只能在與第一個基正交的方向上進行選擇,因此最終選擇的兩個方向一定是正交的。

至此,我們得到了降維問題的優化目標:將一組 N 維向量降為 K 維,其目標是選擇 K 個單位正交基,使得原始數據變換到這組基上后,各變量兩兩間協方差為 0,而變量方差則盡可能大(在正交的約束下,取最大的 K 個方差)

3.變量方差以及協方差,將二者統一表示。

二者都可以表示內積的形式,即,我們前面提到過的矩陣相乘表示向量內積。

 

假設我們只有 a 和 b 兩個變量,那么我們將它們按行組成矩陣 X:

 

[公式]

然后:

[公式]

 

我們可以看到這個矩陣對角線上的分別是兩個變量的方差,而其它元素是 a 和 b 的協方差。兩者被統一到了一個矩陣里。

 因此,根據之前的分析,如果使得數據盡量分量,所以我們需要讓該對稱矩陣的對角線上面的值(即方差)盡可能的大,方差大小從小到大的排列,非對角線上的元素(即協方差)都為0。這樣就可以達到優化的目的。

3.矩陣對角化

 

原始數據矩陣 X 對應的協方差矩陣為 C,而 P 是一組基按行組成的矩陣,設 Y=PX,則 Y 為 X 對 P 做基變換后的數據。設 Y 的協方差矩陣為 D,我們推導一下 D 與 C 的關系:

 

[公式]

 

這樣我們就看清楚了,我們要找的 P 是能讓原始協方差矩陣對角化的 P。換句話說,優化目標變成了尋找一個矩陣 P,滿足 [公式] 是一個對角矩陣,並且對角元素按從大到小依次排列,那么 P 的前 K 行就是要尋找的基,用 P 的前 K 行組成的矩陣乘以 X 就使得 X 從 N 維降到了 K 維並滿足上述優化條件。

 

至此,我們離 PCA 還有僅一步之遙,我們還需要完成對角化。

由上文知道,協方差矩陣 C 是一個是對稱矩陣,在線性代數中實對稱矩陣有一系列非常好的性質:

  1. 實對稱矩陣不同特征值對應的特征向量必然正交。
  2. 設特征值 [公式] 重數為 r,則必然存在 r 個線性無關的特征向量對應於 [公式] ,因此可以將這 r 個特征向量單位正交化。

由上面兩條可知,一個 n 行 n 列的實對稱矩陣一定可以找到 n 個單位正交特征向量

設這 n 個特征向量為 [公式] ,我們將其按列組成矩陣: [公式] 。

則對協方差矩陣 C 有如下結論:

[公式]

其中 [公式] 為對角矩陣,其對角元素為各特征向量對應的特征值(可能有重復)。

到這里,我們發現我們已經找到了需要的矩陣 P: [公式] 。(因為之前的矩陣是豎着的列向量,P 是協方差矩陣的特征向量單位化后按行排列出的矩陣)

 

P 是協方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是 C 的一個特征向量。(這個矩陣P其實就是代表我們從一組方向上選擇一個方向使得投影后的點散的開,也就是分散程度最大)

 

如果設 P 按照 [公式] 中特征值的從大到小,將特征向量從上到下排列,則用 P 的前 K 行組成的矩陣乘以原始數據矩陣 X,就得到了我們需要的降維后的數據矩陣 Y。

 

總結一下PCA算法的步驟:

設有 m 條 n 維數據。

  1. 將原始數據按列組成 n 行 m 列矩陣 X;
  2. 將 X 的每一行進行零均值化,即減去這一行的均值;
  3. 求出協方差矩陣 [公式] ;
  4. 求出協方差矩陣的特征值及對應的特征向量;
  5. 將特征向量按對應特征值大小從上到下按行排列成矩陣,取前 k 行組成矩陣 P;
  6. [公式] 即為降維到 k 維后的數據。

··················································································································

 

哈希算法叫做安全散列算法,又稱信息摘要。感知哈希算法可以用來比較兩張圖片的相似度。感知圖像哈希就是尋找一個哈希函數H(I),將圖像映射到一個短序列H =H(I),使其能夠表示圖像本身,並進一步用於各種應用。

圖像感知算法的處理過程:

  1. 縮小尺寸:將圖像縮小到8*8的尺寸,總共64個像素。這一步的作用是去除圖像的細節,只保留結構/明暗等基本信息,摒棄不同尺寸/比例帶來的圖像差異;
  2. 簡化色彩:將縮小后的圖像,轉為64級灰度,即所有像素點總共只有64種顏色;
  3. 計算平均值:計算所有64個像素的灰度平均值;
  4. 比較像素的灰度:將每個像素的灰度,與平均值進行比較,大於或等於平均值記為1,小於平均值記為0;
  5. 計算哈希值:將上一步的比較結果,組合在一起,就構成了一個64位的整數,這就是這張圖像的指紋。
  6. 組合的次序並不重要,只要保證所有圖像都采用同樣次序就行了; 得到指紋以后,就可以對比不同的圖像,看看64位中有多少位是不一樣的。在理論上,這等同於”漢明距離”(Hamming distance,在信息論中,兩個等長字符串之間的漢明距離是兩個字符串對應位置的不同字符的個數)。如果不相同的數據位數不超過5,就說明兩張圖像很相似;如果大於10,就說明這是兩張不同的圖像。

·········································································································

魯棒性:一個系統或組織有抵御或克服不利條件的能力。

機器學習,訓練模型時,工程師可能會向算法內添加噪聲(如對抗訓練),以便測試算法的「魯棒性」。可以將此處的魯棒性理解為算法對數據變化的容忍度有多高。

 

···········································································································

 

計算漢明距離的算法

在信息論中,兩個等長字符串之間的漢明距離(英語:Hamming distance)是兩個字符串對應位置的不同字符的個數。

換句話說,它就是將一個字符串變換成另外一個字符串所需要替換的字符個數。

 

  思路:

 

  01.將兩個給定的數進行 異或(^)運算后保存在變量a,漢明距離就是a的二進制中1的個數

 

  02.當a不為0時,和0x01進行 按位與(&)運算,如果結果為1,則統計變量加一

 

  03.將a右移一位,重復第02步

 

    1. class Solution {
    2.  
      public:
    3.  
      int hammingDistance(int x, int y) {
    4.  
      int num=0;
    5.  
      x=x^y;
    6.  
      while(x!=0)
    7.  
      {
    8.  
      if(x&0x01)
    9.  
      num++;
    10.  
      x=x>> 1;
    11.  
      }
    12.  
      return num;}
    13.  
      };

·························································································································································

雙線性插值的公式

雙線性插值:在兩個方向分別進行一次線性插值(首先在一個方向上使用線性插值,然后再在另一個方向上使用線性插值執行雙線性插值。盡管每個步驟在采樣值和位置上都是線性的,但是插值總體上不是線性的,而是在采樣位置上是二次的。)

在這里插入圖片描述
如圖所示,我們需要求P點的像素值。我們已知了Q11、Q21、Q12、Q22、P的坐標。也知道Q11、Q21、Q12、Q22的像素值。所以先用關於X的單線性插值去分別計算R1、R2的像素值:
在這里插入圖片描述

在右邊的等式中的字母f(Q11)、f(Q12)、f(Q21)、f(Q22)、x1、x2、x都是已知的,求出的f(x,y1)與f(x,y2)即為R1、R2的像素值。
再使用關於y方向的單線性插值計算P點的像素值
得出:
在這里插入圖片描述

在右邊的等式中的字母y1、y2、y都是已知的,f(x,y1)與f(x,y2)即為上一個式子中求出的R1、R2像素值。

 

 

什么是圖像歸一化?

歸一化就是通過一系列變換(即利用圖像的不變矩尋找一組參數使其能夠消除其他變換函數對圖像變換的影響),將待處理的原始圖像轉換成相應的唯一標准形式(該標准形式圖像對平移、旋轉、縮放等仿射變換具有不變特性)。

基於矩的圖像歸一化技術基本工作原理為:首先利用圖像中對仿射變換具有不變性的矩來確定變換函數的參數, 然后利用此參數確定的變換函數把原始圖像變換為一個標准形式的圖像(該圖像與仿射變換無關)。 一般說來,基於矩的圖像歸一化過程包括4個步驟,即坐標中心化、x-shearing 歸一化、縮放歸一化和旋轉歸一化。

···················································································································································

下面介紹公式中各個參數的含義:

波長(λ):它的值以像素為單位指定,通常大於等於2.但不能大於輸入圖像尺寸的五分之一。

方向(θ):這個參數指定了Gabor函數並行條紋的方向,它的取值為0到360度

相位偏移(φ):它的取值范圍為-180度到180度。其中,0he180度分別對應中心對稱的center-on函數和center-off函數,而-90度和90度對應反對稱函數。

長寬比(γ):空間縱橫比,決定了Gabor函數形狀(support,我翻譯為形狀)的橢圓率(ellipticity)。當γ= 1時,形狀是圓的。當γ< 1時,形狀隨着平行條紋方向而拉長。通常該值為0.5

帶寬(b):Gabor濾波器的半響應空間頻率帶寬b和σ/ λ的比率有關,其中σ表示Gabor函數的高斯因子的標准差,如下:


σ的值不能直接設置,它僅隨着帶寬b變化。帶寬值必須是正實數,通常為1,此時,標准差和波長的關系為:σ= 0.56 λ。帶寬越小,標准差越大,Gabor形狀越大,可見平行興奮和抑制區條紋數量越多。

 

 

·························································································································

1.特征提取得到了歸一化矩陣X

2.最大Gabor濾波響應:選取6個方向

θ1= 0, θ2= π/6,θ3= π/3, θ4= π/2, θ5= 2π/3, θ6= 5π/6.

對歸一化特征矩陣X進行Gabor濾波。

得到的最大Gabor濾波響應表示為G(Gabor濾波響應最大值)

Gv,i= max(Gθ1,v,i, Gθ2,v,i, Gθ3,v,i, Gθ4,v,i, Gθ5,v,i, Gθ6,v,i),

1 ≤ v ≤ b², 1 ≤ i ≤ N。

我們將G表示成為G = [g1,g2,g3,· · · ,gN]

(到這一步我們只是做到了提取特征,下一步我們需要通過LPP在Gabor所提取的特征中保持局部特征)

matlab代碼

3.LPP(在Gabor所提取的特征中保持局部特征)

從高維空間中最優地保留局部鄰域結構信息,已成功地用於提取圖像鑒別特征進行識別。

 

現在我們要從一個b²XN的G矩陣,降維到一個dXN的F矩陣,(d<<b²)

F為通過LPP對應的低維結構,N是列數,b² 和 d都是維數。

 

 

 --------------------------------------------------------------------------------------------------

 在機器學習中,在面對非線性問題時,往往都會用到一個名為“核函數”的技巧

 

 

 

如圖所示,左面的圖為為原空間,右面的圖為映射后的空間,從圖中也可以看出來,左面圖要用一個橢圓才能將兩個類別分割開來,而右面的圖要用一個超平面就可以分割開,也如圖上的共識所示,原空間點左邊為(x1,x2),經過某個函數或者某種計算方法,轉化為特征空間上點坐標為(z1,z2,z3),所以我們之前的說法是正確的,將低維空間轉化到高維空間大概率可以對其中的點進行線性分割。

這樣,我們第一步就理解了,就是在低維空間上的點通過某一函數轉化為高維空間上,更有助於線性分類。

Kernel:映射的內積

內積的意義:

 為什么我們在論文中提到LPP算法也要用到核函數呢?

 

 
左圖為原數據,右圖為映射到三維的數據,可以看出:同樣是降到1維,先通過Kernel映射到(Kernel是映射的內積,不要弄亂了)三維,再投影到1維,就容易分離開,這就是Kernel在PCA降維中的應用,本質還是對原有數據增加維度。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM