特征分解


 

特征分解(eigendecomposition)是使用最廣的矩陣分解之一,即我們將矩陣分解成一組特征向量和特征值。

方陣 A 的 特征向量(eigenvector)是指與 A 相乘后相當於對該向量進行縮放的非零向量 v: 

標量 λ 被稱為這個特征向量對應的 特征值(eigenvalue)。(類似地,我們也可以 定義 左特征向量(left eigenvector) vA = λv,但是通常我們更關注 右特征向量 (right eigenvector))。 

如果 vA 的特征向量,那么任何縮放后的向量 sv (s ∈ R, s ≠ 0) 也是 A 的 特征向量。此外, svv 有相同的特征值。基於這個原因,通常我們只考慮單位特征向量

假設矩陣 A 有 n 個線性無關的特征向量 {v(1),...,v(n)},對應着特征值{λ1, ..., λn}。我們將特征向量連接成一個矩陣,使得每一列是一個特征向量: V =  [v(1),...,v(n)]. 類似地,我們也可以將特征值連接成一個向量 λ = [λ1, ..., λn]。 因此 A 的 特征分解(eigendecomposition)可以記作

* diag(λ)向量λ在n*n的方針的對角線上。

正交矩陣的轉置和逆矩陣相等

設A是對稱矩陣
A^T = A
A^-1 = (A^T)^-1 = (A^-1)^T (即A的逆也是對稱矩陣)

 

我們已經看到了構建具有特定特征值和特征向量的矩陣,能夠使我們在目標方向上延伸空間。然而,我們也常常希望將矩陣分解(decompose)成特征值和特征向量。這樣可以幫助我們分析矩陣的特定性質。不是每一個矩陣都可以分解成特征值和特征向量。在某些情況下,特征分解存在,但是會涉及復數而非實數。在深度學習中,我們通常只需要分解一類有簡單分解的矩陣。具體來講,每個實對稱矩陣都可以分解成實特征向量和實特征值:

其中 Q A 的特征向量組成的正交矩陣, Λ 是對角矩陣。特征值 Λi,i 對應的特征向量是矩陣 Q 的第 i 列,記作 Q:,i。因為 Q 是正交矩陣,我們可以將 A 看作沿方 向 v(i) 延展 λi 倍的空間。如圖 2.3 所示的例子。

 

雖然任意一個實對稱矩陣 A 都有特征分解,但是特征分解可能並不唯一。如果兩個或多個特征向量擁有相同的特征值,那么在由這些特征向量產生的生成子空間中,任意一組正交向量都是該特征值對應的特征向量。因此,我們可以等價地從這些特征向量中構成 Q 作為替代。按照慣例,我們通常按降序排列 Λ 的元素。在該約定下,特征分解唯一當且僅當所有的特征值都是唯一的。

矩陣的特征分解給了我們很多關於矩陣的有用信息。矩陣是奇異的當且僅當含 有零特征值。實對稱矩陣的特征分解也可以用於優化二次方程 f(x) = x⊤Ax,其中 限制 ∥x∥2 = 1。當 x 等於 A 的某個特征向量時, f 將返回對應的特征值。在限制條 件下,函數 f 的最大值是最大特征值,最小值是最小特征值。

所有特征值都是正數的矩陣被稱為 正定(positive definite);所有特征值都是非負數的矩陣被稱為 半正定(positive semidefinite)。同樣地,所有特征值都是負數的矩陣被稱為 負定(negative definite);所有特征值都是非正數的矩陣被稱為 半負定 (negative semidefinite)。 半正定矩陣受到關注是因為它們保證 xAx ≥ 0。此外, 正定矩陣還保證 xAx = 0 → x = 0。

 

正交矩陣

正交化

如果是實對稱矩陣,那么它的不同特征值的特征向量必然正交。

 

 

 

求解特征值和特征向量

一、特征值和特征向量的概念和計算

    明確定義:設An階方陣,如果存在常數及非零n向量x,使得,則稱是矩陣A的特征值,xA屬於特征值的特征向量。給定n階矩陣A,行列式

的結果是關於的一個多項式,成為矩陣A的特征多項式,該特征多項式構成的方程稱為矩陣A的特征方程。

 

  定理:n階矩陣A的n個特征值就是其特征方程的n個跟;而A的屬於特征值的特征向量就是齊次線性方程的非零解。

齊次線性方程:

  例:的特征值和特征向量

  解:,解一元二次方程可得

    對應的特征向量為x滿足,求得

    對應的特征向量為x滿足,求得

二、特征值和特征向量的幾何意義

1、矩陣、向量、向量的矩陣變換

  在進行特征和特征向量的幾何意義解釋之前,我們先回顧一下向量矩陣向量矩陣變換的等相關知識。

  向量行向量列向量向量在幾何上被解釋成一系列與軸平行的位移,一般說來,任意向量v都能寫成"擴展"形式:

  以3維向量為例,定義pqr為指向+x,+y和+z方向的單位向量,則有v=xp+yq+zr。現在向量v就被表示成pqr線性變換了。這里的基向量是笛卡爾積坐標軸,但事實上這個一個坐標系可以由任意的3個基向量定義,只要這3個基向量線性無關就行(不在同一平面上)。因此,用一個矩陣乘以向量,如Ax,表述如下:

  如果把矩陣的行解釋為坐標系的基向量,矩陣與向量相乘(或向量與矩陣相乘)相當於執行一次坐標轉換,Ax=y可表述為x經矩陣A變換后變為y。因此,追溯矩陣的由來,與向量的關系,我們會覺得矩陣並不神秘,它只是用一種緊湊的方式來表達坐標轉換所需的數學運算。

