
機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之PCA
1. 向量及其基變換
1.1 向量?jī)?nèi)積
(1)兩個(gè)維數(shù)相同的向量的內(nèi)積定義如下: 內(nèi)積運(yùn)算將兩個(gè)向量映射為一個(gè)實(shí)數(shù).
(2) 內(nèi)積的幾何意義
假設(shè)A\B是兩個(gè)n維向量, n維向量可以等價(jià)表示為n維空間中的一條從原點(diǎn)發(fā)射的有向線段, 為方便理解, 在這里假設(shè)A和B都是二維向量.A=(x1,y1) , B=(x2,y2),在二維平面上A/B可以用兩條發(fā)自原點(diǎn)的有向線段表示,如下圖:
在上圖中,從A點(diǎn)向B所在的直線引一條垂線.垂線與B的交點(diǎn)叫A在B上的投影.A與B的夾角是a,則投影的矢量長(zhǎng)度為
* 矢量長(zhǎng)度可能為負(fù),其絕對(duì)值是線段長(zhǎng)度. 符號(hào)取決于其方向與標(biāo)準(zhǔn)方向相同或相反. 標(biāo)量長(zhǎng)度總是大于等于0,值就是線段的長(zhǎng)度.
內(nèi)積另外一種表示形式:
A和B的內(nèi)積等于A到B的投影長(zhǎng)度乘以B的模.設(shè)向量B的模為1的話,則A和B的內(nèi)積值等于A向B所在直線投影的矢量長(zhǎng)度.
1.2 基
(1) 一個(gè)二維向量對(duì)應(yīng)二維直角坐標(biāo)系中從原點(diǎn)出發(fā)的一個(gè)有向線段, 代數(shù)方面, 常使用線段終點(diǎn)的點(diǎn)坐標(biāo)表示向量, 例如(3,2), 但是一個(gè)(3,2)并不能精確的表示一個(gè)向量,. 分析可得: "3"實(shí)際表示的是向量在x軸上的投影值是3,在y軸的投影值是2, 也就是隱式的引入了一個(gè)定義: 以x軸和y軸正方向長(zhǎng)度為1的向量為標(biāo)準(zhǔn). 更具體地,向量(x,y)實(shí)際可以表示線性組合:. 此處(1,0)/(0,1)為二維空間中的一組基.
結(jié)論: 為了準(zhǔn)確描述向量,首先確定一組基,然后給出在基所在的各個(gè)直線上的投影值即可.
(2) 任何兩個(gè)線性無關(guān)的二維向量都可以成為一組基.一般假設(shè)基的模為1, 例如一組基為,則點(diǎn)(3,2)在新基上的坐標(biāo)為
,形象的從下圖中可以觀察:
(3) 基變換的矩陣表示
第二節(jié)中的例子轉(zhuǎn)為矩陣表示為:
矩陣的兩行分別為兩個(gè)基.乘以原向量恰好是新坐標(biāo); 若是有多個(gè)二維向量要轉(zhuǎn)換到新基下的坐標(biāo),即將這些二維向量按列排成一個(gè)矩陣,例如點(diǎn)(1,1)/(2,2)/(3,3)
*結(jié)論: 如果有m個(gè)n維向量,想將其變換為r個(gè)n維空間表示的新空間中,首先將r個(gè)基按行組成矩陣A,然后將向量按列組成矩陣B, 那么兩矩陣的乘積AB就是變換結(jié)果,其中AB的第m列為B中第m列的變換結(jié)果. r決定了變換后數(shù)據(jù)的維數(shù).即可以將一n維數(shù)據(jù)變換到更低維的空間中去,變換后的維數(shù)取決于基的數(shù)量.
兩個(gè)矩陣相乘的意義就是將右邊矩陣中的每一列列向量轉(zhuǎn)換到左邊每一行行向量為基表示的空間中去.
2. 協(xié)方差矩陣
2.1 基礎(chǔ)準(zhǔn)備
前面討論了不同的基可以對(duì)同一組數(shù)據(jù)給出不同的表示,如果基的數(shù)量少于向量自身的維數(shù), 則可以達(dá)到降維的目標(biāo). 如何選擇k個(gè)n維向量(k個(gè)基)使得最大程度上保留原有的信息?
下面舉例說明:
數(shù)據(jù)的5條記錄組成, 將它們表示成矩陣形式:
其中每一列為一條數(shù)據(jù)記錄,一行對(duì)應(yīng)一個(gè)字段,為了處理方便,首先將每個(gè)字段內(nèi)所有值減去字段均值,其結(jié)果就是將每個(gè)字段的均值都變?yōu)?,上述矩陣變換后的結(jié)果為:
其在坐標(biāo)系中對(duì)應(yīng)的位置為:
問題: 現(xiàn)在要用一維來表示這些數(shù)據(jù),又希望盡可能的保留原始的信息,該怎么選擇基?
答案: 希望投影后的投影值盡可能分散.
上述圖所將數(shù)據(jù)點(diǎn)向第一象限和第三象限的斜線投影,則上述5個(gè)點(diǎn)在投影后還是可以區(qū)分的.
2.2. 方差
希望投影后得到的數(shù)據(jù)值盡可能分散, 分散程度可以用數(shù)學(xué)上的方差來表述.
一個(gè)字段的方差可以看作是每個(gè)元素與字段均值差的平方和的均值,即
由于上面已將數(shù)據(jù)的每個(gè)字段平均化了,因此方差可以直接用每個(gè)元素的平方和除以元素個(gè)數(shù),即
于是上述問題被形式化表示為:尋找一個(gè)基,使得所有數(shù)據(jù)變換為這個(gè)基上的坐標(biāo)后,方差最大.
2.3 協(xié)方差
對(duì)于將二維變?yōu)橐痪S的問題,找到使得方差最大的方向即可; 但是對(duì)于更高維,需要考慮更多,例如三維降到二維, 與之前相同,首先希望找到一個(gè)方向使得投影后方差最大,這樣就完成了地一個(gè)方向的選擇,繼續(xù)我們還需要選擇第二個(gè)投影方向.
若繼續(xù)選擇方差最大的方向,則這個(gè)方向和第一個(gè)方向應(yīng)該是幾乎重合的, 顯然這樣是不行的,. 從直觀上看,為了讓這兩個(gè)字段盡可能的表示更多的原始信息,希望它們之間是線性不相關(guān)的,因?yàn)橄嚓P(guān)性意味這兩個(gè)字段不是完全獨(dú)立,存在重復(fù)表示的信息.
數(shù)學(xué)上用兩個(gè)字段的協(xié)方差來表示其相關(guān)性,由于已經(jīng)讓每個(gè)字段的均值為0,則其協(xié)方差計(jì)算公式如下:
由式子可以得出, 在字段均值為0的情況下, 兩個(gè)字段的協(xié)方差簡(jiǎn)潔的表示為其內(nèi)積除以元素?cái)?shù).
當(dāng)協(xié)方差為0時(shí), 表示兩個(gè)字段完全獨(dú)立. 為了讓協(xié)方差為0, 選擇第二個(gè)基只能在與第一個(gè)基正交的方向上選擇.因此最終選擇的兩個(gè)方向一定是正交的.
***降維的優(yōu)化目標(biāo): 將一組n維向量降為k維,其目標(biāo)是選擇k個(gè)單位(模為1)正交基,使得原始數(shù)據(jù)變換到這組基上后, 個(gè)字段兩兩間協(xié)方差為0,且字段的方差盡可能大(在正交的約束下,取最大的k個(gè)方差)
2.4 協(xié)方差矩陣
最終目的與字段內(nèi)方差和字段間的協(xié)方差密切相關(guān),現(xiàn)在想做的就是使得兩者統(tǒng)一.
假設(shè)我們有a和b兩個(gè)字段,m個(gè)向量,將其按行組成矩陣X:
然后用X乘以X的轉(zhuǎn)置,并除以向量個(gè)數(shù):
可以發(fā)現(xiàn),這個(gè)矩陣對(duì)角線上的兩個(gè)元素分別是來那個(gè)個(gè)字段的方差,而其它元素是a和b的協(xié)方差.即方差和協(xié)方差被統(tǒng)一到了一個(gè)矩陣中.
***推廣得到一般結(jié)論: 若有m個(gè)n維數(shù)據(jù),將其按列拍成n*m的矩陣X,,則C是一個(gè)對(duì)稱矩陣,其對(duì)角線分別是各個(gè)字段對(duì)應(yīng)的方差,第i行j列與第j行i列的元素一樣,表示i和j兩個(gè)字段的協(xié)方差.
2.5 協(xié)方差矩陣對(duì)角化
為了達(dá)到使得字段內(nèi)方差盡可能大,字段間的協(xié)方差為0的目標(biāo), 等于將協(xié)方差矩陣對(duì)角化:即除對(duì)角線外的其它元素均為0,并且對(duì)角線上的元素按從大到小的順序排列,這樣就達(dá)到了優(yōu)化目的.
令原始數(shù)據(jù)矩陣X對(duì)應(yīng)的協(xié)方差矩陣為C,P是一組基按行組成的矩陣,Y=PX,則Y為X對(duì)P做基變換后的數(shù)據(jù).設(shè)Y的協(xié)方差矩陣為D,推導(dǎo)D與C的關(guān)系:
顯然, 變換后的矩陣Y的協(xié)方差矩陣D應(yīng)該除對(duì)角線外的元素為0.我們尋找的P是能讓原始協(xié)方差矩陣對(duì)角化的P.
即優(yōu)化目標(biāo)變?yōu)?尋找一個(gè)矩陣P, 滿足是一個(gè)對(duì)角矩陣,且對(duì)角元素按從大到小依次排列,那么P的前k行就是尋找的基,用P的前k行組成的矩陣乘以C就使得X從n維降到了k維并滿足上述優(yōu)化條件.
2.6 協(xié)方差對(duì)角化
協(xié)方差矩陣C是一個(gè)對(duì)稱矩陣,實(shí)對(duì)稱矩陣有很好的性質(zhì):
3. 降維方法
3.1 降維目的:
使得數(shù)據(jù)集更易使用
降低很多算法的計(jì)算開銷
去除噪聲
使得結(jié)果易懂
3.2 三種降維方法
(1) 主成分分析法 (principal component analysis, PCA)
在PCA中,數(shù)據(jù)從原來的坐標(biāo)系轉(zhuǎn)換到了新的坐標(biāo)系,新坐標(biāo)系的選擇由數(shù)據(jù)本身決定. 第一個(gè)新坐標(biāo)軸選擇的是原始數(shù)據(jù)中方差最大的方向,第二個(gè)新坐標(biāo)軸的選擇是和第一個(gè)新坐標(biāo)軸正交且具有最大方差的方向.過程一直重復(fù),重復(fù)次數(shù)為原始數(shù)據(jù)中特征的數(shù)目.
(2) 因子分析(factor analysis)
在因子分析中,假設(shè)在觀察數(shù)據(jù)的生成中有一些觀察不到的隱變量.假設(shè)觀察數(shù)據(jù)是這些隱變量和某些噪聲的線性組合.
(3) 獨(dú)立成分分析(independent component analysis,ICA)
在ICA中, 假設(shè)數(shù)據(jù)是從N個(gè)數(shù)據(jù)源生成的.即數(shù)據(jù)為多個(gè)數(shù)據(jù)源的混合觀察結(jié)果,這些數(shù)據(jù)源之間在統(tǒng)計(jì)上是相互獨(dú)立的,在PCA中只假設(shè)數(shù)據(jù)是不相關(guān)的.同因子分析一樣,若數(shù)據(jù)源的數(shù)目小于觀察數(shù)據(jù)的數(shù)目,就可以實(shí)現(xiàn)降維.
4. PCA(principal component analysis,主成分分析)
4.1 性能評(píng)價(jià)
優(yōu)點(diǎn): 降低數(shù)據(jù)的復(fù)雜性,識(shí)別到最重要的幾個(gè)特征
缺點(diǎn):不一定需要,且可能損失有用信息
4.2 PCA實(shí)現(xiàn)
將數(shù)據(jù)轉(zhuǎn)換成前N個(gè)主成分的偽代碼如下:
去除平均值(將數(shù)據(jù)的每一維特征減去其平均值)
計(jì)算由數(shù)據(jù)構(gòu)成矩陣的協(xié)方差矩陣
將特征值從大到小排序
保留最上面的N個(gè)特征向量
將數(shù)據(jù)轉(zhuǎn)換到上述N個(gè)特征向量構(gòu)建的新空間中
其實(shí)現(xiàn)代碼如下:
<span style="font-size:18px;"><span style="font-size:18px;">def pca(dataMat,topNfeat = 999999):
#每一行對(duì)應(yīng)一個(gè)數(shù)據(jù)點(diǎn),求每一列的平均值(即每個(gè)特征的均值)
meanVal = mean(dataMat,axis = 0)
#數(shù)據(jù)均值化
meanData = dataMat - meanVal
#求數(shù)據(jù)的協(xié)方差矩陣
covMat = cov(meanData,rowvar = 0)
#協(xié)方差矩陣的特征向量和特征值
eigVal,eigVec = linalg.eig(mat(covMat))
eigValIndex = argsort(eigVal)
eigValIndex = eigValIndex[:-(topNfeat+1):-1]
redEigVec = eigVec[:,eigValIndex]
#得到降維后的數(shù)據(jù)
lowDataMat = meanData * redEigVec
#原始數(shù)據(jù)被重構(gòu)后返回用于調(diào)試
reconMat = (lowDataMat * redEigVec.T) + meanVal
return lowDataMat,reconMat</span></span>
4.3 重構(gòu)
還原原始數(shù)據(jù)的過程就是獲得樣本點(diǎn)映射以后在原空間中的估計(jì)位置的過程.
檢驗(yàn):在命令行輸入以下代碼:將降維后的數(shù)據(jù)和原始數(shù)據(jù)一起畫出來.得到圖片如下:
<span style="font-size:18px;">>>> lowdata,recon = pca.pca(datas,1)
[[ 1.]]
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.scatter(datas[:,0].flatten().A[0],datas[:,1].flatten().A[0],marker='^',s=90)
<matplotlib.collections.PathCollection object at 0x7f8b84d70590>
>>> ax.scatter(recon[:,0].flatten().A[0],recon[:,1].flatten().A[0],marker='o',s=50,c='red')
<matplotlib.collections.PathCollection object at 0x7f8b84d40290>
>>> plt.show()
</span>
c
即紅色的線表示原始數(shù)據(jù)沿著這條線投影.即第一新坐標(biāo)軸.
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03