Python機(jī)器學(xué)習(xí) 第2版 課件 第9章數(shù)據(jù)降維_第1頁
Python機(jī)器學(xué)習(xí) 第2版 課件 第9章數(shù)據(jù)降維_第2頁
Python機(jī)器學(xué)習(xí) 第2版 課件 第9章數(shù)據(jù)降維_第3頁
Python機(jī)器學(xué)習(xí) 第2版 課件 第9章數(shù)據(jù)降維_第4頁
Python機(jī)器學(xué)習(xí) 第2版 課件 第9章數(shù)據(jù)降維_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Machine

Learning

with

Python9.1目錄9.29.49.3主成分分析線性判別分析稀疏編碼案例-高光譜圖像降維9.5本章小結(jié)數(shù)據(jù)降維本節(jié)介紹數(shù)據(jù)降維的原理以及實(shí)現(xiàn)及相關(guān)參數(shù)。9.13

9.1主成分分析主成分分析(PrincipalComponentAnalysis,PCA)是一種常用的無監(jiān)督學(xué)習(xí)方法,其原理是通過正交變換將一組可能存在相關(guān)性的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,轉(zhuǎn)換后的這組變量叫主成分。主成分是原特征的線性組合,其個(gè)數(shù)通常小于原始變量的個(gè)數(shù)。PCA主要用于發(fā)現(xiàn)數(shù)據(jù)中變量之間的關(guān)系,是數(shù)據(jù)分析的有力工具。4

9.1.1算法原理PCA的思路是:(1)由于樣本的屬性特征維數(shù)較高,相互之間存在關(guān)聯(lián)關(guān)系.為了消除相關(guān)性,對(duì)原始屬性進(jìn)行線性線性組合,找到一組彼此不相關(guān)的屬性特征;(2)在新的屬性特征中,刪除一些不重要的特征,保留較少特征數(shù),同時(shí)保證損失較小.利用線性代數(shù)的知識(shí)對(duì)此進(jìn)行解釋:(1)從原始n維歐幾里得空間中,對(duì)原基向量進(jìn)行線性組合,找到一組新的基向量;(2)保留部分“重要”的基向量,刪除“不重要”的基向量,達(dá)到降維的目的,同時(shí)保證信息的損失較少。那么有以下問題需要解決(1)什么樣的新的基向量能夠消除原基向量之間的相關(guān)關(guān)系?(2)如何對(duì)新的基向量的重要性進(jìn)行定量分析?什么情況下?lián)p失信息最少?針對(duì)問題(1),由線性代數(shù)的知識(shí),基向量組一般選取正交的向量組,而正交的向量組一定是線性無關(guān)。針對(duì)問題(2),采用協(xié)方差矩陣對(duì)角化,并將對(duì)角線上元素從大到小排列的策略,下面進(jìn)行詳細(xì)說明。5

9.1.1算法原理

圖9-1方差最大6

9.1.1算法原理

7

9.1.1算法原理

8

9.1.1算法原理

9

9.1.1算法原理

10

9.1.1算法原理

11

9.1.1算法原理

12

9.1.1算法原理

13

9.1.1算法原理

14

9.1.1算法原理

15

9.1.1算法原理

16

9.1.2實(shí)現(xiàn)及參數(shù)Scikit-learn模塊提供了PCA算法,其函數(shù)原型如下:sklearn.decomposition.PCA(n_components=None,whiten=False,svd_solver='auto',tol=0.0,iterated_power='auto',random_state=None)其主要參數(shù)如下:1)n_components:需要保留的主成分?jǐn)?shù)目。數(shù)據(jù)類型為整數(shù)、浮點(diǎn)數(shù)或None,默認(rèn)值為None。其可選值為:None:保留所有主成分。整數(shù)n:保留前n個(gè)主成分。浮點(diǎn)數(shù)m(在0到1之間):保留足夠的主成分,解釋至少m比例的方差。2)whiten:是否對(duì)降維后的數(shù)據(jù)進(jìn)行白化處理,即使每個(gè)主成分的方差為1。數(shù)據(jù)類型為布爾型,默認(rèn)值為False。如設(shè)置為True則執(zhí)行白化處理,去除主成分之間的相關(guān)性,通常會(huì)導(dǎo)致更平衡的數(shù)據(jù)表示。17

