深入學習主成分分析(PCA)演算法原理及其Python實現
一:引入問題
首先看一個表格,下表是某些學生的語文,數學,物理,化學成績統計:
首先,假設這些科目成績不相關,也就是說某一科目考多少分與其他科目沒有關係,那麼如何判斷三個學生的優秀程度呢?首先我們一眼就能看出來,數學,物理,化學這三門課的成績構成了這組資料的主成分(很顯然,數學作為第一主成分,因為資料成績拉的最開)。
那麼為什麼我們能一眼看出來呢?
當然是我們的座標軸選對了!!
下面,我們繼續看一個表格,下標是一組學生的數學,物理,化學,語文,歷史,英語成績統計:
那麼這個表我們能一眼看出來嗎?
資料太多了,以至於看起來有些凌亂,無法直接看出這組資料的主成分,因為在座標系下這組資料分佈的很散亂。究其原因,是因為無法撥開遮住肉眼的迷霧,如果把這些資料在相應的空間中表示出來,也許你就能換一個觀察角度找出主成分,如下圖所示:
簡單的二維或者三維我們可以想象出來其分佈狀態,那麼對於更高維的資料,能想象出來其分佈嗎?還有,就算能描述分佈,如何精確地找到這些主成分的軸?如何衡量你提取的主成分到底佔了整個資料的多少資訊?所以,我們就要用到主成分分析的處理方法。
為了說明什麼是資料的主成分,我們首先得了解資料降維,資料降維時怎麼回事?
二,資料降維
假設三維空間中有一系列點,這些點分佈在一個過原點的斜面上,如果你用自然座標x,y,z這三個軸來表示這組資料的話,需要使用三個維度,而事實上,這些點的分佈僅僅是在一個二維的平面上,那麼問題出在哪裡?如果你仔細想想,能不能把x,y,z座標系旋轉一下,使資料所在平面與x,y平面重合?這就對了!如果把旋轉後的座標記為x',y',z',那麼這組資料的表示只用x'和y'兩個維度表示即可!
當然了,如果想恢復原來的表示方式,那就得把這兩個座標之間的變換矩陣存下來。這樣就能把資料維度降下來了!但是,我們要看到這個過程的本質,如果把這些資料按行或者按類排成一個矩陣,那麼這個矩陣的秩就是2!這些資料之間是有相關性的,這些資料構成的過原點的向量的最大線性無關組包含2個向量,這就是為什麼一開始就假設平面過原點的原因!
那麼如果不過原點呢?這就是資料中心化的緣故!將座標原點平移到資料中心,這樣原本不相關的資料在這個新座標系中就有相關性了!有趣的是,三點一定共面,也就是三維空間中任意三點中心化後都是線性相關的,一般來講n維空間中n個點一定能在一個n-1維子空間中分析!
總結一下這個例子,資料降維後並沒有丟棄任何東西,因為這些資料在平面以外的第三個維度的分量都為0。現在,假設這些資料在z'軸有一個很小的抖動,那麼我們仍然用上述的二維表示這些資料,理由是我們可以認為這兩個軸的資訊是資料的主成分,而這些資訊對於我們的分析已經足夠了,z'軸上的抖動很有可能是噪音,也就是說本來這組資料是有相關性的,噪聲的引入,導致了資料不完全相關,但是,這些資料在z'軸上的分佈與原點構成的夾角非常小,也就是說在z'軸上有很大的相關性,綜合考慮,就可以認為資料在x',y'軸上的投影構成了資料的主成分!
所以說,降維肯定意味著資訊的丟失,不過鑑於實際資料本身常常存在的相關性,我們可以想辦法在降維的同時將資訊的損失儘量降低。
下面在說一個極端的情況,也許在現實中不會出現,但是 類似的情況還是很常見的。
假設某學籍資料有兩列M和F,其中M列的取值是如果此學生為男性,則取值為1,為女性則取0;而F列是學生為女性,則取值為0,男性則為1.此時如果我們統計全部學籍資料,會發現對於任何一條記錄來說,當M為1時F必定為0,反之當M為0時F必定為1,在這種情況下,我們將M或者F去掉實際上沒有任何資訊的損失,因為只要保留一列就可以完全還原另一列。
那麼降維我們差不多說清楚了,現在我們將自己面對的資料抽象為一組向量,那麼下面我們有必要研究一些向量的數學性質,而這些數學性質將成為後續推匯出PCA的理論基礎。
三,PCA基本數學原理
3.1 內積與投影
下面先看一個向量運算:內積。
兩個維數相同的向量的內積被定義為:
內積運算將兩個向量對映為一個實數,其計算方式非常容易理解,但是其意義並不明顯,下面我們分析內積的幾何意義。假設A和B是兩個n維向量,我們知道n維向量可以等價表示為n維空間中的一條從原點發射的有向線段,為了簡單期間,我們假設A和B均為二維向量,則
那麼在二維平面上A和B可以用兩條發自原點的有向線段表示,如下圖:
現在我們從A點向B所在直線引入一條垂線,我們知道垂線與B的交點叫做A在B上的投影,再假設A與B的夾角為a,則投影的向量長度為
其中是向量A的模,也就是A線段的標量長度。
注意這裡區分了向量長度和標量長度,標量長度總是大於等於0,值就是線段的長度;而向量長度可能為負,其絕對值是線性長度,而符號取決於其方向與標準方向相同或者相反。
可能大家還沒明白內積和這個東西有什麼關係,不過我們將內積表示為另一種我們熟悉的方式:
現在明白了點吧,A與B的內積等於A到B的投影長度乘以B的模,在進一步,如果我們假設B的模為1,即讓,那麼就變成了下面公式(也就是上面我們說的投影的向量長度):
也就是說,設向量B的模為1,則A與B的內積值等於A向B所在直線投影的向量長度!這就是內積的一種幾何解釋,也就是我們得到的第一個重要結論。
3.2 基
下面我們繼續在二維空間討論向量,上文說過,一個二維向量可以對應二維笛卡爾直角座標系中從原點出發的一條有向線段,例如下面這個向量:
在代數表示方面,我們經常使用線段終點的點的座標表示向量,例如上面的向量可以表示為(3,2),這裡我們再熟悉不過的向量表示。
不過我們常常忽略,只有一個(3,2)本身是不能夠精確表示一個向量的,我們仔細看一下,這裡的座標(3,2)實際上表示的是向量在x軸上的投影值3,在y軸上的投影值為2。也就是說我們使其隱式引入一個定義:以x軸和y軸上正方向長度為1的向量為標準,那麼一個向量(3,2)實際上是說在x軸投影為3而y軸投影為2.注意投影是一個向量,所以可以為負。
更正式的說,向量(x,y)實際上表示線性組合:
不難證明所有二維向量都可以表示為這樣的線性組合,此處(1,0)和(0,1)叫做二維空間的一組基。
所以,要準確描述向量,首先要確定一組基,然後給出基所在的各個直線上的投影值,就可以了,只不過我們經常省略第一步,而預設以(1,0)和(0,1)為基。
我們之所以預設選擇(1,0)和(0,1)為基,當然是比較方便,因為他們分別是x和y軸正方向上的單位向量,因此就使得二維平面上點座標和向量一一對應,非常方便。但實際上任何兩個線性無關的二維向量都可以成為一組基,所謂線性無關在二維平面內可以直觀認為是兩個不再一條直線上的向量。
例如,(1,1)和(1,-1)也可以成為一組基。一般來說,我們希望基的模是1,因為從內積的意義可以看到,如果基的模式1,那麼就可以方便的用向量點乘基而直接獲得其在新基上的座標了!實際上,對應於任何一個向量我們總可以找到其同方向上模為1的向量,只要讓兩個分量分別除以模就好了,例如上面的基就可以變為:。
現在我們想獲得(3,2)在新基上的座標,即在兩個方向上的投影向量值,那麼根據內積的幾何意義,我們只要分別計算(3,2)和兩個基的內積,不難得到新的座標為。
下圖給出了新的基以及(3,2)在新基上座標值的示意圖:
另外這裡要注意的是,我們列舉的例子中基是正交的(即內積為0,或者說相互垂直),但是可以成為一組基的唯一要求就是線性無關,非正交的基也是可以的,不過因為正交基有較好的性質,所以一般使用的基都是正交的。
3.3 基變換的矩陣表示
下面我們找一種簡單的方式來表示基變換,還是拿上面的例子,想一下,將(3,2)變換為新基上的座標,就是用(3,2)與第一個基做內積運算,作為第一個新的座標分量,然後用(3,2)與第二個基做內積運算,作為第二個新座標的分量。實際上,我們可以用矩陣想成的形式簡潔的表示這個變換:
那麼其中矩陣的兩行分別為兩個基,乘以原向量,其結果剛好為新基的座標,可以稍微擴充套件一下,如果我們有m個二維向量,只要將二維向量按照列排成一個兩行m列的矩陣,然後用“基矩陣”乘以這個矩陣,就得到了所有這些向量在新基下的值,例如(1,1),(2,2),(3,3)想變換到剛才那組基上,則可以變為這樣:
於是一組向量的基變換被表示為矩陣的相乘。
一般地,如果我們有M個N維向量,想將其變換為由R個N維向量表示的新空間中,那麼首先將R個基按照行組成矩陣A,,然後將向量按照列組成矩陣B,那麼兩個矩陣的乘積AB就是變換結果,其中AB的第m列為A中的第M列變換後的結果。
數學表示為:
其中Pi是一個行向量,表示第i個基,aj是一個列向量,表示第j個原始資料記錄。
特別要注意的是,這裡R可以小於N,而R決定了變換後資料的維數,也就是說,我們可以將一個N維資料變換到更低維度的空間中去,變換後的維度取決於基的數量,因此這種矩陣相乘的表示也可以表示為降維變換。
最後,上述分析同時給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中每一列列向量變換到左邊矩陣中每一行行向量為基所表示的空間中去。更抽象的說:一個矩陣可以表示為一種線性變換。
3.4 協方差矩陣及優化目標
上面我們討論了選擇不同的基可以對同樣一組資料給出不同的表示,而且如果基的數量少於向量的本身的維數,則可以達到降維的效果,但是我們還沒有回答最關鍵的一個問題:如何選擇基才是最優的,或者說,如果我們有一組N維向量,現在要將其降到K維(K小於N),那麼我們應該如何選擇K個基才能最大程度保留原有的資訊?
要完全數學化這個問題非常繁雜,這裡我們用一個非形式化的直觀方法來看這個問題。
為了避免過於抽象的討論,我們仍然以一個具體的例子展開,假設我們的資料由五條記錄組成,將它們表示為矩陣形式:
其中每一列為一條資料記錄,而一行為一個欄位,為了後續處理方便,我們首先將每個欄位內所有值都減去欄位均值,其結果是將每個欄位都變為均值為0(這樣做的好處後面可以看到)。
我們看上面的資料,第一個欄位的均值為2,第二個欄位的均值為3,所以變換後:
我們可以看到五條資料在平面直角座標系內的樣子:
現在問題來了:如果我們必須使用一維來表示這些資料,又希望儘量保留原始的資訊,你要如何選擇?
通過上一節對及變換的討論我們知道,這個問題實際上是要在二維平面中選擇一個方向,將所有資料都投影到這個方向所在的直線上,用投影值表示原始記錄,這是一個實際的二維降到一維的問題。
那麼如何選擇這個方向(或者說是基)才能儘量保留最多的原始資訊呢?一種直觀的看法是:希望投影后的投影值儘可能分散。
以上圖為例,可以看出如果向x軸投影,那麼最左邊的兩個點會重疊在一起,中間的兩個點也會重疊在一起,於是本身四個各不相同的二維點投影后只剩下兩個不同的值了,這是一種嚴重的資訊丟失,同理,如果向y軸投影最上面的兩個點和分佈在x軸上的兩個點也會重疊,所以看來x和y軸都不是最好的投影選擇。我們直觀目測,如果向通過第一象限和第三象限的斜線投影,則五個點在投影后還是可以區分的。
下面我們用數學方法表述這個問題。
3.5 方差
上文說道,我們希望投影后投影值儘可能分散,而這種分散程度,可以用數學上的方差來表述,此處,一個欄位的方差可以看做事每個元素與欄位均值的差的平方和的均值,即:
由於上面我們已經將每個欄位的均值都化0 了,因此方差可以直接用每個元素的平方和除以元素個數表示:
於是上面的問題被形式化表示為:尋找一個一維基,使得所有資料變換為這個基上的座標表示後,方差值最大。
3.6 協方差
對於上面二維降成一維的問題來說,找到那個使得方差最大的方向就可以了,不過對於更高維,還有一個問題需要解決,考慮三維降到二維問題,與之前相同,首先我們希望找到一個方向使得投影后方差最大,這樣就完成了第一個方向的選擇,繼而我們選擇第二個投影方向。
如果我們還是單純的只選擇方差最大的方向,很顯然,這個方向與第一個方向應該是“幾乎重合在一起”,顯然這樣的維度是沒有用的,因此應該有其他約束條件。從直觀上講,讓兩個欄位儘可能表示更多的原始資訊,我們是不希望他們之間存線上性相關性,因為相關性意味著兩個欄位不是完全獨立,必然存在重複表示的資訊。
數字上可以用兩個欄位的協方差表示其相關性,由於已經讓每個欄位均值為0,則:
可以看出,在欄位均值為0的情況下,兩個欄位的協方差簡潔的表示為其內積除以元素數m。
當協方差為0時,表示兩個欄位完全獨立,為了讓協方差為0,我們選擇第二個即時只能在與第一個基正交的方向上選擇。因此最終選擇的兩個方向一定是正交的。
至此,我們得到了降維問題的優化目標:將一組N維向量降維k維(K大於0,小於N),其目標是選擇K個單位(模為1)正交基,使得原始資料變換到這組基上後,各欄位兩兩間協方差為0,而欄位的方差則儘可能大(在正交的約束下,取最大的k個方差)。
然後我們用X乘以X的轉置,並乘上係數1/m:
這時候我們會發現,這個矩陣對角線上的兩個元素分別是兩個欄位的方差,而其他元素是a和b的協方差,兩者被統一到了一個矩陣的。
根據矩陣相乘的運演算法則,這個結論很容易被推廣到一般情況:
設我們有m個n維資料記錄,將其按列排成n乘m的矩陣X,設,則C是一個對稱矩陣,其對角線分別是各個欄位的方差,而第l行j列和j行i列元素相同,表示i和j兩個欄位的協方差。
3.7 協方差矩陣
上面我們匯出了優化目標,但是這個目標似乎不能直接作為操作指南(或者說演算法),因為它只說要什麼,但是根本沒有說怎麼做,所以我們要在數學上繼續研究計算方案。
我們看到,最終要達到的目標與欄位內方差及欄位間協方差有密切關係。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示為內積的形式,而內積又與矩陣相乘密切相關。於是,我們來了靈感:
假設我們只有a和b 兩個欄位,那麼我們將他們按行組成矩陣X:
3.8 協方差矩陣對角化
根據上述推導,我們發現要達到優化目前等價於將協方差矩陣對角化:即除對角線外的其他元素化為0,並且在對角線上將元素按照大小從上到下排列,這樣我們就達到了優化目的,這樣說可能還不清晰,我們進一步看下原矩陣與基變換後矩陣協方差矩陣的關係:
設原始資料矩陣X對於的協方差矩陣為C,而P是一組基按行組成的矩陣,設Y=PX,則Y為X對P做基變換後的資料,設Y的協方差矩陣為D,我們推導一下D與C的關係:
現在事情很明白,我們要找的P不是別的,而是能讓原始協方差矩陣對角化的P,換句話說,優化目標變成了尋找一個矩陣P,滿足PCPT是一個對角矩陣,並且對角元素按照從大到小依次排列,那麼P的前K行就是要尋找的基,用P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維並滿足上述優化條件。
至此,我們離“發明”PCA還有一步之遙!
現在所有的焦點都聚集在了協方差矩陣對角化問題上,有時,我們真應該感謝數學家的先行,因為矩陣對角化線上性代數領域已經屬於被玩爛的東西,所以這在數學上根本不是問題。
由上文知道,協方差矩陣C是一個對稱矩陣,線上性代數上,實對稱矩陣有一系列非常好的性質:
1)實對稱矩陣不同特徵值對應的特徵向量必然正交。
2)設特徵向量重數為r,則必然存在r個線性無關的特徵向量對應於,因此可以將這r個特徵向量單位正交化。
有上面兩條可知,一個n行n列的實對稱矩陣一定可以找到n個單位正交特徵向量,設這n個特徵向量為,我們將其按照列組成矩陣:
則對協方差矩陣C有如下結論:
其中為對稱矩陣,其對角元素為各特徵向量對應的特徵值(可能有重複)。
到這裡,我們發現我們已經找到了需要的矩陣P:
P是協方差矩陣的特徵向量單位化後按照行排列出的矩陣,其中每一行都是C的一個特徵向量,如果設P按照中特徵值從大到小,將特徵向量從上到下排列,則用P的前K行組成的矩陣乘以原始資料矩陣X,就可以得到我們需要的降維後的資料矩陣Y。
至此,我們完成了整個PCA的數學原理討論。
3.9 對上面例子整合
1,原始資料集矩陣X:
2,求均值後:
3,再求協方差矩陣:
4,特徵值:
5,對應的特徵向量:
6,標準化:
7,選擇較大特徵值對應的特徵向量:
8,執行PCA變換:Y=PX 得到的Y就是PCA降維後的值 資料集矩陣:
四,主成分分析(PCA)演算法步驟
介紹一個PCA的教程:A tutorial on Principal Components Analysis ——Lindsay I Smith
PCA(Principal Components Analysis)即主成分分析,是一種常用的資料分析手段,是影象處理中經常用到的降維方法。對於一組不同維度之間可能存線上性相關關係的資料,PCA能夠把這組資料通過正交變換變成各個維度之間線性無關的資料,經過PCA處理的資料中的各個樣本之間的關係往往更直觀,所以它是一種非常常用的資料分析和預處理工具。PCA處理之後的資料各個維度之間是線性無關的,通過剔除方差較小的那些維度上的資料,我們可以達到資料降維的目的。
PCA從原始變量出發,通過旋轉變化(即原始變數的線性組合)構建出一組新的,互不相關的新變數,這些變數儘可能多的解釋原始資料之間的差異性(即資料內在的結構),他們就成為原始資料的主成分。由於這些變數不相關,因此他們無重疊的各自解釋一部分差異性。依照每個變數解釋時差異性大小排序,他們成為第一主成分,第二主成分,以此類推。
主成分分析(PCA)是一種基於變數協方差矩陣對資料進行壓縮降維,去噪的有效方法,PCA的思想是將n維特徵對映到k維上(k<n),這k維特徵稱為主元(主成分),是舊特徵的線性組合,這些線性組合最大化樣本方差,儘量使用新的k個特徵互不相關。這k維是全新的正交特徵,是重新構造出來的k維特徵,而不是簡單地從n維特徵中取出其餘n-k維特徵。
說了這麼多,下面說一下PCA降維的演算法步驟。
設有m條n維資料:
1) 將原始資料按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性欄位)進行零均值化(去平均值),即減去這一行的均值
3)求出協方差矩陣
4)求出協方差矩陣的特徵值及對應的特徵向量
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P(保留最大的k各特徵向量)
6)Y=PX 即為降維到K維後的資料
五,例項PCA計算過程
現在假設有一組資料如下:
行代表了樣例,列代表了特徵,這裡有10個樣例,每個樣例兩個特徵,可以這樣認為,有10篇文件,x是10篇文件中“learn”出現的TF-IDF,y是10篇文件中“study”出現的IF_IDF。
第一步,分別求x和y的平均值,然後對所有的樣例,都減去對應的均值。這裡x的均值為1.81,y的均值為1.91,那麼第一個一個樣例減去均值後為(0.69,0.49),以此類推得到:
程式碼:
x = [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] y = [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9] import numpy as np mean_x = np.mean(x) mean_y = np.mean(y) result_x = [round(x[i]-mean_x ,2) for i in range(len(x))] result_y = [round(y[i]-mean_y ,2) for i in range(len(y))] print(result_x) print(result_y)
第二步,計算特徵協方差矩陣,如果資料是三維的,那麼協方差矩陣為:
這裡是2維的,只有x和y,求解得:
對角線上分別是x和y的方差,非對角線上是協方差。協方差是衡量兩個變數同時變化的變化程度。協方差大於0表示x和y若一個增加,另一個也增加;協方差小於0寶石一個增加,則另一個減少。如果x和y是統計獨立的,那麼二者之間的協方差就是0;但是協方差是0 ,並不能說明x和y是獨立的。協方差絕對值越大,兩者對彼此的影響越大,反之越小。協方差是沒有單位的量,因此,如果同樣的兩個變數所採用的量綱發生變化,他們的協方差也會產生數值上的變化。
程式碼:
x = [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] y = [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9] import numpy as np mean_x = np.mean(x) mean_y = np.mean(y) result_x = [round(x[i]-mean_x ,2) for i in range(len(x))] result_y = [round(y[i]-mean_y ,2) for i in range(len(y))] print(result_x) print(result_y) z = np.vstack((result_x,result_y)) cov = np.cov(z) print(cov)
第三步,計算協方差矩陣的特徵向量和特徵值,選取特徵向量
上面兩個特徵值,下面是對應的特徵向量,特徵值0.490833989對應的特徵向量是(-0.735178656, 0.677873399),這裡的特徵向量是正交的、歸一化的,即長度為1。
x = [2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1] y = [2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9] import numpy as np mean_x = np.mean(x) mean_y = np.mean(y) result_x = [round(x[i]-mean_x ,2) for i in range(len(x))] result_y = [round(y[i]-mean_y ,2) for i in range(len(y))] print(result_x) print(result_y) z = np.vstack((result_x,result_y)) cov = np.cov(z) print(cov) # 特徵值 特徵向量 feature_result,feature_vector = np.linalg.eig(cov) print(feature_result) print(feature_vector)
第四步,將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k各特徵向量分別作為列向量組成特徵向量矩陣。
如果資料中有n維,計算出n個特徵向量和特徵值,選擇前k個特徵向量,然後最終的資料集合只有k維,取的特徵向量命名為FeatureVector。
這裡的特徵值只有兩個,我們選擇其中最大的那個,這裡是1.28402771,對應的特徵向量是(-0.677873399, -0.735178656)T。
第五步,將樣本點投影到選取的特徵向量上,得到新的資料集
假設樣例數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的資料FinalData為
這裡是FinalData(10*1) = DataAdjust(10*2矩陣)×特徵向量
得到結果為
這樣,就將原始樣例的n維特徵變成了k維,這k維就是原始特徵在k維上的投影。
上面的資料可以認為是learn和study特徵融合為一個新的特徵叫LS特徵,該特徵基本上代表了這兩個特徵,該過程如下圖所示:
正號表示預處理後的樣本點,斜著的兩條線就分別是正交的特徵向量(由於協方差矩陣是對稱的,因此其特徵向量正交),最後一句矩陣乘法就是將原始樣本點分別往特徵向量對應的軸上做投影,下圖是FinalData根據最大特徵值對應的特徵向量轉化回去後的資料集形式,可看出是將DataAdjust樣本點分別往特徵向量對應的軸上做投影:
如果取的k=2,那麼結果是
可見,若使用了所有特徵向量得到的新的資料集,轉化回去之後,與原來的資料集完全一樣(只是座標軸旋轉)。
六,python實現主成分(PCA)降維
from numpy import * def loadDataSet(fileName, delim='\t'): fr = open(fileName) stringArr = [line.strip().split(delim) for line in fr.readlines()] datArr = [map(float,line) for line in stringArr] return mat(datArr) def pca(dataMat, topNfeat=999999): meanVals = mean(dataMat, axis=0) DataAdjust = dataMat - meanVals #減去平均值 covMat = cov(DataAdjust, rowvar=0) eigVals,eigVects = linalg.eig(mat(covMat)) #計算特徵值和特徵向量 #print eigVals eigValInd = argsort(eigVals) eigValInd = eigValInd[:-(topNfeat+1):-1] #保留最大的前K個特徵值 redEigVects = eigVects[:,eigValInd] #對應的特徵向量 lowDDataMat = DataAdjust * redEigVects #將資料轉換到低維新空間 reconMat = (lowDDataMat * redEigVects.T) + meanVals #重構資料,用於除錯 return lowDDataMat, reconMat
測試資料testSet.txt由1000個數據點組成。下面對資料進行降維,並用matplotlib模組將降維後的資料和原始資料一起繪製出來。
(連結:https://pan.baidu.com/s/19k4ND3ISUjhfWZhj4Fhcbw 提取碼:r3n7 )
資料:(此資料直接複製可能無法使用,會報錯, could not convert string to float,建議最好下載)
10.235186 11.321997 10.122339 11.810993 9.190236 8.904943 9.306371 9.847394 8.330131 8.340352 10.152785 10.123532 10.408540 10.821986 9.003615 10.039206 9.534872 10.096991 9.498181 10.825446 9.875271 9.233426 10.362276 9.376892 10.191204 11.250851 7.720499 6.476300 9.334379 8.471268 7.963186 6.731333 8.244973 9.013785 9.569196 10.568949 8.854793 9.076536 9.382171 7.240862 8.179055 8.944502 8.267896 8.797017 9.047165 8.725068 8.741043 7.901385 7.190216 7.804587 8.081227 9.314431 8.047460 5.720780 7.917584 7.543254 8.676942 10.102220 9.210251 9.424717 7.732998 9.840202 7.681754 8.609897 7.925863 10.079159 8.261509 8.242080 8.514872 7.527561 10.324450 10.804481 7.856710 7.931543 7.858608 7.995340 9.196808 6.577598 9.644415 10.935081 9.579833 9.085021 7.888484 5.976428 9.072624 9.703344 8.914184 9.298515 7.822869 7.086663 10.538554 11.061464 8.280187 8.709012 8.884223 8.670105 9.359927 10.575055 9.078611 9.710833 7.935134 8.586173 8.805945 10.575145 9.584316 9.614076 11.269714 11.717254 9.120444 9.019774 7.977520 8.313923 8.104648 9.456128 8.617126 7.331723 9.033811 9.469706 8.327680 5.122092 8.532272 10.100909 9.295434 8.933824 9.905202 9.027559 10.585764 10.912733 10.427584 11.532578 9.072767 9.960144 9.164275 8.645121 9.746058 10.717080 9.286072 9.340024 8.188233 7.432415 7.948598 8.445419 7.563350 5.656178 8.972405 8.801869 9.980868 8.788996 7.753490 7.714248 7.431143 9.032819 8.943403 8.359354 10.481890 9.988969 9.150454 10.278760 8.123894 9.060351 8.626164 8.469342 7.354185 7.631252 11.323046 11.015032 8.190008 6.860792 8.412598 7.661358 9.258404 8.580382 11.007915 11.443881 8.279403 8.347003 8.931149 10.105221 10.239245 10.077473 8.129346 7.096877 8.485823 9.373561 10.703640 11.651618 9.500728 8.150228 9.712414 9.910445 9.333374 9.407557 8.787865 10.168021 9.238180 10.253478 9.577388 8.895150 10.447753 10.318227 9.303944 9.223136 9.883268 11.662945 9.471921 10.443792 10.007753 9.579912 8.110298 7.106263 6.964069 6.585040 10.413499 9.649309 8.032629 7.053254 8.015549 9.166753 10.462924 8.656612 9.530788 10.134130 9.202658 9.314222 10.103241 10.235159 7.849264 6.624856 9.059071 7.992555 10.172889 10.724789 9.528439 6.420990 7.190422 6.789792 9.085716 9.846328 9.452887 8.735386 7.417322 7.348594 8.468639 8.715086 8.303642 9.463231 9.939052 10.026771 8.701989 7.516978 9.737541 10.587281 8.280233 7.852444 10.648386 10.259203 9.173893 10.520372 9.135397 10.751406 7.594580 8.488833 8.587520 8.463406 8.581887 7.888644 9.448768 8.707422 7.882664 7.772030 10.050635 9.859720 9.012078 9.533899 8.770020 8.882996 9.428804 9.446306 8.504209 8.319693 9.800003 10.964667 8.069660 7.683099 10.012217 10.320644 8.704677 8.918146 8.198722 7.297786 9.868322 9.901657 9.426997 11.480353 9.228767 9.262976 8.952359 9.528471 8.186847 8.600587 9.026371 8.705143 9.483364 9.807079 7.826587 7.975401 11.197846 10.959298 7.632421 8.769745 8.761605 8.309365 9.353670 8.728758 6.466637 6.038996 8.370634 9.178830 10.337451 11.075600 8.917679 8.288367 9.076621 8.487626 7.278948 4.634097 10.153017 11.219183 7.132603 5.853118 9.338644 9.805940 9.878602 9.187000 10.009505 10.924505 9.384438 10.691860 7.535322 8.160481 6.808732 8.268469 8.302965 8.075009 8.345379 8.305356 9.517530 8.249839 9.267825 9.999109 10.291511 11.032664 8.605909 8.705207 8.331145 7.812295 8.632412 10.574287 8.766397 8.712107 9.407070 9.732756 9.709495 9.729569 10.422201 11.070360 6.831495 6.466763 8.187122 8.405929 8.523093 9.041844 7.952394 6.801220 10.490780 10.001468 10.813791 9.802494 7.861113 7.541475 8.800399 8.738974 7.542152 6.612838 9.446981 9.378659 8.281684 7.358572 8.473801 8.208343 11.736767 11.022029 8.379578 8.714348 8.313718 8.832381 9.342589 10.416659 7.560710 6.889648 9.295344 9.739040 9.176612 9.718781 8.614385 10.150521 9.079373 8.839794 10.333289 10.921255 9.453502 7.335134 10.174590 10.292500 9.693713 9.793636 7.474925 7.751391 10.107905 10.156997 9.257241 7.854266 10.209794 11.410157 7.248050 6.433676 10.150091 9.288597 10.077713 10.321500 8.191122 8.931519 8.791469 10.287216 9.229434 9.095193 8.682571 8.546005 7.524099 7.709751 8.442410 8.326037 9.364851 9.095989 9.061222 7.557899 7.989999 8.555363 8.801275 8.868732 10.351932 9.497796 10.230710 10.496151 9.783163 9.891408 10.651481 9.431617 8.387393 6.400507 9.003921 7.050003 8.483723 8.314886 9.020501 7.545771 9.329105 11.095661 9.583687 9.271929 8.908705 8.407529 8.835406 8.083517 9.736362 8.296735 10.030302 9.737178 8.287142 6.993460 9.173211 9.306335 9.026355 9.696531 9.128391 9.921247 11.486346 12.910777 11.519458 11.472111 9.027707 10.263974 9.351935 8.542200 9.421701 11.403201 9.005687 8.100969 7.015279 6.614278 8.213607 8.340948 8.226646 8.718997 8.144753 8.366877 10.133642 12.790169 10.763481 10.847016 10.003622 10.337716 9.007955 9.792482 8.670506 10.782931 10.386414 9.956162 10.104761 10.123044 8.079502 8.304075 9.945424 11.855409 8.642497 9.998066 9.349722 8.690328 9.034991 8.826490 8.738746 7.518464 8.919532 9.740312 9.464136 10.444588 10.710057 12.666857 10.042007 10.532091 8.447996 7.426363 9.509351 9.030516 11.946359 10.553075 9.981617 9.912651 9.853876 9.632967 10.560648 11.881714 8.370952 9.989491 8.323209 10.102529 9.828359 11.702462 8.515623 8.426754 9.004363 9.628036 10.529847 10.458031 10.028765 10.624880 9.448114 9.313227 8.332617 7.382295 8.323006 8.276608 7.740771 8.799750 8.379615 8.146192 8.340764 9.184458 9.863614 8.254694 9.969563 9.405134 9.164394 9.182127 10.622098 9.722592 9.592072 10.029446 8.212027 7.477366 9.080225 8.244448 8.555774 7.842325 9.958046 9.696221 8.972573 9.797128 9.213223 7.128437 8.737239 9.385138 10.333907 10.994856 8.797511 8.643075 11.044848 9.623160 8.539260 9.097113 11.582163 11.884333 7.863848 7.176199 6.218103 5.283562 9.120602 7.250190 9.001166 9.635203 8.081476 8.844224 9.369802 8.230911 8.768925 8.666987 9.841098 8.543896 10.451522 9.549511 9.755402 9.117522 7.988961 6.869854 8.872507 9.787118 10.363980 10.716608 6.315671 5.765953 9.638879 9.202355 8.588126 8.037966 8.947408 9.144386 9.051130 7.195132 9.321709 8.380668 10.146531 9.754745 9.843373 8.891437 9.213148 11.700632 7.630078 7.294753 8.093088 7.967590 7.488915 6.090652 8.126036 8.586472 8.760350 7.268987 10.201347 9.141013 7.838208 7.307700 6.155653 5.563997 7.767841 6.254528 8.425656 8.615832 10.362168 10.886815 10.180024 10.378934 9.794665 10.047812 9.970394 9.668279 7.030217 7.060471 9.275414 9.095738 10.314911 10.456539 9.259774 8.204851 10.023919 9.558307 8.887540 9.866704 9.851608 9.410989 8.710882 7.268012 9.017007 10.217673 7.976369 9.000979 8.738332 8.664734 8.344510 8.977600 8.959613 12.324240 9.169982 8.624635 7.487451 8.154859 8.706316 7.719455 9.564832 8.940403 8.327775 9.044509 9.734032 10.195255 8.021343 6.445092 9.081048 11.024397 7.626651 6.549263 10.725858 8.575374 8.731381 8.307788 10.394237 10.596874 7.029311 7.658832 9.517907 7.509904 10.394064 10.060898 10.752500 9.431601 9.692431 10.332130 9.651897 7.876862 8.592329 10.096837 10.212801 10.827496 9.045043 9.265524 8.901643 8.036115 10.794525 9.318830 11.040915 12.021746 8.390836 9.672469 9.840166 11.226568 10.806810 12.205633 8.924285 10.934056 8.411251 8.289672 7.808891 9.663290 9.733437 8.486958 8.300026 7.477374 8.221756 10.278308 9.096867 9.619677 9.410116 9.289188 10.097176 9.768470 9.387954 8.844855 9.376134 7.704630 8.231599 9.101203 9.910738 10.694855 8.645689 7.764589 8.090245 7.109596 9.253483 9.813672 9.331546 8.039386 9.843256 10.208792 9.713131 9.247665 9.259369 10.704622 10.243948 9.695883 6.396262 6.456390 8.936289 8.703871 8.750846 9.347273 6.497155 4.130251 9.516552 10.164848 9.125766 8.858775 8.374387 7.300114 8.132816 7.621107 10.099505 9.159134 9.356477 6.869999 8.112934 7.587547 7.265396 6.987031 11.950505 13.715109 10.745959 10.822171 8.893270 7.887332 6.003473 4.960219 7.498851 6.451334 10.162072 9.935954 8.732617 9.177679 9.300827 9.952360 11.908436 12.256801 9.371215 9.188645 9.943640 9.245037 7.386450 7.046819 8.410374 8.293218 7.830419 6.440253 8.263140 8.279446 11.448164 12.192363 8.216533 9.186628 9.316128 10.046697 8.156927 6.834792 9.951421 11.240598 9.059607 8.458446 10.476339 10.560461 7.548200 7.227127 9.432204 7.236705 9.402750 9.126413 11.188095 13.853426 9.520201 11.028131 8.884154 9.764071 8.961105 8.833117 8.549663 8.865765 10.111708 10.515462 9.024761 9.169368 7.904149 8.048756 9.240995 7.796142 8.126538 6.116125 7.442148 7.931335 9.486821 10.091359 9.834289 11.694720 9.009714 11.599170 9.761314 11.344083 6.993941 6.562988 8.659524 8.410107 7.685363 8.097297 7.793217 6.519109 8.883454 9.257347 8.781821 9.231980 7.946281 7.658978 8.523959 10.646480 9.031525 8.649648 8.317140 7.758978 9.192417 11.151218 8.408486 8.282182 10.327702 11.459048 8.389687 8.548727 8.642250 7.056870 8.833447 9.267638 8.805261 8.320281 9.726211 9.095997 8.477631 9.507530 9.738838 9.652110 8.272108 7.582696 9.258089 8.495931 8.334144 8.810766 8.150904 6.486032 7.259669 7.270156 11.034180 11.519954 10.705432 10.642527 8.388814 7.159137 8.559369 7.846284 7.187988 6.519313 8.811453 7.765900 8.492762 7.992941 8.739752 8.502909 10.150752 10.420295 7.062378 5.365289 8.448195 7.480000 10.224333 11.592750 9.533795 9.212845 9.519492 7.690501 9.661847 10.376189 7.963877 8.597193 10.184486 9.136709 8.505234 9.159210 8.187646 8.518690 9.167590 9.405917 8.612162 8.518755 10.970868 10.392229 9.603649 9.141095 9.704263 8.830178 9.657506 8.132449 9.337882 11.045306 9.521722 9.537764 8.954197 8.728179 8.635658 10.352662 8.910816 9.020317 9.900933 9.392002 10.247105 8.289649 9.571690 8.171237 7.388627 7.668071 8.354008 10.074590 9.775598 8.835696 8.768913 7.983604 8.330199 8.474098 8.169356 9.361172 10.346522 10.086434 7.976144 9.266702 8.429648 7.865824 11.261674 11.788587 10.051066 10.112425 8.954626 9.789343 8.382220 8.121012 9.820642 9.426441 8.125950 9.695087 8.646465 7.291808 8.190202 8.003737 8.773887 7.306175 8.731000 10.300436 9.163098 7.816769 9.456346 9.223922 9.645180 9.324053 8.835060 8.966915 9.325950 10.943248 9.941912 9.548535 9.282799 10.119488 9.567591 9.462164 8.529019 9.768001 9.314824 10.153727 8.264439 8.273860 8.307262 8.214036 9.122041 8.657861 8.404258 8.389365 7.828355 8.419433 9.803180 10.108286 8.662439 8.581953 8.883265 8.978377 8.012330 8.262451 9.420258 8.974878 7.015415 6.365940 9.888832 11.163036 9.677549 10.346431 8.410158 7.912899 9.464147 10.762900 7.067227 7.035717 9.320923 10.583089 9.056917 8.771241 8.110004 8.387789 10.310021 10.970014 8.211185 8.809627 8.942883 8.840746 9.479958 8.328700 8.973982 8.702291 8.519257 8.764855 9.424556 8.956911 7.222919 8.177787 8.257007 9.700619 9.778795 9.296134 8.028806 8.575974 9.886464 9.965076 9.090552 6.978930 9.605548 10.256751 9.959004 9.610229 8.308701 9.509124 7.748293 9.685933 8.311108 9.428114 9.697068 10.217956 9.582991 9.478773 9.167265 10.198412 10.329753 10.406602 8.908819 7.428789 10.072908 10.393294 7.992905 9.226629 8.907696 7.269366 8.421948 9.342968 7.481399 7.225033 10.358408 10.166130 8.786556 10.279943 9.658701 11.379367 10.167807 9.417552 8.653449 8.656681 8.020304 8.671270 8.364348 10.004068 9.119183 9.788199 8.405504 9.740580 11.020930 11.904350 9.755232 9.515713 10.059542 9.589748 8.727131 9.777998 7.666182 6.028642 8.870733 8.367501 9.340446 7.707269 9.919283 10.796813 7.905837 8.326034 10.181187 10.089865 8.797328 8.981988 8.466272 7.765032 10.335914 12.620539 9.365003 8.609115 8.011017 7.249489 10.923993 13.901513 7.074631 7.558720 9.824598 8.851297 8.861026 8.370857 10.127296 10.861535 10.548377 10.855695 8.880470 7.948761 8.901619 9.674705 7.813710 9.246912 10.128808 10.560668 11.096699 10.911644 8.551471 6.871514 8.907241 8.677815 10.571647 10.294838 8.815314 8.810725 8.453396 8.339296 9.594819 11.487580 10.714211 9.628908 7.428788 7.712869 10.892119 12.747752 9.024071 11.112692 7.803375 7.847038 8.521558 8.881848 9.742818 11.520203 9.832836 9.180396 8.703132 10.028498 9.905029 11.347606 10.037536 8.882688 8.629995 8.392863 9.583497 9.219663 8.781687 9.650598 9.344119 9.537024 10.407510 9.223929 7.244488 6.559021 10.643616 10.288383 8.757557 6.947901 10.784590 11.233350 10.028427 11.330033 7.968361 6.830308 8.925954 8.539113 7.738692 7.114987 8.192398 8.352016 10.412017 12.431122 8.208801 5.777678 7.820077 7.790720 9.542754 11.542541 6.817938 7.429229 7.365218 7.956797 9.274391 7.932700 9.546475 8.803412 7.471734 6.797870 8.016969 7.848070 8.852701 8.458114 8.215012 8.468330 6.975507 6.846980 9.435134 10.609700 9.228075 9.342622 8.388410 7.637856 7.111456 9.289163 9.403508 8.482654 9.133894 8.343575 10.670801 9.750821 9.983542 10.074537 10.012865 8.537017 8.929895 8.951909 7.666951 7.473615 9.493839 7.821783 8.894081 7.059413 9.593382 9.859732 9.126847 8.395700 9.532945 9.850696 9.459384 9.384213 8.982743 8.217062 10.107798 8.790772 10.563574 9.044890 8.278963 9.518790 8.734960 10.494129 9.597940 9.530895 10.025478 9.508270 10.335922 10.974063 8.404390 8.146748 7.108699 6.038469 8.873951 7.474227 8.731459 8.154455 8.795146 7.534687 6.407165 6.810352 9.979312 10.287430 8.786715 8.396736 10.753339 10.360567 10.508031 10.321976 10.636925 10.193797 10.614322 11.215420 8.916411 8.965286 8.112756 8.304769 10.833109 10.497542 8.319758 9.727691 9.945336 11.820097 10.150461 9.914715 10.185024 10.388722 9.793569 9.079955 10.590128 11.811596 8.505584 6.884282 10.461428 10.745439 8.755781 9.418427 7.488249 7.172072 10.238905 10.428659 9.887827 10.427821 8.529971 8.838217 8.375208 10.242837 8.901724 8.398304 8.607694 9.173198 8.691369 9.964261 9.584578 9.641546 10.265792 11.405078 7.592968 6.683355 8.692791 9.389031 7.589852 6.005793 10.550386 11.736584 8.578351 7.227055 7.526931 6.875134 8.577081 9.877115 9.272136 11.050928 10.300809 10.653059 8.642013 9.006681 9.720491 10.265202 9.029005 9.646928 8.736201 7.975603 8.672886 9.070759 8.370633 8.412170 9.483776 9.183341 6.790842 7.594992 9.842146 10.156810 9.563336 7.962532 8.724669 9.870732 9.012145 9.171326 9.116948 9.791167 6.219094 7.988420 9.468422 8.359975 8.825231 8.475208 9.572224 9.696428 9.609128 8.488175 9.428590 10.468998 8.293266 8.617701 9.423584 10.355688 9.240796 9.517228 10.915423 13.026252 10.854684 11.130866 9.226816 9.391796 9.580264 10.359235 7.289907 6.898208 9.338857 10.374025 9.523176 11.332190 10.162233 10.357396 8.873930 9.207398 8.607259 7.794804 8.852325 8.215797 8.077272 6.501042 8.169273 8.269613 6.806421 7.544423 8.793151 9.691549 11.640981 11.365702 9.544082 11.576545 9.009266 9.605596 9.726552 9.426719 9.495888 10.626624 8.683982 9.337864 8.322105 8.631099 8.887895 8.644931 8.662659 11.373025 9.263321 7.536016 7.802624 7.171625 8.773183 8.561565 8.730443 10.197596 8.942915 7.758383 8.057618 8.774996 8.112081 8.202349 10.378884 12.103755 9.248876 8.637249 9.739599 9.708576 8.126345 8.278487 8.894788 7.966117 9.683165 9.019221 10.886957 12.053843 9.668852 10.902132 7.486692 6.471138 8.794850 9.173609 8.835915 8.296727 9.443984 11.375344 8.696621 6.434580 9.645560 9.233722 9.623857 7.915590 10.840632 12.620268 7.298135 7.356141 9.639644 8.902389 9.849802 7.682624 10.609964 10.259615 9.768229 11.382811 7.646351 7.571849 10.230300 9.470859 8.224402 8.496866 6.879671 8.393648 7.976247 8.667221 9.183268 8.694550 11.471853 12.786280 10.428349 10.615726 8.090828 5.902504 9.738627 8.485792 8.139709 8.396333 9.508055 8.990529 8.857260 8.497732 8.902558 7.014433 9.660607 11.040833 8.772221 10.512150 11.020038 9.354134 7.918527 7.742062 7.630835 7.756260 11.043272 11.041613 9.299376 8.674157 9.795087 8.431837 9.415683 8.312101 7.942037 6.942913 9.724790 11.766496 10.222032 11.550876 8.894163 8.306020 8.394309 8.070420 9.012776 6.880548 9.661093 10.138921 9.896472 9.762372 9.135628 8.759928 8.762656 10.306028 8.602473 8.861956 10.085297 10.464774 10.644983 10.945767 9.034571 8.391668 8.602920 8.501944 8.224766 7.402758 8.755050 9.431085 9.669937 8.641049 10.693530 10.287124 9.462806 7.611153 9.287707 10.082363 10.941260 10.783728 9.263080 7.913328 10.167111 10.225338 8.783830 9.465345 8.958624 8.662136 9.841649 9.926781 7.205691 6.790638 8.629089 9.135461 7.469440 8.450442 8.179133 7.790434 8.083984 7.875520 9.271300 8.135359 8.652349 8.254397 7.983920 6.609684 7.836860 9.785238 7.418535 7.011256 8.458288 10.095364 9.387605 9.726911 8.663951 8.206705 10.146507 11.698577 8.937103 10.990924 11.218687 11.141945 8.363142 9.106936 7.877643 7.122922 9.620978 9.905689 9.509649 10.773209 6.748743 6.705385 9.300919 8.085029 9.332257 9.818791 7.898610 8.366643 9.841914 9.480675 6.920484 8.959501 8.544713 9.563136 8.162266 6.715277 8.659552 9.282008 10.673398 13.174824 9.024000 10.379238 8.183292 6.647572 10.544919 10.649602 7.201266 6.529605 9.557407 11.096821 8.304605 6.940929 9.742855 9.920897 10.024587 9.645222 10.002296 9.998940 8.965876 8.665419 7.823136 6.949572 8.125088 7.654065 6.569589 6.046863 10.195497 8.689129 11.730011 10.374221 8.739105 7.457571 9.820059 10.278526 9.547456 10.398198 8.375072 8.416302 8.889533 8.308929 8.861201 9.290408 12.677687 12.788463 9.100735 8.620537 7.728350 6.328219 7.955373 8.355028 8.733352 8.645414 10.257527 11.191813 9.246413 9.497014 9.745302 9.642035 7.785652 8.147621 7.431673 8.566399 8.654384 8.466701 8.475392 6.744677 9.968440 10.765192 10.163616 10.806963 10.238135 10.036636 9.902889 10.746730 9.523850 8.749708 9.214363 9.149178 9.266040 10.841502 8.494292 7.770942 10.821158 10.410192 8.645888 7.970308 9.885204 10.098080 9.084990 10.886349 9.277874 8.871449 8.135131 7.137064 7.917379 9.080522 9.685586 8.822850 8.558141 7.848112 9.502917 10.061255 6.409004 5.164774 10.149235 10.579951 7.847304 8.411351 8.846930 6.819939 8.675153 9.411147 9.476276 9.061508 11.099184 10.644263 8.792411 10.379405 8.400418 7.072706 8.555713 7.923805 8.024763 8.426993 8.642696 10.453412 7.906117 7.920408 8.793393 9.722878 8.280364 7.669854 9.387766 9.706245 9.626853 10.762499 10.163631 10.919007 9.375543 11.513524 9.309440 8.575699 10.055329 10.297255 8.706241 9.097172 10.032934 11.951897 10.812974 11.311435 10.352603 10.819865 8.276870 9.055403 8.397389 7.944434 9.371741 10.395790 10.825710 10.144099 9.158483 11.385382 10.658639 11.389856 8.091762 6.631039 10.734892 10.054598 11.535880 11.604912 9.799077 11.371677 8.478725 9.078455 9.399902 8.947744 7.305377 8.144973 7.613377 6.668798 10.681308 10.830845 9.973855 10.004133 9.369918 7.855433 8.838223 7.429033 9.521831 10.623930 9.724419 10.447452 8.890224 9.275923 9.932763 11.589953 10.839337 9.051250 8.497708 7.521701 8.440236 8.705670 9.063566 9.755744 8.449647 8.929485 8.554576 8.063231 10.348606 10.550718 5.985254 5.186844 9.931937 10.175582 9.854922 9.201393 9.114580 9.134215 10.334899 8.543604
import matplotlib import matplotlib.pyplot as plt dataMat = loadDataSet('testSet.txt') lowDMat, reconMat = pca(dataMat,1) print "shape(lowDMat): ",shape(lowDMat) fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker='^',s=90) ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker='o',s=50,c='red') plt.show()
結果如下圖:
參考文獻:
http://www.360doc.com/content/13/1124/02/9482_331688889.shtml
http://www.docin.com/p-160874280.html
https://www.zhihu.com/question/54100505/answer/432025686