日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[Hands On ML] 8. 降维

發(fā)布時(shí)間:2024/7/5 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Hands On ML] 8. 降维 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 降維方法
      • 1.1 投影
      • 1.2 流行學(xué)習(xí)
    • 2. 降維技術(shù)
      • 2.1 PCA
      • 2.2 增量PCA
      • 2.3 隨機(jī)PCA
      • 2.4 核PCA
      • 2.5. 調(diào)參
      • 2.6 LLE
      • 2.7 其他方法

本文為《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn和TensorFlow》的讀書筆記。
中文翻譯參考

  • 特征維度太大,降維加速訓(xùn)練
  • 能篩掉一些噪聲和不必要的細(xì)節(jié)

更高維度的實(shí)例之間彼此距離可能越遠(yuǎn),空間分布很大概率是稀疏的

1. 降維方法

1.1 投影


上圖,三維空間中的點(diǎn),都近似在灰色平面附近,可以投影到其上

  • 投影并不總是最佳的方法

1.2 流行學(xué)習(xí)

Manifold Learning
假設(shè):在流形的較低維空間中表示,它們會(huì)變得更簡(jiǎn)單(并不總是成立)

  • 是否流行學(xué)習(xí)會(huì)更好,取決于數(shù)據(jù)集
  • 第一行的情況,展開后更好分類,第二行的則,直接一個(gè)面分類更簡(jiǎn)單

2. 降維技術(shù)

2.1 PCA

《統(tǒng)計(jì)學(xué)習(xí)方法》主成分分析(Principal Component Analysis,PCA)筆記

目前為止最流行的降維算法

  • 首先它找到接近數(shù)據(jù)集分布的超平面
  • 然后將所有的數(shù)據(jù)都投影到這個(gè)超平面上

  • 將數(shù)據(jù)投影到方差最大的軸(損失更少的信息)
  • 或者理解為,點(diǎn)到該軸的均方距離最小

矩陣的 SVD分解 可以幫助找到主成分

X_centered=X-X.mean(axis=0) U,s,V=np.linalg.svd(X_centered) c1=V.T[:,0] c2=V.T[:,1]
  • sklearn 的 PCA 類使用 SVD 分解實(shí)現(xiàn)
from sklearn.decomposition import PCA pca=PCA(n_components=2) X2D=pca.fit_transform(X)
  • 用components_訪問每一個(gè)主成分(它返回水平向量的矩陣,如果我們想要獲得第一個(gè)主成分則可以寫成pca.components_.T[:,0])

  • 方差解釋率(Explained Variance Ratio),它表示位于每個(gè)主成分軸上的數(shù)據(jù)集方差的比例

print(pca.explained_variance_ratio_) array([0.84248607, 0.14631839]) 看出第二個(gè)軸上的比例為14.6%
  • 選擇方差解釋率占比達(dá)到足夠(例如95%)的維度即可
pca=PCA() pac.fit(X) cumsum=np.cumsum(pca.explained_variance_ratio_) d=np.argmax(cumsum>=0.95)+1 d為選取的主成分個(gè)數(shù)pca=PCA(n_components=0.95) 設(shè)置為小數(shù),表明保留的方差解釋率為0.95 X_reduced=pca.fit_transform(X)

2.2 增量PCA

對(duì)大型數(shù)據(jù)集友好,可在線使用

from sklearn.decomposition import IncrementalPCAn_batches=100 inc_pca=IncrementalPCA(n_components=154) for X_batch in np.array_split(X_mnist,n_batches):inc_pca.partial_fit(X_batch) X_mnist_reduced=inc_pca.transform(X_mnist)

注意:array_split()將數(shù)據(jù)分開,partial_fit(),部分 fit

X_mm=np.memmap(filename,dtype='float32',mode='readonly',shape=(m,n)) batch_size=m//n_batches inc_pca=IncrementalPCA(n_components=154,batch_size=batch_size) inc_pca.fit(X_mm)

使用np.memmap方法,就好像文件完全在內(nèi)存中一樣,后面可跟fit