9.1.2實(shí)現(xiàn)及參數(shù)3)svd_solver:用于計(jì)算主成分的方法(SVD求解器)。數(shù)據(jù)類型為字符串型,默認(rèn)值為'auto'。其可選值為:auto:根據(jù)輸入數(shù)據(jù)的樣本數(shù)和特征數(shù),自動(dòng)選擇最適合的求解器。如果最小的維度小于等于500,并且n_components>1,則選擇'full';否則選擇'randomized'。full:使用完整的SVD解法,即通過計(jì)算整個(gè)協(xié)方差矩陣來找到所有主成分。適用于較小的數(shù)據(jù)集或當(dāng)需要精確地計(jì)算所有主成分時(shí)。這種方法計(jì)算成本較高,但可以獲得準(zhǔn)確的結(jié)果。對(duì)于非常大的數(shù)據(jù)集,可能不是最優(yōu)選擇,因?yàn)樗枰嗟膬?nèi)存和計(jì)算時(shí)間。arpack:使用ARPACK庫(kù)實(shí)現(xiàn)的隱式重啟Arnoldi迭代法來計(jì)算部分奇異值和向量,特別適合處理稀疏矩陣。當(dāng)數(shù)據(jù)集較大,且只需要計(jì)算前幾個(gè)最大的奇異值和對(duì)應(yīng)的奇異向量時(shí),這個(gè)選項(xiàng)可以節(jié)省大量時(shí)間和內(nèi)存。但是,它只適用于n_components<min(樣本數(shù),特征數(shù))的情況,因?yàn)锳RPACK是用于求解部分譜問題的。randomized:使用隨機(jī)化SVD算法,這是一種近似方法,能夠在犧牲一定精度的情況下顯著加快計(jì)算速度。非常適合大規(guī)模數(shù)據(jù)集。它可以快速提供一個(gè)足夠好的近似解。在不需要所有主成分的情況下,對(duì)于非常高的維度或大量的樣本,推薦選擇此方法。另外,還可以通過設(shè)置參數(shù)iterated_power來控制迭代次數(shù)以提高精度。18

9.1.2實(shí)現(xiàn)及參數(shù)4)tol:在svd_solver='arpack'時(shí)的容忍度,用于控制求解精度。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為0.0。5)iterated_power:當(dāng)svd_solver='randomized'時(shí),指定進(jìn)行隨機(jī)SVD分解的迭代次數(shù)。數(shù)據(jù)類型可以是整數(shù)或auto,默認(rèn)值為auto。如果設(shè)置為整數(shù),則表示迭代次數(shù)。6)random_state(default=None):隨機(jī)數(shù)生成的種子,用于初始化隨機(jī)化的SVD過程。其主要屬性為:1)components_:每個(gè)主成分的特征向量(方向)。2)explained_variance_ratio_:各主成分的方差貢獻(xiàn)比。3)mean_:數(shù)據(jù)中心化時(shí)的均值。4)n_components_:實(shí)際返回的主成分?jǐn)?shù)目。5)noise_variance_:估計(jì)的噪聲方差(僅當(dāng)n_components<min(樣本數(shù),特征數(shù))時(shí)有效)。19

9.1.2實(shí)現(xiàn)及參數(shù)其主要方法為:1)fit(X):擬合PCA模型,計(jì)算數(shù)據(jù)的主成分。2)fit_transform(X):先擬合數(shù)據(jù),然后將數(shù)據(jù)降維到主成分空間。3)transform(X):將數(shù)據(jù)轉(zhuǎn)換到主成分空間。4)inverse_transform(X):將數(shù)據(jù)從主成分空間轉(zhuǎn)換回原始空間。5)get_covariance():計(jì)算并返回基于主成分分析的協(xié)方差矩陣。6)get_precision():計(jì)算并返回基于主成分分析的精度矩陣(協(xié)方差矩陣的逆)。20

9.1.2實(shí)現(xiàn)及參數(shù)

21

9.1.2實(shí)現(xiàn)及參數(shù)

22

9.1.2實(shí)現(xiàn)及參數(shù)#查看每個(gè)主成分包含信息的多少,即對(duì)應(yīng)特征值pca.explained_variance_#查看降維后每個(gè)主成分的信息量占原始數(shù)據(jù)總信息量的百分比,即每個(gè)主成分的方差貢獻(xiàn)率pca.explained_variance_ratio_#計(jì)算所有主成分方差貢獻(xiàn)率之和variance_ratio_sum=pca.explained_variance_ratio_.sum()#查看所有主成分方差貢獻(xiàn)率之和print("查看貢獻(xiàn)率:")print(variance_ratio_sum)23

