大學學習線性代數的時候,特征值(eigenvalue)和特征向量(eigenvector)一直不甚理解,盡管課本上說特征值和特征向量在工程技術領域有着廣泛的應用,但是除了知道怎么求解特征值和特征向量之外,對其包含的現實意義知之甚少。研究生之后學習統計學,在進行主成分分析過程中,需要求解變量的協方差矩陣的特征值和特征向量,並根據特征值的大小確定主成分,似乎知道了特征值和特征向量的一點點現實意義,但是本着考試為主的態度,沒有深入進去理解特征值和特征向量。最近看機器學習的一些方法,如特征降維方法如SVD和PCA,線性判別法(Linear Discriminant Analysis,LDA)等方法的時候都涉及到特征值和特征向量,發現如果不深入理解特征值和特征向量,對這些方法的學習只能浮於表面,難以透徹理解。痛定思痛,決定由表及里好好的學習一下特征值和特征向量,本文的關於特征值和特征向量的理解和表述大量參考了網上的資料,僅作為本人學習筆記,謝絕轉載。
一、特征值和特征向量的概念和計算
先看一下教科書上的定義:設A是n階方陣,如果存在常數及非零n向量x,使得
,則稱
是矩陣A的特征值,x是A屬於特征值
的特征向量。給定n階矩陣A,行列式
的結果是關於的一個多項式,成為矩陣A的特征多項式,該特征多項式構成的方程
稱為矩陣A的特征方程。
定理:n階矩陣A的n個特征值就是其特征方程的n個跟
;而A的屬於特征值
的特征向量就是其次線性方程
的非零解。
例:求的特征根和特征向量
解:,解一元二次方程可得
,
;
對應的特征向量為x滿足
,求得
對應的特征向量為x滿足
,求得
二、特征值和特征向量的幾何意義
1、矩陣、向量、向量的矩陣變換
在進行特征和特征向量的幾何意義解釋之前,我們先回顧一下向量、矩陣、向量矩陣變換的等相關知識。
向量有行向量和列向量,向量在幾何上被解釋成一系列與軸平行的位移,一般說來,任意向量v都能寫成"擴展"形式:
以3維向量為例,定義p、q、r為指向+x,+y和+z方向的單位向量,則有v=xp+yq+zr。現在向量v就被表示成p、q、r的線性變換了。這里的基向量是笛卡爾積坐標軸,但事實上這個一個坐標系可以由任意的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個樣本構成組成了n行p列的矩陣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:\\research in progress\\百度雲同步盤\\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來查看預測結果