機(jī)器學(xué)習(xí)之特征工程-降維

當(dāng)特征選擇完成后,可以直接訓(xùn)練模型了,但是可能由于特征矩陣過大,導(dǎo)致計(jì)算量大,訓(xùn)練時(shí)間長(zhǎng)的問題,因此降低特征矩陣維度也是必不可少的。但不要盲目降維,當(dāng)你在原數(shù)據(jù)上跑到了一個(gè)比較好的結(jié)果,又嫌它太慢的時(shí)候才進(jìn)行降維,不然降了半天白降了。
常見的降維方法有主成分分析法(PCA)線性判別分析(LDA),線性判別分析本身也是一個(gè)分類模型。PCA和LDA有很多的相似點(diǎn),其本質(zhì)是要將原始的樣本映射到維度更低的樣本空間中,但是PCA和LDA的映射目標(biāo)不一樣:PCA是為了讓映射后的樣本具有最大的發(fā)散性;而LDA是為了讓映射后的樣本有最好的分類性能。所以說PCA是一種無監(jiān)督的降維方法,而LDA是一種有監(jiān)督的降維方法。

主成分分析法(PCA)

Principal Component Analysis(PCA)是最常用的線性降維方法,它的目標(biāo)是通過某種線性投影,將高維的數(shù)據(jù)映射到低維的空間中表示,并期望在所投影的維度上數(shù)據(jù)的方差最大,以此使用較少的數(shù)據(jù)維度,同時(shí)保留住較多的原數(shù)據(jù)點(diǎn)的特性。
通俗的理解,如果把所有的點(diǎn)都映射到一起,那么幾乎所有的信息(如點(diǎn)和點(diǎn)之間的距離關(guān)系)都丟失了,而如果映射后方差盡可能的大,那么數(shù)據(jù)點(diǎn)則會(huì)分散開來,以此來保留更多的信息??梢宰C明,PCA是丟失原始數(shù)據(jù)信息最少的一種線性降維方式。(實(shí)際上就是最接近原始數(shù)據(jù),但是PCA并不試圖去探索數(shù)據(jù)內(nèi)在結(jié)構(gòu))  
使用decomposition庫(kù)的PCA類選擇特征的代碼如下:

from sklearn.decomposition import PCA
#主成分分析法,返回降維后的數(shù)據(jù)
#參數(shù)n_components為主成分?jǐn)?shù)目
PCA(n_components=2).fit_transform(iris.data)

PCA追求的是在降維之后能夠最大化保持?jǐn)?shù)據(jù)的內(nèi)在信息,并通過衡量在投影方向上的數(shù)據(jù)方差的大小來衡量該方向的重要性。但是這樣投影以后對(duì)數(shù)據(jù)的區(qū)分作用并不大,反而可能使得數(shù)據(jù)點(diǎn)揉雜在一起無法區(qū)分。這也是PCA存在的最大一個(gè)問題,這導(dǎo)致使用PCA在很多情況下的分類效果并不好。具體可以看下圖所示,若使用PCA將數(shù)據(jù)點(diǎn)投影至一維空間上時(shí),PCA會(huì)選擇2軸,這使得原本很容易區(qū)分的兩簇點(diǎn)被揉雜在一起變得無法區(qū)分;而這時(shí)若選擇1軸將會(huì)得到很好的區(qū)分結(jié)果。



LDA所追求的目標(biāo)與PCA不同,不是希望保持?jǐn)?shù)據(jù)最多的信息,而是希望數(shù)據(jù)在降維后能夠很容易地被區(qū)分開來。后面會(huì)介紹LDA的方法,是另一種常見的線性降維方法。

線性判別分析法(LDA)

Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一種有監(jiān)督的(supervised)線性降維算法。與PCA保持?jǐn)?shù)據(jù)信息不同,LDA是為了使得降維后的數(shù)據(jù)點(diǎn)盡可能地容易被區(qū)分!
假設(shè)原始數(shù)據(jù)表示為X,(m*n矩陣,m是維度,n是sample的數(shù)量)
既然是線性的,那么就是希望找到映射向量a, 使得 a‘X后的數(shù)據(jù)點(diǎn)能夠保持以下兩種性質(zhì):

1、同類的數(shù)據(jù)點(diǎn)盡可能的接近(within class)
2、不同類的數(shù)據(jù)點(diǎn)盡可能的分開(between class)

所以呢還是上面PCA用的這張圖,如果圖中兩堆點(diǎn)是兩類的話,那么我們就希望他們能夠投影到軸1去(PCA結(jié)果為軸2),這樣在一維空間中也是很容易區(qū)分的。



使用lda庫(kù)的LDA類選擇特征的代碼如下:

from sklearn.lda import LDA
#線性判別分析法,返回降維后的數(shù)據(jù)
#參數(shù)n_components為降維后的維數(shù)
LDA(n_components=2).fit_transform(iris.data, iris.target)

參考

簡(jiǎn)述多種降維算法
四大機(jī)器學(xué)習(xí)降維算法:PCA、LDA、LLE、Laplacian Eigenmaps

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容