9.1.2實(shí)現(xiàn)及參數(shù)運(yùn)行結(jié)果如下:降維后數(shù)據(jù):[[4.900151971.31898278][1.01238316-1.82498647][0.147548290.20187582][-4.079311941.92658145][-1.98077148-1.62245358]]查看主成分:[[-0.6168528-0.69528916-0.36887073][0.76108637-0.40747515-0.50468955]]查看貢獻(xiàn)率:0.9978590521028053線性判別分析本節(jié)介紹線性判別分析原理和實(shí)驗(yàn)及參數(shù)9.225

9.2.1算法原理

圖9-2同一類別盡量“靠近”

圖9-3不同類別盡量“遠(yuǎn)離”26

9.2.1算法原理

27

9.2.1算法原理

圖9-4二維空間上到直線的投影28

9.2.1算法原理

29

9.2.1算法原理

30

9.2.1算法原理

31

9.2.1算法原理

32

9.2.1算法原理

33

9.2.1算法原理

34

9.2.1算法原理

35

9.2.1算法原理

36

9.2.1算法原理

37

9.2.1算法原理

38

9.2.2實(shí)現(xiàn)及參數(shù)scikit-learn中實(shí)現(xiàn)LDA算法的類如下:sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd',priors=None,n_components=None,shrinkage=None,tol=0.0001,solver_params=None,class_weight=None,n_iter=100,store_covariance=False,covariance_estimator=None)

39

9.2.2實(shí)現(xiàn)及參數(shù)其主要參數(shù)如下:1)solver:用于計(jì)算判別分析的方法。數(shù)據(jù)類型為字符串型,默認(rèn)值為svd。其可選值為:svd:使用奇異值分解(SingularValueDecomposition)。因?yàn)椴恍枰?jì)算協(xié)方差矩陣,因此對(duì)于高維數(shù)據(jù)更加穩(wěn)定。特別是當(dāng)特征數(shù)較大時(shí),可以節(jié)省內(nèi)存和計(jì)算時(shí)間。但是因?yàn)椴恢С质湛s估計(jì)(shrinkage),所以不能自動(dòng)調(diào)整協(xié)方差矩陣以應(yīng)對(duì)過擬合的問題。lsqr:使用最小二乘法來解決LDA問題,并且支持收縮估計(jì)(shrinkage)。該方法通過正則化技術(shù)改進(jìn)協(xié)方差矩陣的估計(jì),尤其在小樣本量的情況下有助于提高模型的泛化能力,對(duì)于高維數(shù)據(jù)也能提供較好的結(jié)果。適用于中小規(guī)模數(shù)據(jù)集,特別是當(dāng)樣本量較少或者特征之間存在高度相關(guān)性時(shí)可以選擇這種方法,缺點(diǎn)是計(jì)算復(fù)雜度相對(duì)較高。eigen:使用特征分解法來計(jì)算LDA。該方法通過優(yōu)化類間散布與類內(nèi)散布的比例來找到最佳投影方向。與lsqr類似,支持收縮估計(jì),能夠改善對(duì)小樣本數(shù)據(jù)的性能。需要計(jì)算協(xié)方差矩陣,因此對(duì)于非常大的數(shù)據(jù)集計(jì)算復(fù)雜度相對(duì)較高。

40

9.2.2實(shí)現(xiàn)及參數(shù)2)shrinkage:是否應(yīng)用收縮估計(jì)來改進(jìn)協(xié)方差矩陣的估計(jì)。數(shù)據(jù)類型為None、浮點(diǎn)數(shù)或auto,默認(rèn)值為None。其可選值解釋如下:None:不應(yīng)用收縮估計(jì)。浮點(diǎn)數(shù):指定收縮強(qiáng)度,范圍在0到1之間。auto:自動(dòng)選擇最優(yōu)收縮強(qiáng)度(僅當(dāng)solver='lsqr'或'eigen'時(shí)有效)。3)priors:類別的先驗(yàn)概率。數(shù)據(jù)類型為數(shù)組或None,默認(rèn)值為None。如果設(shè)置為None,則類別先驗(yàn)概率根據(jù)訓(xùn)練集中的頻率自動(dòng)計(jì)算;否則,提供一個(gè)數(shù)組指定每個(gè)類別的先驗(yàn)概率。4)n_components:需要保留的主成分?jǐn)?shù)目,與PCA算法中該參數(shù)相同。5)tol:收斂容忍度,即控制求解器停止條件的精度。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為0.0001。僅當(dāng)solver='lsqr'時(shí)有效。

41

