本文轉自https://www.cnblogs.com/jiahuaking/p/3843071.html
大學學習線性代數的時候,特徵值(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來查看預測結果