成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

機器學(xué)習(xí)中的十種非線性降維技術(shù)對比總結(jié)

人工智能 機器學(xué)習(xí)
降維意味著我們在不丟失太多信息的情況下減少數(shù)據(jù)集中的特征數(shù)量,降維算法屬于無監(jiān)督學(xué)習(xí)的范疇,用未標(biāo)記的數(shù)據(jù)訓(xùn)練算法。

降維意味著我們在不丟失太多信息的情況下減少數(shù)據(jù)集中的特征數(shù)量,降維算法屬于無監(jiān)督學(xué)習(xí)的范疇,用未標(biāo)記的數(shù)據(jù)訓(xùn)練算法。

盡管降維方法種類繁多,但它們都可以歸為兩大類:線性和非線性。

線性方法將數(shù)據(jù)從高維空間線性投影到低維空間(因此稱為線性投影)。例子包括PCA和LDA。

非線性方法提供了一種執(zhí)行非線性降維(NLDR)的方法。我們經(jīng)常使用NLDR來發(fā)現(xiàn)原始數(shù)據(jù)的非線性結(jié)構(gòu)。當(dāng)原始數(shù)據(jù)不可線性分離時,NLDR很有用。在某些情況下,非線性降維也被稱為流形學(xué)習(xí)。

本文整理了10個常用的非線性降維技術(shù),可以幫助你在日常工作中進行選擇

1、核PCA

你們可能熟悉正常的PCA,這是一種線性降維技術(shù)。核PCA可以看作是正態(tài)主成分分析的非線性版本。

常規(guī)主成分分析和核主成分分析都可以進行降維。但是核PCA能很好地處理線性不可分割的數(shù)據(jù)。因此,核PCA算法的主要用途是使線性不可分的數(shù)據(jù)線性可分,同時降低數(shù)據(jù)的維數(shù)!

我們先創(chuàng)建一個非常經(jīng)典的數(shù)據(jù):

import matplotlib.pyplot as plt
 plt.figure(figsize=[7, 5])
 
 from sklearn.datasets import make_moons
 X, y = make_moons(n_samples=100, noise=None, 
                  random_state=0)
 
 plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='plasma')
 plt.title('Linearly inseparable data')

這兩種顏色代表線性上不可分割的兩類。我們不可能在這里畫一條直線把這兩類分開。