9.2.2實(shí)現(xiàn)及參數(shù)6)solver_params:提供給求解器的附加參數(shù)。數(shù)據(jù)類型為字典或None,默認(rèn)值為None。7)class_weight:類別的權(quán)重,用于處理不平衡的類別。數(shù)據(jù)類型為字典、balanced或None,默認(rèn)值為None。設(shè)置為balanced則自動(dòng)調(diào)整權(quán)重,使得類別平衡;也可以通過字典指定每個(gè)類別的權(quán)重8)n_iter:迭代次數(shù),用于估計(jì)協(xié)方差矩陣的值。數(shù)據(jù)類型為整數(shù),默認(rèn)值為100。9)store_covariance:是否存儲(chǔ)協(xié)方差矩陣的估計(jì)值。數(shù)據(jù)類型為布爾值,默認(rèn)值為False,即不存儲(chǔ)。10)covariance_estimator:可選的協(xié)方差估計(jì)器,用于對(duì)協(xié)方差進(jìn)行估計(jì)。數(shù)據(jù)類型為一個(gè)估計(jì)器對(duì)象或None,默認(rèn)值為Non,即使用默認(rèn)的估計(jì)方法e。

42

9.2.2實(shí)現(xiàn)及參數(shù)其主要屬性為:1)coef_:每個(gè)特征的系數(shù),即判別向量。2)intercept_:截距項(xiàng)。3)covariance_:每個(gè)類別的協(xié)方差矩陣(僅當(dāng)store_covariance=True時(shí)可用)。4)explained_variance_ratio_:各判別成分的方差貢獻(xiàn)比。5)means_:每個(gè)類別的均值向量。6)priors_:每個(gè)類別的先驗(yàn)概率。7)scalings_:判別成分的縮放因子,用于轉(zhuǎn)換數(shù)據(jù)。8)xbar_:所有樣本的總體均值。9)classes_:類別標(biāo)簽。

43

9.2.2實(shí)現(xiàn)及參數(shù)其主要方法為:1)fit(X,y):擬合LDA模型,計(jì)算類別的先驗(yàn)概率和類間散度、類內(nèi)散度。2)predict(X):使用擬合的LDA模型對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。3)predict_proba(X):返回每個(gè)類別的預(yù)測(cè)概率。4)transform(X):將輸入數(shù)據(jù)X轉(zhuǎn)換到LDA的低維空間,返回轉(zhuǎn)換后的數(shù)據(jù)。5)fit_transform(X,y):首先擬合LDA模型,然后將數(shù)據(jù)轉(zhuǎn)換到低維空間(即先fit后transform)。6)score(X,y):計(jì)算預(yù)測(cè)的精度(0到1之間的浮動(dòng)值)。7)get_params:獲取LDA模型的參數(shù)。返回模型的參數(shù)字典。8)set_params(**params):設(shè)置LDA模型的參數(shù),在需要調(diào)優(yōu)超參數(shù)時(shí)使用。

44

9.2.2實(shí)現(xiàn)及參數(shù)

45

9.2.2實(shí)現(xiàn)及參數(shù)clf_t=clf.fit(X,y) #對(duì)分類器進(jìn)行訓(xùn)練X_n=clf_t.transform(X) #使用訓(xùn)練好的分類器對(duì)輸入數(shù)據(jù)進(jìn)行降維轉(zhuǎn)換X_norm=np.linalg.norm(X_n) #計(jì)算樣本范數(shù)X_t=X_n/X_norm #對(duì)降維后的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理print("降維后的數(shù)據(jù)為:")print(X_t)運(yùn)行結(jié)果如下:降維后的數(shù)據(jù)為:[[0.32514153][0.24729308][0.43412937][-0.74651701][-0.29367088][0.03362391]]46

9.2.2實(shí)現(xiàn)及參數(shù)【例9-3】利用Sklearn實(shí)現(xiàn)多分類LDA算法。設(shè)數(shù)據(jù)集包含15個(gè)4數(shù)據(jù),3個(gè)類別,如下表:表9-1

多分類數(shù)據(jù)集123456789101112131415屬性1123451233523433屬性2233550112311243屬性3121241221322115屬性4413361233431334類別11111222223333347

9.2.2實(shí)現(xiàn)及參數(shù)參考程序如下:importnumpyasnpfromsklearn.discriminant_analysisimportLinearDiscriminantAnalysisX_1=np.array([[1,2,1,4],[2,3,2,1],[3,3,1,3],[4,5,2,3],[5,5,4,6]])X_2=np.array([[1,0,1,0],[2,1,2,2],[3,1,2,3],[3,2,1,2],[5,3,3,4]])48

