PCA降维代码实现
背景
主成分分析(Principal Components Analysis),簡稱PCA,是一種數據降維技術,用于數據預處理。一般我們獲取的原始數據維度都很高,比如1000個特征,在這1000個特征中可能包含了很多無用的信息或者噪聲,真正有用的特征才100個,那么我們可以運用PCA算法將1000個特征降到100個特征。這樣不僅可以去除無用的噪聲,還能減少很大的計算量。
在PCA中,數據從原來的坐標系轉化到新的坐標系中。當然這里新的坐標系也不是隨便設定的,而是應該根據數據本身的特征來設計。通常第一個新坐標軸選擇的是原始數據方差最大的方向,第二個坐標軸是與第一個坐標軸正交且具有最大方差的方向。這句話的意思就是,第二個選取的方向應該和第一個方向具有很弱的相關性。
設計思路
PCA主成分分析算法,是一種線性降維,將高維坐標系映射到低維坐標系中。
如何選擇低維坐標系呢?
就是求協方差的特征值和特征向量過協方差矩陣的特征值和特征向量,特征向量代表坐標系,特征值代表映射到新坐標的長度。
然后做數據轉換。
但是有沒有覺得很神奇,為什么求協方差的較大特征向量就是最理想的k維向量?
設計實現
行代表了樣例,列代表特征(TF-IDF)分別求x和y的平均值,然后對于所有的樣例,都減去對應的均值。這里x的均值是1.81,y的均值是1.91,那么第一個樣例減去均值后即為(0.69,0.49)
留一個思考1:為什么我們要減去均值,作用是什么?
我們上面協方差矩陣是二維的,所以是二行二列
這邊用到線性代數知識,不會的同學可以自行學習
下圖第一個是特征值,第二個是特征向量
特征值: [0.0490834 1.28402771]
特征向量:[[-0.73517866 -0.6778734 ]
[ 0.6778734 -0.73517866]]
特征值0.0490833989對應特征向量為第一條向量,這里的特征向量都歸一化為單位向量。
將特征值按照從大到小的順序排序,選擇其中最大的k個,然后將其對應的k個特征向量分別作為列向量組成特征向量矩陣。這里特征值只有兩個,我們選擇其中最大的那個,這里是1.28402771,對應的特征向量是(-0.677873399, -0.735178656)T。我們是從二維降到一維,所以k取一,并且是最大的。
留兩個思考題:
思考二: 為什么要選擇最大的k?依據是什么?
思考三: k在實際運用中選取多少合適?
將樣本點投影到選取的特征向量上。假設樣例數為m,特征數為n,減去均值后的樣本矩陣為DataAdjust(mn),
協方差矩陣是nn,
選取的k個特征向量組成的矩陣為EigenVectors(nk)。
那么投影后的數據FinalData為FinalData(101)
= DataAdjust(10*2矩陣) x 特征向量(-0.677873399, -0.735178656)T
得到的結果是下圖
降維完成,同時又達到保真性
我們回答思考一:為什么數據要減去均值
簡單來說把數據中心化,減少過度擬合的可能性。如果有喜歡探索為什么的同學可以參看附錄一
我們回答思考二:為什么選取k的特征值越大越好?
最大方差理論: 前輩結論:最好的k維特征是將n維樣本點轉換為k維后,每一維上的樣本方差都很大。
why?
因為投影后的樣本點之間方差最大(也可以說是投影的絕對值之和最大)
把二維降為一維如果方差不大那么就會在主方向軸投影點會重疊,損失信息很大,并且丟失的向量是很重要的。看下圖4,5吧!(圖4,5數據過原點已經數據中心化)圖四的左半部分是最優的
在u>x,u為主向量時。我們可以看到點在u上的投影和u和u的正交向量有關。顯然圖4左邊的投影面比右邊的大并且投影點之間的方差大。圖五是圖四的單個點細節圖。
我們總結一下:
特征值在線性代數里面我們求過無數次了,對一個n*n的對稱矩陣進行分解,我們可以求出它的特征值和特征向量,就會產生n個n維的正交基,每個正交基會對應一個特征值。然后把矩陣投影到這N個基上,此時特征值的模就表示矩陣在該基的投影長度。
特征值越大,說明矩陣在對應的特征向量上的方差越大,樣本點越離散,越容易區分,信息量也就越多。因此,特征值最大的對應的特征向量方向上所包含的信息量就越多,如果某幾個特征值很小,那么就說明在該方向的信息量非常少,我們就可以刪除小特征值對應方向的數據,只保留大特征值方向對應的數據,這樣做以后數據量減小,但有用的信息量都保留下來了。PCA就是這個原理。
我們回答思考三:在n維中選多少個k最合適?
當然,k(特征向量)取得越多越好,k越多熵越大,樣本不確定性越大,越接近真實數據。如果k越大就達不到我們說的降維效果了。所以這是個經驗之談
有些研究工作表明,所選的主軸總長度占所有主軸長度之和的大約85% 即可,其實,這只是一個大體的說法,具體選多少個,要看實際情況而定。如下圖公式。注:n為樣本數,k為我們選的維數。
總結
步驟回顧
降維完成!!!
附錄一:
為了說明什么是數據的主成分,先從數據降維說起。數據降維是怎么回事兒?假設三維空間中有一系列點,這些點分布在一個過原點的斜面上,如果你用自然坐標系x,y,z這三個軸來表示這組數據的話,需要使用三個維度,而事實上,這些點的分布僅僅是在一個二維的平面上,問題出在哪里?把x,y,z坐標系旋轉一下,使數據所在平面與x,y平面重合。如果把旋轉后的坐標系記為x’,y’,z’,那么這組數據的表示只用x’和y’兩個維度表示即可!當然了,如果想恢復原來的表示方式,那就得把這兩個坐標之間的變換矩陣存下來。這樣就能把數據維度降下來了!看下圖進行理解這段話
但是,我們要看到這個過程的本質,如果把這些數據按行或者按列排成一個矩陣,那么這個矩陣的秩就是2!這些數據之間是有相關性(有非零解)的,這些數據構成的過原點的向量的最大線性無關組包含2個向量,這就需要平面過原點的!這就是數據中心化的緣故!將坐標原點平移到數據中心,這樣原本不相關的數據在這個新坐標系中就有相關性了!增加基向量的正交性。有趣的是,三點一定共面,也就是說三維空間中任意三點中心化后都是線性相關的,一般來講n維空間中的n個點一定能在一個n-1維子空間中分析!n維歐氏空間中余維度等于一的線性子空間,也就是必須是(n-1)維度。這是平面中的直線、空間中的平面之推廣。
總結
- 上一篇: 如何连接路由器与电信天翼网关天翼无线网关
- 下一篇: wifi连接到了上不到网路由器怎么设置我