我們先使用常規(guī)PCA。

 import numpy as np
 from sklearn.decomposition import PCA
 
 pca = PCA(n_components=1)
 X_pca = pca.fit_transform(X)
 
 plt.figure(figsize=[7, 5])
 plt.scatter(X_pca[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after linear PCA')
 plt.xlabel('PC1')

可以看到,這兩個類仍然是線性不可分割的,現(xiàn)在我們試試核PCA。

 import numpy as np
 from sklearn.decomposition import KernelPCA
 
 kpca = KernelPCA(n_components=1, kernel='rbf', gamma=15)
 X_kpca = kpca.fit_transform(X)
 
 plt.figure(figsize=[7, 5])
 plt.scatter(X_kpca[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.axvline(x=0.0, linestyle='dashed', color='black', linewidth=1.2)
 plt.title('First component after kernel PCA')
 plt.xlabel('PC1')

這兩個類變成了線性可分的,核PCA算法使用不同的核將數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式。核PCA是一個兩步的過程。首先核函數(shù)暫時將原始數(shù)據(jù)投影到高維空間中,在高維空間中,類是線性可分的。然后算法將該數(shù)據(jù)投影回n_components超參數(shù)(我們想要保留的維數(shù))中指定的較低維度。

sklearn中有四個核選項:linear’, ‘poly’, ‘rbf’ and ‘sigmoid’。如果我們將核指定為“線性”,則將執(zhí)行正常的PCA。任何其他核將執(zhí)行非線性PCA。rbf(徑向基函數(shù))核是最常用的。

2、多維尺度變換(multidimensional scaling, MDS)

多維尺度變換是另一種非線性降維技術(shù),它通過保持高維和低維數(shù)據(jù)點之間的距離來執(zhí)行降維。例如,原始維度中距離較近的點在低維形式中也顯得更近。

要在Scikit-learn我們可以使用MDS()類。

 from sklearn.manifold import MDS
 
 mds = MDS(n_components, metric)
 mds_transformed = mds.fit_transform(X)

metric 超參數(shù)區(qū)分了兩種類型的MDS算法:metric和non-metric。如果metric=True,則執(zhí)行metric MDS。否則,執(zhí)行non-metric MDS。

我們將兩種類型的MDS算法應(yīng)用于以下非線性數(shù)據(jù)。

 import numpy as np
 from sklearn.manifold import MDS
 
 mds = MDS(n_components=1, metric=True) # Metric MDS
 X_mds = mds.fit_transform(X)
 
 plt.figure(figsize=[7, 5])
 plt.scatter(X_mds[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('Metric MDS')
 plt.xlabel('Component 1')

 import numpy as np
 from sklearn.manifold import MDS
 
 mds = MDS(n_components=1, metric=False) # Non-metric MDS
 X_mds = mds.fit_transform(X)
 
 plt.figure(figsize=[7, 5])
 plt.scatter(X_mds[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('Non-metric MDS')
 plt.xlabel('Component 1')

可以看到MDS后都不能使數(shù)據(jù)線性可分,所以可以說MDS不適合我們這個經(jīng)典的數(shù)據(jù)集。

3、Isomap

Isomap(Isometric Mapping)在保持?jǐn)?shù)據(jù)點之間的地理距離,即在原始高維空間中的測地線距離或者近似的測地線距離,在低維空間中也被保持。Isomap的基本思想是通過在高維空間中計算數(shù)據(jù)點之間的測地線距離(通過最短路徑算法,比如Dijkstra算法),然后在低維空間中保持這些距離來進行降維。在這個過程中,Isomap利用了流形假設(shè),即假設(shè)高維數(shù)據(jù)分布在一個低維流形上。因此,Isomap通常在處理非線性數(shù)據(jù)集時表現(xiàn)良好,尤其是當(dāng)數(shù)據(jù)集包含曲線和流形結(jié)構(gòu)時。

 import matplotlib.pyplot as plt
 plt.figure(figsize=[7, 5])
 
 from sklearn.datasets import make_moons
 X, y = make_moons(n_samples=100, noise=None, 
                  random_state=0)
 
 import numpy as np
 from sklearn.manifold import Isomap
 
 isomap = Isomap(n_neighbors=5, n_components=1)
 X_isomap = isomap.fit_transform(X)
 
 plt.figure(figsize=[7, 5])
 plt.scatter(X_isomap[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying Isomap')
 plt.xlabel('Component 1')

就像核PCA一樣,這兩個類在應(yīng)用Isomap后是線性可分的!

4、Locally Linear Embedding(LLE)

與Isomap類似,LLE也是基于流形假設(shè),即假設(shè)高維數(shù)據(jù)分布在一個低維流形上。LLE的主要思想是在局部鄰域內(nèi)保持?jǐn)?shù)據(jù)點之間的線性關(guān)系,并在低維空間中重構(gòu)這些關(guān)系。

 from sklearn.manifold import LocallyLinearEmbedding
 lle = LocallyLinearEmbedding(n_neighbors=5,n_components=1)
 lle_transformed = lle.fit_transform(X)
 plt.figure(figsize=[7, 5])
 plt.scatter(lle_transformed[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying LocallyLinearEmbedding')
 plt.xlabel('Component 1')

只有2個點,其實并不是這樣,我們打印下這個數(shù)據(jù)

可以看到數(shù)據(jù)通過降維變成了同一個數(shù)字,所以LLE降維后是線性可分的,但是卻丟失了數(shù)據(jù)的信息。

5、Spectral Embedding

Spectral Embedding是一種基于圖論和譜理論的降維技術(shù),通常用于將高維數(shù)據(jù)映射到低維空間。它的核心思想是利用數(shù)據(jù)的相似性結(jié)構(gòu),將數(shù)據(jù)點表示為圖的節(jié)點,并通過圖的譜分解來獲取低維表示。

 from sklearn.manifold import SpectralEmbedding
 sp_emb = SpectralEmbedding(n_components=1, affinity='nearest_neighbors')
 sp_emb_transformed = sp_emb.fit_transform(X)
 plt.figure(figsize=[7, 5])
 plt.scatter(sp_emb_transformed[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying SpectralEmbedding')
 plt.xlabel('Component 1')

6、t-Distributed Stochastic Neighbor Embedding (t-SNE)

t-SNE的主要目標(biāo)是保持?jǐn)?shù)據(jù)點之間的局部相似性關(guān)系,并在低維空間中保持這些關(guān)系,同時試圖保持全局結(jié)構(gòu)。

from sklearn.manifold import TSNE
 tsne = TSNE(1, learning_rate='auto', init='pca')
 tsne_transformed = tsne.fit_transform(X)
 plt.figure(figsize=[7, 5])
 plt.scatter(tsne_transformed[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying TSNE')
 plt.xlabel('Component 1')

t-SNE好像也不太適合我們的數(shù)據(jù)。

7、Random Trees Embedding

Random Trees Embedding是一種基于樹的降維技術(shù),常用于將高維數(shù)據(jù)映射到低維空間。它利用了隨機森林(Random Forest)的思想,通過構(gòu)建多棵隨機決策樹來實現(xiàn)降維。

Random Trees Embedding的基本工作流程:

  • 構(gòu)建隨機決策樹集合:首先,構(gòu)建多棵隨機決策樹。每棵樹都是通過從原始數(shù)據(jù)中隨機選擇子集進行訓(xùn)練的,這樣可以減少過擬合,提高泛化能力。
  • 提取特征表示:對于每個數(shù)據(jù)點,通過將其在每棵樹上的葉子節(jié)點的索引作為特征,構(gòu)建一個特征向量。每個葉子節(jié)點都代表了數(shù)據(jù)點在樹的某個分支上的位置。
  • 降維:通過隨機森林中所有樹生成的特征向量,將數(shù)據(jù)點映射到低維空間中。通常使用降維技術(shù),如主成分分析(PCA)或t-SNE等,來實現(xiàn)最終的降維過程。

Random Trees Embedding的優(yōu)勢在于它的計算效率高,特別是對于大規(guī)模數(shù)據(jù)集。由于使用了隨機森林的思想,它能夠很好地處理高維數(shù)據(jù),并且不需要太多的調(diào)參過程。

RandomTreesEmbedding使用高維稀疏進行無監(jiān)督轉(zhuǎn)換,也就是說,我們最終得到的數(shù)據(jù)并不是一個連續(xù)的數(shù)值,而是稀疏的表示。所以這里就不進行代碼展示了,有興趣的看看sklearn的sklearn.ensemble.RandomTreesEmbedding

8、Dictionary Learning

Dictionary Learning是一種用于降維和特征提取的技術(shù),它主要用于處理高維數(shù)據(jù)。它的目標(biāo)是學(xué)習(xí)一個字典,該字典由一組原子(或基向量)組成,這些原子是數(shù)據(jù)的線性組合。通過學(xué)習(xí)這樣的字典,可以將高維數(shù)據(jù)表示為一個更緊湊的低維空間中的稀疏線性組合。

Dictionary Learning的優(yōu)點之一是它能夠?qū)W習(xí)出具有可解釋性的原子,這些原子可以提供關(guān)于數(shù)據(jù)結(jié)構(gòu)和特征的重要見解。此外,Dictionary Learning還可以產(chǎn)生稀疏表示,從而提供更緊湊的數(shù)據(jù)表示,有助于降低存儲成本和計算復(fù)雜度。

 from sklearn.decomposition import DictionaryLearning
 
 dict_lr = DictionaryLearning(n_components=1)
 dict_lr_transformed = dict_lr.fit_transform(X)
 plt.figure(figsize=[7, 5])
 plt.scatter(dict_lr_transformed[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying DictionaryLearning')
 plt.xlabel('Component 1')

9、Independent Component Analysis (ICA)

Independent Component Analysis (ICA) 是一種用于盲源分離的統(tǒng)計方法,通常用于從混合信號中估計原始信號。在機器學(xué)習(xí)和信號處理領(lǐng)域,ICA經(jīng)常用于解決以下問題:

  • 盲源分離:給定一組混合信號,其中每個信號是一組原始信號的線性組合,ICA的目標(biāo)是從混合信號中分離出原始信號,而不需要事先知道混合過程的具體細節(jié)。
  • 特征提取:ICA可以被用來發(fā)現(xiàn)數(shù)據(jù)中的獨立成分,提取數(shù)據(jù)的潛在結(jié)構(gòu)和特征,通常在降維或預(yù)處理過程中使用。

ICA的基本假設(shè)是,混合信號中的各個成分是相互獨立的,即它們的統(tǒng)計特性是獨立的。這與主成分分析(PCA)不同,PCA假設(shè)成分之間是正交的,而不是獨立的。因此ICA通常比PCA更適用于發(fā)現(xiàn)非高斯分布的獨立成分。

 from sklearn.decomposition import FastICA
 
 ica = FastICA(n_components=1, whiten='unit-variance')
 ica_transformed = dict_lr.fit_transform(X)
 plt.figure(figsize=[7, 5])
 plt.scatter(ica_transformed[:, 0], np.zeros((100,1)), c=y, s=50, cmap='plasma')
 plt.title('First component after applying FastICA')
 plt.xlabel('Component 1')

10、Autoencoders (AEs)

到目前為止,我們討論的NLDR技術(shù)屬于通用機器學(xué)習(xí)算法的范疇。而自編碼器是一種基于神經(jīng)網(wǎng)絡(luò)的NLDR技術(shù),可以很好地處理大型非線性數(shù)據(jù)。當(dāng)數(shù)據(jù)集較小時,自動編碼器的效果可能不是很好。

自編碼器我們已經(jīng)介紹過很多次了,所以這里就不詳細說明了。

總結(jié)

非線性降維技術(shù)是一類用于將高維數(shù)據(jù)映射到低維空間的方法,它們通常適用于數(shù)據(jù)具有非線性結(jié)構(gòu)的情況。

大多數(shù)NLDR方法基于最近鄰方法,該方法要求數(shù)據(jù)中所有特征的尺度相同,所以如果特征的尺度不同,還需要進行縮放。

另外這些非線性降維技術(shù)在不同的數(shù)據(jù)集和任務(wù)中可能表現(xiàn)出不同的性能,因此在選擇合適的方法時需要考慮數(shù)據(jù)的特征、降維的目標(biāo)以及計算資源等因素。

責(zé)任編輯:華軒 來源: DeepHub IMBA
相關(guān)推薦

2024-02-19 15:28:33

機器學(xué)習(xí)線性降維

2019-02-15 09:00:00

機器學(xué)習(xí)API人工智能

2017-10-20 23:14:21

2023-11-02 08:32:11

機器學(xué)習(xí)人工智能

2020-11-08 13:46:18

數(shù)據(jù)科學(xué)機器學(xué)習(xí)算法

2010-07-07 11:30:16

UML十種圖

2021-07-16 10:36:03

人工智能AI深度學(xué)習(xí)

2024-01-22 08:15:42

API協(xié)議設(shè)計

2017-10-24 12:17:42

2021-05-24 08:00:00

機器學(xué)習(xí)數(shù)據(jù)云計算

2021-08-02 18:04:25

機器學(xué)習(xí)數(shù)據(jù)集工具

2021-10-27 10:50:14

人工智能AI機器學(xué)習(xí)

2022-10-25 15:55:13

2022-09-25 23:34:42

算法回歸算法機器學(xué)習(xí)

2024-03-14 11:12:28

2011-05-25 13:29:20

數(shù)據(jù)庫備份

2020-08-16 20:36:21

滲透測試漏洞網(wǎng)絡(luò)攻擊

2020-03-17 12:00:06

人工智能數(shù)據(jù)科學(xué)新冠病毒

2021-03-22 09:00:00

IT人工智能技術(shù)

2023-12-06 09:27:09

人工智能區(qū)塊鏈
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线国产小视频 | 岛国av免费在线观看 | 色综合久久久 | 国产成人精品一区二区三区在线 | 日韩精品视频网 | 色爱av| 超碰97免费观看 | 午夜小视频在线观看 | 国产精品综合网 | 97精品国产97久久久久久免费 | 久久人人爽人人爽 | 一级片在线播放 | 午夜激情在线 | 91精品国产综合久久香蕉麻豆 | 欧美一区二区三区 | 成人精品鲁一区一区二区 | 欧美一区二区三区四区视频 | 亚洲国产精品一区二区久久 | 在线啊v| 亚洲人成网亚洲欧洲无码 | 九九热精品视频在线观看 | 欧美日韩一区二区在线播放 | 亚洲一区二区三区久久 | 最新免费黄色网址 | 99精品欧美一区二区三区综合在线 | 日韩在线欧美 | 欧美视频二区 | 成人精品鲁一区一区二区 | 欧美二区三区 | 91精品国产一区二区三区动漫 | 久久久久免费精品国产 | 国产九九av | 一级全黄少妇性色生活免费看 | 第一区在线观看免费国语入口 | 亚洲国产精品久久久久秋霞不卡 | 亚洲成人免费视频 | www.888www看片| 四虎永久免费黄色影片 | 日韩欧美在线免费观看 | 成人a网| 亚洲在线一区二区三区 |