9.2.2實(shí)現(xiàn)及參數(shù)X_3=np.array([[2,1,2,3],[3,1,2,1],[4,2,1,3],[3,4,1,3],[3,3,5,4]])X=np.vstack((X_1,X_2,X_3)) #將不同類別按列合并,得到整個(gè)樣本數(shù)據(jù)集y=np.array([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]) #輸入標(biāo)記clf=LinearDiscriminantAnalysis() #創(chuàng)建分類器實(shí)例clf_t=clf.fit(X,y) #訓(xùn)練模型X_n=clf_t.transform(X) #使用訓(xùn)練好的模型對(duì)樣本數(shù)據(jù)集進(jìn)行降維X_norm=np.linalg.norm(X_n,axis=0) #計(jì)算樣本范數(shù)X_t=X_n/X_norm #對(duì)降維后的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化print("降維后數(shù)據(jù)為:")print(X_t)49

9.2.2實(shí)現(xiàn)及參數(shù)[[0.309068370.17387208][0.215530690.04862416][0.161209660.23054429][0.394095240.06197435][0.27085943-0.44028753][-0.270001990.2161449][-0.17909925-0.02003108][-0.30557599-0.03659081][-0.091437440.22949509][-0.19916714-0.22172047][-0.14221117-0.0422167][-0.379352160.00778042][-0.217914180.21293536][0.376968670.25377911][0.05702726-0.67430318]]運(yùn)行結(jié)果:降維后數(shù)據(jù)為:稀疏編碼本節(jié)介紹稀疏編碼原理和實(shí)現(xiàn)及參數(shù)9.351

9.3.1算法原理稀疏編碼通過尋找數(shù)據(jù)的稀疏表示來描述數(shù)據(jù),將輸入數(shù)據(jù)表示為其潛在特征的線性組合,其中只有很少的特征起到主導(dǎo)作用,而其他特征的權(quán)重接近于零。這種表示方式能夠從數(shù)據(jù)中提取出最重要的特征,并且具有抗噪能力。稀疏編碼的思想與PCA類似,都是尋找一組新的向量來表示原數(shù)據(jù)。但稀疏編碼不是找到一組線性無關(guān)的基向量,稱為完備基向量(acompletesetofbasisvectors),而是要找到一組滿足一定要求的線性相關(guān)的向量組,稱為超完備基向量(anover-completesetofbasisvectors),也是要求得的“字典”。52

9.3.1算法原理

53

9.3.1算法原理

54

9.3.1算法原理

55

9.3.1算法原理

56

9.3.2實(shí)現(xiàn)及參數(shù)Scikit-learn模塊提供了稀疏編碼(字典學(xué)習(xí))算法,其函數(shù)原型如下:sklearn.decomposition.DictionaryLearning(n_components=None,alpha=1,eta=0.1,max_iter=1000,tol=1e-8,fit_algorithm='lars',transform_algorithm='lasso_lars',transform_alpha=1,verbose=False,random_state=None,n_jobs=None)57

9.3.2實(shí)現(xiàn)及參數(shù)其主要參數(shù)如下:1)n_components:字典中的基數(shù),即字典的列數(shù)(基的數(shù)量)。數(shù)據(jù)類型為整數(shù)或None,默認(rèn)值為None。如果設(shè)置為None,則字典的大小將自動(dòng)設(shè)定為輸入數(shù)據(jù)的列數(shù)。2)alpha:控制稀疏性的正則化參數(shù)。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為1.0。越大表示更稀疏(即更多的系數(shù)為零)??梢酝ㄟ^增大alpha來強(qiáng)制稀疏性。3)eta:控制更新字典時(shí)學(xué)習(xí)率的參數(shù)。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為0.1。eta越大,字典更新步伐越大。4)max_iter:迭代的最大次數(shù)。數(shù)據(jù)類型為整數(shù),默認(rèn)值為1000。在字典學(xué)習(xí)過程中,如果超過最大迭代次數(shù)則停止。5)tol:收斂閾值,用于控制算法的停止標(biāo)準(zhǔn)。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為0.00000001。當(dāng)優(yōu)化的變化小于該閾值時(shí),算法停止。58