2、矩陣的特征值和特征向量

  矩陣A的特征值和特征向量分別為x,記為,該式子可理解為向量x在幾何空間中經過矩陣A的變換后得到向量。由此可知,向量x經過矩陣A變換后,方向並無改變(反方向不算方向改變),只是伸縮了倍。

  以矩陣為例,其特征向值分別為,對應的特征向量為,那么)表示向量經過矩陣A變換后,得到,向量變換變為改變方向,知識將在原方向上擴充了2倍。特征值也是同樣道理,經過矩陣A變換后特征向量在原方向上擴充了3倍。

  因此,將特征向量看成基向量,矩陣就是這些基向量向對應的特征值伸展所需的數學運算。給定一個矩陣,就可以找出對應的基(特征向量),及透過向量變換(矩陣),這些基的伸展(特征值)。

三、特征值和特征向量的應用實例

1、主成分分析(Principle Component Analysis, PCA)

(1)方差、協方差、相關系數、協方差矩陣

    方差:

    協方差: 

    **方差是衡量單變量的離散程度,協方差是衡量兩個變量的相關程度(親疏),協方差越大表明兩個變量越相似(親密),協方差越小表明兩個變量之間相互獨立的程度越大。

    相關系數:

    **協方差和相關系數都可以衡量兩個表明的相關程度,協方差未消除量綱,不同變量之間的協方差大小不能直接比較,而相關系數消除了量綱,可以比較不同變量之間的相關程度。

    協方差矩陣:如果有兩個變量X,Y,那么協方差矩陣為,協方差陣說明了樣本中變量間的親疏關系。

(2)主成分分析的思想和算法

  主成分分析是利用降維的思想,將多個變量轉化為少數幾個綜合變量(即主成分),其中每個主成分都是原始變量的線性組合,各主成分之間互不相關,從而這些主成分能夠反映始變量的絕大部分信息,且所含的信息互不重疊。它是一個線性變換,這個變換把數據變換到一個新的坐標系統中,使得任何數據投影的第一大方差在第一個坐標(稱為第一主成分)上,第二大方差在第二個坐標(第二主成分)上,依次類推。主成分分析經常用減少數據集的維數,同時保持數據集的對方差貢獻最大的特征。

  假設用p個變量來描述研究對象,分別用X1,X2…Xp來表示,這p個變量構成的p維隨機向量為X=(X1,X2…Xp),n個樣本構成組成了np列的矩陣A。主成分求解過程如下:

  第一步,求解得到矩陣A的協方差陣B;

  第二步,求解協方差陣B,得到按大小順序排列的特征值向量為特征值向量中每個特征值組成的對角矩陣,U為所有特征值對應的特征向量構成的矩陣U,因此有重點來了,U是有特征向量構成的正定陣,向量的每一行可以視為一個的基向量,這些基向量經過矩陣B轉換后,得到了在各個基向量上的伸縮,伸縮的大小即為特征向量。

第三步,主成分個數選擇,根據特征值的大小,將特征值較大的作為主成分,其對應的特征向量就為基向量,特征值的篩選根據實際情況而定,一般大於1即可考慮作為主成分。

(3)實例分析——機器學習中的分類問題

  機器學習中的分類問題,給出178個葡萄酒樣本,每個樣本含有13個參數,比如酒精度、酸度、鎂含量等,這些樣本屬於3個不同種類的葡萄酒。任務是提取3種葡萄酒的特征,以便下一次給出一個新的葡萄酒樣本的時候,能根據已有數據判斷出新樣本是哪一種葡萄酒。

問題詳細描述:http://archive.ics.uci.edu/ml/datasets/Wine
訓練樣本數據:http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

把數據集賦給一個178行13列的矩陣R,它的協方差矩陣C是13行13列的矩陣,對C進行特征分解,對角化,其中U是特征向量組成的矩陣,D是特征之組成的對角矩陣,並按由大到小排列。然后,令,就實現了數據集在特征向量這組正交基上的投影。嗯,重點來了,中的數據列是按照對應特征值的大小排列的,后面的列對應小特征值,去掉以后對整個數據集的影響比較小。比如,現在我們直接去掉后面的7列,只保留前6列,就完成了降維。

  下面我們看一下降維前和降維后的使用svm分類結果,本部分采用實現SVM的R語言包e1071,代碼如下表所示。分類結果顯示,使用主成分分析后的樣本和未進行主成分分析樣本的分類結果一樣。因此,主成分分析提取的6個主成分能較好的表達原樣本的13個變量。

 
library("e1071")
#讀取數據
wineData=read.table("E:\\blog\\特征值和特征向量\\data.csv",header=T,sep=",");

#計算協方差陣
covariance = cov(wineData[2:14])

#計算特征值和特征向量
eigenResult=eigen(covariance)

#選取6個主成分,並計算這6個主成分解釋的方差總和
PC_NUM = 6
varSum=sum(eigenResult$values[1:PC_NUM])/sum(eigenResult$values)

#降維后的樣本
ruduceData= data.matrix(wineData[2:14])%*%eigenResult$vectors[,1:PC_NUM]

#加入分類標簽
#finalData=cbind(wineData$class,ruduceData)

#給finalData添加列名
#colnames(finalDat) =c("calss","pc1","pc2","pc3","pc4","pc5","pc6")

#訓練樣本--主成分分析后的樣本作為訓練樣本
y=wineData$class;
x1=ruduceData;
model1 <- svm(x1, y,cross=10)
pred1 <- predict(model1, x1)
#pred1 <- fitted(model1)
table(pred1, y) #使用table來查看預測結果

#訓練樣本--原數據作為訓練樣本
x2=wineData[2:14]
model2 <- svm(x2, y,cross=10)
#pred2 <- predict(model2, x2)
pred2 <- fitted(model2)
table(pred2, y) #使用table來查看預測結果
 
 
 


免責聲明!

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



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