特徵值與特徵向量及其應用

本文轉自https://www.cnblogs.com/jiahuaking/p/3843071.html

大學學習線性代數的時候,特徵值(eigenvalue)和特徵向量(eigenvector)一直不甚理解,儘管課本上說特徵值和特徵向量在工程技術領域有着廣泛的應用,但是除了知道怎麼求解特徵值和特徵向量之外,對其包含的現實意義知之甚少。研究生之後學習統計學,在進行主成分分析過程中,需要求解變量的協方差矩陣的特徵值和特徵向量,並根據特徵值的大小確定主成分,似乎知道了特徵值和特徵向量的一點點現實意義,但是本着考試爲主的態度,沒有深入進去理解特徵值和特徵向量。最近看機器學習的一些方法,如特徵降維方法如SVD和PCA,線性判別法(Linear Discriminant Analysis,LDA)等方法的時候都涉及到特徵值和特徵向量,發現如果不深入理解特徵值和特徵向量,對這些方法的學習只能浮於表面,難以透徹理解。痛定思痛,決定由表及裏好好的學習一下特徵值和特徵向量,本文的關於特徵值和特徵向量的理解和表述大量參考了網上的資料,僅作爲本人學習筆記,謝絕轉載。

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

    先看一下教科書上的定義:設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:\\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來查看預測結果
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章