9.3.2實(shí)現(xiàn)及參數(shù)6)fit_algorithm:用于字典學(xué)習(xí)的算法選擇。數(shù)據(jù)類型為字符串,默認(rèn)值為lars。其可選值如下:lars:使用最小角回歸(LeastAngleRegression)法。該算法是一種線性模型估計(jì)方法,它逐步增加特征到模型中,每次添加時(shí)都確保當(dāng)前加入的特征與殘差的相關(guān)性最大。在字典學(xué)習(xí)中,LARS用于求解稀疏編碼問題。其優(yōu)點(diǎn)是精確度高,能夠找到最優(yōu)解。對(duì)于某些特定的數(shù)據(jù)分布,如高斯噪聲下的線性模型,LARS具有理論上的優(yōu)越性。但是因?yàn)樗腔诰仃囘\(yùn)算的方法,所以計(jì)算復(fù)雜度較高,需要較多的內(nèi)存資源,尤其是對(duì)于大規(guī)模數(shù)據(jù)集或高維數(shù)據(jù)。'cd':使用坐標(biāo)下降法(CoordinateDescent)。該算法通過依次最小化每個(gè)變量來更新整個(gè)向量。它每一步只改變一個(gè)變量,而保持其他變量固定,直到收斂。因?yàn)椴恍枰鎯?chǔ)大型矩陣,所以它的計(jì)算效率高、內(nèi)存占用少,特別適合處理大規(guī)模數(shù)據(jù)集。但是其收斂速度可能較慢,特別是在處理非凸問題時(shí)。而且該算法對(duì)初始點(diǎn)敏感,不同的初始化可能導(dǎo)致不同的解。59

9.3.2實(shí)現(xiàn)及參數(shù)7)transform_algorithm:用于稀疏編碼的算法選擇。數(shù)據(jù)類型為字符串,默認(rèn)值為lasso_lars。其可選值如下:lasso_lars:使用最小角回歸法(LARS)進(jìn)行稀疏編碼。lasso_cd:使用坐標(biāo)下降法(CoordinateDescent)進(jìn)行稀疏編碼。omp:使用正交匹配追蹤法(OrthogonalMatchingPursuit)進(jìn)行稀疏編碼。這是一種貪婪算法,它逐個(gè)選擇最相關(guān)的基向量,直到滿足停止條件。該算法簡(jiǎn)單且直觀、易于實(shí)現(xiàn),對(duì)于稀疏編碼效果較好。但是不保證全局最優(yōu)解,尤其是在處理非稀疏數(shù)據(jù)時(shí)。當(dāng)需要更高精度時(shí),計(jì)算成本會(huì)增加。threshold:簡(jiǎn)單的閾值化方法,直接對(duì)權(quán)重進(jìn)行截?cái)啵陀谠O(shè)定閾值的權(quán)重被設(shè)為零。該方法最為簡(jiǎn)單快速,對(duì)于非常稀疏的數(shù)據(jù),可以提供足夠好的近似解。但是精度較低,通常不能達(dá)到與其他方法相同的性能水平。不適用于復(fù)雜的結(jié)構(gòu)化數(shù)據(jù)。60

9.3.2實(shí)現(xiàn)及參數(shù)8)transform_alpha:控制稀疏性正則化參數(shù),和alpha類似,作用于transform_algorithm中的稀疏編碼過程。數(shù)據(jù)類型為浮點(diǎn)數(shù),默認(rèn)值為1.0。9)verbose:是否打印出調(diào)試信息。數(shù)據(jù)類型為布爾值,默認(rèn)值為False。如果設(shè)置為True,在訓(xùn)練過程中會(huì)輸出詳細(xì)的日志。10)random_state:隨機(jī)數(shù)生成器的種子。數(shù)據(jù)類型為整型,默認(rèn)值為None,即使用當(dāng)前系統(tǒng)時(shí)間作為種子,每次隨機(jī)結(jié)果不同。11)n_jobs:用于并行計(jì)算的線程數(shù)。數(shù)據(jù)類型為整型,默認(rèn)值為1。如果值為-1,則并行工作的數(shù)量被設(shè)置為CPU核的數(shù)量。61

9.3.2實(shí)現(xiàn)及參數(shù)其主要屬性為:1)components_:學(xué)習(xí)到的字典矩陣。2)error_:每次迭代后的重建誤差。其主要方法為:1)fit(X):擬合字典學(xué)習(xí)模型,返回訓(xùn)練后的模型。2)transform(X):使用學(xué)習(xí)到的字典對(duì)數(shù)據(jù)進(jìn)行稀疏編碼(即生成稀疏系數(shù)矩陣)。返回稀疏系數(shù)矩陣。3)fit_transform(X):同時(shí)執(zhí)行擬合和轉(zhuǎn)換步驟,即先擬合字典模型,再生成稀疏編碼。返回稀疏系數(shù)矩陣。4)get_params():獲取模型的超參數(shù),返回模型的所有參數(shù)和它們的值(字典形式)。5)**set_params(params):設(shè)置模型的超參數(shù),返回更新后的模型。62

