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