
機(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
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10