9.3.2實(shí)現(xiàn)及參數(shù)【例9-4】隨機(jī)生成一組包含10個(gè)4維數(shù)據(jù)的數(shù)據(jù)集,實(shí)現(xiàn)稀疏編碼。參考程序如下:fromsklearn.decompositionimportDictionaryLearningimportnumpyasnpX=np.random.rand(10,4) #創(chuàng)建一個(gè)10x4的隨機(jī)矩陣作為示例數(shù)據(jù)print("原數(shù)據(jù)集:\n",X) #輸出原始數(shù)據(jù)集,查看其內(nèi)容dict_learn=DictionaryLearning(n_components=5,alpha=1,max_iter=500) #創(chuàng)建字典學(xué)習(xí)模型dict_learn.fit(X) #訓(xùn)練字典學(xué)習(xí)模型,學(xué)習(xí)得到字典和稀疏編碼dictionary=dict_ponents_ #獲取學(xué)習(xí)到的字典矩陣sparse_codes=dict_learn.transform(X) #獲取數(shù)據(jù)X的稀疏表示print("學(xué)得字典:\n",dictionary)print("稀疏編碼:\n",sparse_codes)63

9.3.2實(shí)現(xiàn)及參數(shù)程序運(yùn)行結(jié)果如下:原數(shù)據(jù)集:[[0.153064910.996448360.512302420.26532487][0.293187410.360976960.593979790.29005951][0.21977060.708505960.680293090.70258418][0.35434640.066152510.540375970.73572466][0.510205170.310226340.74466510.72504005][0.141261370.905408030.809079220.64176848][0.024437910.319309190.097313740.93033058][0.967817210.727271320.833599780.12401786][0.373256320.477743540.917777720.48550216][0.893278790.984027410.361604470.92611188]]64

9.3.2實(shí)現(xiàn)及參數(shù)學(xué)得字典:[[-0.53820785-0.59288464-0.21786968-0.55799006][-0.32742366-0.678739590.634089080.1733129][-0.13177688-0.85786383-0.44105218-0.22842389][-0.20119394-0.55484988-0.62725848-0.5081431][-0.65611141-0.49303836-0.56512152-0.08407531]]65

9.3.2實(shí)現(xiàn)及參數(shù)稀疏編碼:[[0.0.-1.161546070.0.][0.0.0.-0.779246150.][0.0.0.-1.221063870.][0.0.0.-0.820805880.][0.0.0.-1.110300830.][0.0.0.-1.364398490.][-0.742783120.0.0.0.][0.0.0.0.-1.4750806][0.0.0.-1.162561280.][-1.659728280.0.0.0.]]案例-高光譜圖像降維9.467

9.4案例-高光譜圖像降維本案例使用三種降維方法對(duì)IndianPines數(shù)據(jù)集進(jìn)行降維,進(jìn)一步加深對(duì)降維算法的認(rèn)識(shí)。參考程序如下:importscipy.ioimportnumpyasnpfromsklearn.model_selectionimporttrain_test_splitfromsklearn.decompositionimportPCA,DictionaryLearningfromsklearn.discriminant_analysisimportLinearDiscriminantAnalysisasLDAfromsklearn.preprocessingimportStandardScalerfromsklearn.svmimportSVCfromsklearn.metricsimportaccuracy_scoreimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3D#1.加載IndianPines數(shù)據(jù)集data=scipy.io.loadmat('Indian_pines.mat')68

9.4案例-高光譜圖像降維labels=scipy.io.loadmat('Indian_pines_gt.mat')#提取數(shù)據(jù)和標(biāo)簽X=data['indian_pines']y=labels['indian_pines_gt']#2.選取數(shù)據(jù)集為X[:25,:25,:15],即選擇前20x20的區(qū)域和前15個(gè)波段X=X[:25,:25,:15] #選擇前25x25像素區(qū)域和前15個(gè)波段n_samples=X.shape[0]*X.shape[1] #圖像的總像素?cái)?shù)n_features=X.shape[2] #每個(gè)像素的特征數(shù)(波段數(shù))X_reshaped=X.reshape(n_samples,n_features)#重塑為二維數(shù)組y_reshaped=y[:25,:25].reshape(-1) #直接展平為一維數(shù)組#3.數(shù)據(jù)標(biāo)準(zhǔn)化scaler=StandardScaler()69