2.3 隨機(jī)PCA

可以快速找到前 d 個(gè)主成分的近似值

  • 它的計(jì)算復(fù)雜度是O(m×d2)+O(d3)O(m × d^2) + O(d^3)O(m×d2)+O(d3),而不是O(m×n2)+O(n3)O(m × n^2) + O(n^3)O(m×n2)+O(n3),所以當(dāng) d 遠(yuǎn)小于 n 時(shí),它比之前的算法快得多
rnd_pca=PCA(n_components=154,svd_solver='randomized') X_reduced=rnd_pca.fit_transform(X_mnist)

2.4 核PCA

from sklearn.decomposition import KernelPCArbf_pca=KernelPCA(n_components=2,kernel='rbf',gamma=0.04) X_reduced=rbf_pca.fit_transform(X)

2.5. 調(diào)參

由于 kPCA 是無(wú)監(jiān)督學(xué)習(xí)算法,沒有明顯的性能指標(biāo)幫助選擇參數(shù)

  • 使用網(wǎng)格搜索來(lái)選擇最佳表現(xiàn)的核方法和超參數(shù)
from sklearn.model_selection import GridSearchCV from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipelineclf = Pipeline([("kpca", KernelPCA(n_components=2)),("log_reg", LogisticRegression()) ]) param_grid = [{"kpca__gamma": np.linspace(0.03, 0.05, 10),"kpca__kernel": ["rbf", "sigmoid"]}] grid_search = GridSearchCV(clf, param_grid, cv=3) grid_search.fit(X, y)

獲得最佳參數(shù)

print(grid_search.best_params_) {'kpca__gamma': 0.043333333333333335, 'kpca__kernel': 'rbf'}

還可以比較重構(gòu)后的數(shù)據(jù)跟原始數(shù)據(jù)的誤差來(lái)找最佳參數(shù)

rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.0433,fit_inverse_transform=True) X_reduced = rbf_pca.fit_transform(X) X_preimage = rbf_pca.inverse_transform(X_reduced) from sklearn.metrics import mean_squared_error mean_squared_error(X, X_preimage) 32.786308795766132

然后網(wǎng)格搜索最小誤差的 核方法 和 超參數(shù)

2.6 LLE

局部線性嵌入(Locally Linear Embedding)是另一種非常有效的非線性降維(NLDR)方法,是一種流形學(xué)習(xí)技術(shù)

  • 它特別擅長(zhǎng)展開扭曲的流形
from sklearn.manifold import LocallyLinearEmbeddinglle=LocallyLinearEmbedding(n_components=2,n_neighbors=10) X_reduced=lle.fit_transform(X)

這個(gè)算法在處理 大數(shù)據(jù)集 的時(shí)候 表現(xiàn) 較差

2.7 其他方法

  • 多維縮放(MDS)在嘗試保持實(shí)例之間距離的同時(shí)降低了維度
  • Isomap 通過將每個(gè)實(shí)例連接到最近的鄰居來(lái)創(chuàng)建圖形,然后在嘗試保持實(shí)例之間的測(cè)地距離時(shí)降低維度
  • t-分布隨機(jī)鄰域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE)可以用于降低維??度,同時(shí)試圖保持相似的實(shí)例臨近并將不相似的實(shí)例分開。
    它主要用于可視化,尤其是用于可視化高維空間中的實(shí)例(例如,可以將MNIST圖像降維到 2D 可視化)
  • 線性判別分析(Linear Discriminant Analysis,LDA)實(shí)際上是一種分類算法,但在訓(xùn)練過程中,它會(huì)學(xué)習(xí)類之間最有區(qū)別的軸,然后使用這些軸來(lái)定義用于投影數(shù)據(jù)的超平面
    LDA 的好處是投影會(huì)盡可能地保持各個(gè)類之間距離,所以在運(yùn)行另一種分類算法(如 SVM 分類器)之前,LDA 是很好的降維技術(shù)

總結(jié)

以上是生活随笔為你收集整理的[Hands On ML] 8. 降维的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。