9.4案例-高光譜圖像降維X_scaled=scaler.fit_transform(X_reshaped)#4.劃分訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_test=train_test_split(X_scaled,y_reshaped,test_size=0.3,random_state=42)#5.1)PCA降維pca=PCA(n_components=0.98) #選擇前3個(gè)主成分X_train_pca=pca.fit_transform(X_train)X_test_pca=pca.transform(X_test)#5.2)LDA降維#計(jì)算類別數(shù)n_classes=len(np.unique(y_train)) #獲取訓(xùn)練集中的類別數(shù)#在選擇LDA組件時(shí),確保n_components不大于min(n_features,n_classes-1)max_components=min(X_train.shape[1],n_classes-1)lda=LDA(n_components=max_components) #動(dòng)態(tài)選擇LDA成分X_train_lda=lda.fit_transform(X_train,y_train)70

9.4案例-高光譜圖像降維X_test_pca=pca.transform(X_test)#5.2)LDA降維#計(jì)算類別數(shù)n_classes=len(np.unique(y_train)) #獲取訓(xùn)練集中的類別數(shù)#在選擇LDA組件時(shí),確保n_components不大于min(n_features,n_classes-1)max_components=min(X_train.shape[1],n_classes-1)lda=LDA(n_components=max_components) #動(dòng)態(tài)選擇LDA成分X_train_lda=lda.fit_transform(X_train,y_train)X_test_lda=lda.transform(X_test)#5.3)字典學(xué)習(xí)降維dict_learner=DictionaryLearning(n_components=18,transform_algorithm='omp',alpha=2,max_iter=2000,random_state=42)X_train_dict=dict_learner.fit_transform(X_train)X_test_dict=dict_learner.transform(X_test)71

9.4案例-高光譜圖像降維#輸出標(biāo)準(zhǔn)化和降維后的數(shù)據(jù)形狀print("PCA降維后的訓(xùn)練集形狀:",X_train_pca.shape)print("LDA降維后的訓(xùn)練集形狀:",X_train_lda.shape)print("字典學(xué)習(xí)降維后的訓(xùn)練集形狀:",X_train_dict.shape)程序運(yùn)行結(jié)果如下:PCA降維后的訓(xùn)練集形狀:(437,5)LDA降維后的訓(xùn)練集形狀:(437,2)字典學(xué)習(xí)降維后的訓(xùn)練集形狀:(437,18)72

9.4案例-高光譜圖像降維下面使用支持向量機(jī)對(duì)數(shù)據(jù)進(jìn)行分類。svm=SVC(kernel='rbf',random_state=42)#6.1降維前的分類(使用原始數(shù)據(jù)進(jìn)行訓(xùn)練)svm.fit(X_train,y_train)y_pred_raw=svm.predict(X_test)accuracy_raw=accuracy_score(y_test,y_pred_raw)#6.2PCA降維后的分類svm.fit(X_train_pca,y_train)y_pred_pca=svm.predict(X_test_pca)accuracy_pca=accuracy_score(y_test,y_pred_pca)#6.3LDA降維后的分類svm.fit(X_train_lda,y_train)y_pred_lda=svm.predict(X_test_lda)accuracy_lda=accuracy_score(y_test,y_pred_lda)73

9.4案例-高光譜圖像降維#6.4字典學(xué)習(xí)降維后的分類svm.fit(X_train_dict,y_train)y_pred_dict=svm.predict(X_test_dict)accuracy_dict=accuracy_score(y_test,y_pred_dict)#7.總結(jié)三種方法的比較print("\n降維方法對(duì)比:")print(f"原始數(shù)據(jù)分類準(zhǔn)確率:{accuracy_raw*100:.2f}%")print(f"PCA降維分類準(zhǔn)確率:{accuracy_pca*100:.2f}%")print(f"LDA降維分類準(zhǔn)確率:{accuracy_lda*100:.2f}%")print(f"字典學(xué)習(xí)降維分類準(zhǔn)確率:{accuracy_dict*100:.2f}%")74

9.4案例-高光譜圖像降維程序運(yùn)行結(jié)果如下:降維方法對(duì)比:原始數(shù)據(jù)分類準(zhǔn)確率:72.87%PCA降維分類準(zhǔn)確率:72.34%LDA降維分類準(zhǔn)確率:77.13%字典學(xué)習(xí)降維分類準(zhǔn)確率:70.21%PCA和字典學(xué)習(xí)在一定程度上,會(huì)損失原有信息。75

9.4案例-高光譜圖像降維下面可視化降維結(jié)果:fig=plt.figure(figsize=(12,10))#8.0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論