機器學習 | 降維算法Part2

2021-02-20 醫學生之學習生信

機器學習(Machine Learning)是一門涉及多個領域的交叉學科,它涵蓋了計算機科學、統計學、概率論及最優化理論等多門學科的知識。目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。
今天推出機器學習系列筆記第8期,本期分享內容為:機器學習之降維算法Part2。(筆者使用的是Windows系統)

降維算法2.3 PCA中的SVD
2.3.1 PCA中的SVD哪裡來?

SVD有一種驚人的數學性質,即是它可以跳過數學神秘的宇宙,不計算協方差矩陣,直接找出一個新特徵向量組成的n維空間,而這個n維空間就是奇異值分解後的右矩陣V^T。該矩陣有著如下性質:

 

k就是n_components,是我們降維後希望得到的維度。若X為(m,n)的特徵矩陣,V^T就是結構為(n,n)的矩陣,取這個矩陣的前k行(進行切片),即將V轉換為結構為(k,n)的矩陣。而 降維後的特徵矩陣X_dr。這是說,奇異值分解可以不計算協方差矩陣等等結構複雜計算冗長的矩陣,就直接求出新特徵空間和降維後的特徵矩陣。

SVD在矩陣分解中的過程比PCA簡單快速,但是SVD的信息量衡量指標比較複雜,要理解」奇異值「遠不如理解」方差「來得容易,因此,sklearn將降維流程拆成了兩部分:一部分是計算特徵空間V,由奇異值分解完成,另一部分是映射數據和求解新特徵矩陣,由主成分分析完成,實現了用SVD的性質減少計算量,卻讓信息量的評估指標是方差,具體流程如下圖:

也就是說,可以把SVD當作PCA的一種求解方法,其實指的就是在矩陣分解時不使用PCA本身的特徵值分解,而使用奇異值分解來減少計算量。這種方法確實存在,但在sklearn中,矩陣U和Σ雖然會被計算出來(同樣也是一種比起PCA來說簡化非常多的數學過程,不產生協方差矩陣),但完全不會被用到,也無法調取查看或者使用,因此我們可以認為,U和Σ在fit過後就被遺棄了。奇異值分解追求的僅僅是V,只要有了V,就可以計算出降維後的特徵矩陣。在transform過程之後,fit中奇異值分解的結果除了V(k,n)以外,就會被捨棄,而V(k,n)會被保存在屬性components_ 當中,可以調用查看。

PCA(2).fit(X).components_

PCA(2).fit(X).components_.shape
#返回降維後的新特徵空間V(k,n),2行4列的二維數組

2.3.2 重要參數svd_solver 與 random_state

參數svd_solver是在降維過程中,用來控制矩陣分解的一些細節的參數。有四種模式可選:"auto", "full", "arpack","randomized",默認」auto"。

"auto":基於X.shapen_components的默認策略來選擇分解器:如果輸入數據的尺寸大於500x500且要提取的特徵數小於數據最小維度min(X.shape)的80%,啟用效率更高的」randomized「方法。否則,精確完整的SVD(參考「full」的情況)將被計算,截斷將會在矩陣被分解完成後有選擇地發生。

"full":從scipy.linalg.svd中調用標準的LAPACK分解器來生成精確完整的SVD,適合數據量比較適中,計算時間充足的情況,生成的精確完整的SVD的結構為: 

"arpack":從scipy.sparse.linalg.svds調用ARPACK分解器來運行截斷奇異值分解(SVD truncated),分解時就將特徵數量降到n_components中輸入的數值k,可以加快運算速度,適合特徵矩陣很大的時候,但一般用於特徵矩陣為稀疏矩陣的情況(稀疏矩陣:每一列都是由0和1組成,並且大部分都是0),此過程包含一定的隨機性。截斷後的SVD分解出的結構為:


 
"randomized":在"randomized"方法中,分解器會先生成多個隨機向量,然後一一去檢測這些隨機向量中是否有任何一個符合我們的分解需求,如果符合,就保留這個隨機向量,並基於這個隨機向量來構建後續的向量空間。這個方法已經被證明比"full"模式下計算快很多,並且還能夠保證模型運行效果。適合特徵矩陣巨大,計算量龐大的情況。

而參數random_state在參數svd_solver的值為"arpack" or "randomized"的時候生效,可以控制這兩種SVD模式中的隨機模式。通常我們就選用」auto「,不必對這個參數糾結太多。

2.3.3 重要屬性components_

通常來說,在新的特徵矩陣生成之前,我們無法知曉PCA都建立了怎樣的新特徵向量,新特徵矩陣生成之後也不具有可讀性,我們無法判斷新特徵矩陣的特徵是從原數據中的什麼特徵組合而來,新特徵雖然帶有原始數據的信息,卻已經不是原數據上代表著的含義了。

但是其實,在矩陣分解時,PCA是有目標的:在原有特徵的基礎上,找出能夠讓信息儘量聚集的新特徵向量。在sklearn使用的PCA和SVD聯合的降維方法中,這些新特徵向量組成的新特徵空間其實就是V(k,n)。當V(k,n)是數字時,我們無法判斷V(k,n)和原有的特徵究竟有著怎樣的數學聯繫。但是,如果原特徵矩陣是圖像,V(k,n)這個空間矩陣也可以被可視化的話,我們就可以通過兩張圖來比較,就可以看出新特徵空間究竟從原始數據裡提取了什麼重要的信息。

讓我們來看一個,人臉識別中屬性components_的運用。

1.導入需要的庫和模塊

from sklearn.datasets import fetch_lfw_people #7個人的人臉數據
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

2.實例化數據集,探索數據

faces = fetch_lfw_people(min_faces_per_person=60) #實例化

faces.data.shape
#行是樣本
#列是樣本相關的所有特徵
faces.images.shape
#返回(1277,62,47)
#1277是矩陣中圖像的個數
#62是每個圖像的特徵矩陣的行
#47是每個圖像的特徵矩陣的列
X = faces.data

3.看看圖像什麼樣?將原特徵矩陣進行可視化

#數據本身是圖像,和數據本身只是數字,使用的可視化方法不同

#創建畫布和子圖對象
fig, axes = plt.subplots(3,8 #3行8列24個子圖
                         ,figsize=(8,4)
                         ,subplot_kw = {"xticks":[],"yticks":[]} #不要顯示坐標軸
                        )

fig #畫好的畫布

axes 

#不難發現,axes中的一個對象對應fig中的一個空格
#我們希望,在每一個子圖對象中填充圖像(共24張圖),因此我們需要寫一個在子圖對象中遍歷的循環

#二維結構,可以有兩種循環方式,一種是使用索引,循環一次同時生成一列上的三個圖
#另一種是把數據拉成一維,循環一次只生成一個圖
#在這裡,究竟使用哪一種循環方式,是要看我們要畫的圖的信息,儲存在一個怎樣的結構裡#我們使用子圖對象.imshow 來將圖像填充到空白畫布上
#而imshow要求的數據格式必須是一個(m,n)格式的矩陣,即每個數據都是一張單獨的圖
#因此我們需要遍歷的是faces.images,其結構是(1277, 62, 47)
#要從一個數據集中取出24個圖,明顯是一次性的循環切片[i,:,:]來得便利
#因此我們要把axes的結構拉成一維來循環

axes.flat #降維成一維數組

[*axes.flat] #使用該方法查看惰性對象裡的內容

enumerate(axes.flat) #也是惰性對象,添加了索引

#填充圖像
for i, ax in enumerate(axes.flat):
    ax.imshow(faces.images[i,:,:]
              ,cmap="gray"#選擇色彩的模式
              )
#https://matplotlib.org/tutorials/colors/colormaps.html 查看顏色取值

4.建模降維,提取新特徵空間矩陣

#原本有2900維,我們現在來降到150維
pca = PCA(150).fit(X)

V = pca.components_ #V代表用來映射的新特徵向量空間

V.shape

5.將新特徵空間矩陣可視化

fig, axes = plt.subplots(3,8,figsize=(8,4),subplot_kw = {"xticks":[],"yticks":[]})
for i, ax in enumerate(axes.flat): #遍歷循環
    ax.imshow(V[i,:].reshape(62,47),cmap="gray") #reshape還原圖像

可以看出比起降維前的數據,新特徵空間可視化後的人臉非常模糊,這是因為原始數據還沒有被映射到特徵空間中。但是可以看出,整體比較亮的圖片,獲取的信息較多,整體比較暗的圖片,卻只能看見黑漆漆的一塊。在比較亮的圖片中,眼睛,鼻子,嘴巴,都相對清晰,臉的輪廓,頭髮之類的比較模糊。

這說明,新特徵空間裡的特徵向量們,大部分是"五官"和"亮度"相關的向量,所以新特徵向量上的信息肯定大部分是由原數據中和"五官"和"亮度"相關的特徵中提取出來的。

我們通過可視化新特徵空間V,解釋了一部分降維後的特徵:雖然顯示出來的數字看著不知所云,但畫出來的圖表示,這些特徵是和」五官「以及」亮度「有關的。這也再次證明了,PCA能夠將原始數據集中重要的數據進行聚集

2.4 重要接口inverse_transform

在sklearn中,我們通過讓原特徵矩陣X右乘新特徵空間矩陣V(k,n)來生成新特徵矩陣X_dr,那理論上來說。讓新特徵矩陣X_dr右乘V(k,n)的逆矩陣V_(k,n),就可以將新特徵矩陣X_dr還原為X。那sklearn是否這樣做了呢?讓我們來看看下面的案例。

2.4.1 迷你案例:用人臉識別看PCA降維後的信息保存量

1. 導入需要的庫和模塊

from sklearn.datasets import fetch_lfw_people #7個人的人臉數據
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

2.導入數據,探索數據

faces = fetch_lfw_people(min_faces_per_person=60)
faces.images.shape

faces.data.shape

X = faces.data

3. 建模降維,獲取降維後的特徵矩陣X_dr

pca = PCA(150) #實例化
X_dr = pca.fit_transform(X) #擬合+提取結果
X_dr.shape

4. 將降維後矩陣用inverse_transform返回原空間

X_inverse = pca.inverse_transform(X_dr)

X_inverse.shape
#期待X_inverse應該和原數據有相同的結果,如果相同,我們就說inverse_transform實現了降維過程的逆轉

5. 將特徵矩陣X和X_inverse可視化

fig, ax = plt.subplots(2,10,figsize=(10,2.5)
                       ,subplot_kw={"xticks":[],"yticks":[]}
                      )

#和2.3.3節中的案例一樣,我們需要對子圖對象進行遍歷的循環,來將圖像填入子圖中
#那在這裡,我們使用怎樣的循環?
#現在我們的ax中是2行10列,第一行是原數據,第二行是inverse_transform後返回的數據
#所以我們需要同時循環兩份數據,即一次循環畫一列上的兩張圖,而不是把ax拉平

for i in range(10):
    ax[0,i].imshow(faces.image[i,:,:],cmap="binary_r")
    ax[1,i].imshow(X_inverse[i].reshape(62,47),cmap="binary_r") #imshow只接受二維數組

可以明顯看出,這兩組數據可視化後,由降維後再通過inverse_transform轉換回原維度的數據畫出的圖像和原數據畫的圖像大致相似,但原數據的圖像明顯更加清晰。這說明,inverse_transform並沒有實現數據的完全逆轉。這是因為,在降維的時候,部分信息已經被捨棄了,X_dr中往往不會包含原數據100%的信息,所以在逆轉的時候,即便維度升高,原數據中已經被捨棄的信息也不可能再回來了。所以,降維不是完全可逆的

2.4.2 迷你案例:用PCA做噪音過濾

降維的目的之一就是希望拋棄掉對模型帶來負面影響的特徵,而帶有效信息的特徵的方差應該是遠大於噪音的,所以相比噪音,有效的特徵所帶的信息應該不會在PCA過程中被大量拋棄。

inverse_transform能夠在不恢復原始數據的情況下,將降維後的數據返回到原本的高維空間,即是說能夠實現」保證維度,但去掉方差很小特徵所帶的信息「。利用inverse_transform的這個性質,我們能夠實現噪音過濾。

1. 導入所需要的庫和模塊

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np

2. 導入數據,探索數據

digits = load_digits()

digits.data.shape
#(1797,64)

set(digits.target.tolist()) #去掉重複項查看標籤

3.定義畫圖函數

def plot_digits(data):
    #data的結構必須是(m,n),並且n要能夠被分成(8,8)這樣的結構
    fig, axes = plt.subplots(4,10,figsize=(10,4)
                             ,subplot_kw = {"xticks":[],"yticks":[]}
                            )
    for i, ax in enumerate(axes.flat):
        ax.imshow(data[i].reshape(8,8),cmap="binary")

plot_digits(digits.data)

4. 為數據加上噪音

import numpy as np

rng = np.random.RandomState(42)

#在指定的數據集中,隨機抽取服從正態分布的數據
#兩個參數,分別是指定的數據集,和抽取出來的正態分布的方差
noisy = rng.normal(digits.data,2)
#normal()從輸入的數據集中隨機抽取一個滿足正態分布的數據,2是方差的大小

plot_digits(noisy)

5.降維

pca = PCA(0.5,svd_solver="full").fit(noisy) #讓降維後的數據帶有50%的原始數據
X_dr = pca.transform(noisy)

X_dr.shape

6. 逆轉降維結果,實現降噪

without_noise = pca.inverse_transform(X_dr)

plot_digits(without_noise)

返回的圖片雖然不能達到像第一張圖清晰,但是已經達到了降噪效果。在現實生活中,收上來的數據就是帶有噪音的,此時我們就可以將它降維後再返回原有的數據結構,就相當於是在不調整維度的狀況下進行了噪音過濾,提取出最重要的特徵信息。

2.5 重要接口,參數和屬性總結

3 案例:PCA對手寫數字數據集的降維

1.導入需要的模塊和庫

from sklearn.decomposition import PCA
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

2.導入數據,探索數據

data = pd.read_csv(r"C:\work\learnbetter\micro-class\week 3 Preprocessing\digit recognizor.csv")

X = data.iloc[:,1:]
y = data.iloc[:,0]

X.shape
#(42000, 784)

3. 畫累計方差貢獻率曲線,找最佳降維後維度的範圍

pca_line = PCA().fit(X)
plt.figure(figsize=[20,5])
plt.plot(np.cumsum(pca_line.explained_variance_ratio_))
plt.xlabel("number of components after dimension reduction")
plt.ylabel("cumulative explained variance ratio")
plt.show()

可以看到從0開始,曲線一開始增長非常快,0-200之間有我們需要的取值。

4. 降維後維度的學習曲線,繼續縮小最佳維度的範圍

#======【TIME WARNING:2mins 30s】======#

score = []

for i in range(1,101,10):
    X_dr = PCA(i).fit_transform(X)
    once = cross_val_score(RFC(n_estimators=10,random_state=0)
                           ,X_dr,y,cv=5).mean()
    score.append(once)

plt.figure(figsize=[20,5])
plt.plot(range(1,101,10),score) #x取值,y取值
plt.show()

可以看到,在特徵數為10左右時,score已經達到90左右,可以大致判斷最佳取值在20附近。

5. 細化學習曲線,找出降維後的最佳維度

#======【TIME WARNING:2mins 30s】======#

score = []

for i in range(10,25):
    X_dr = PCA(i).fit_transform(X)
    once = cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
    score.append(once)

plt.figure(figsize=[20,5])
plt.plot(range(10,25),score)
plt.show()

大致判斷20-22之間可找到最高score對應的特徵數。

6. 導入找出的最佳維度進行降維,查看模型效果

X_dr = PCA(21).fit_transform(X)

#======【TIME WARNING:1mins 30s】======#
cross_val_score(RFC(n_estimators=10,random_state=0),X_dr,y,cv=5).mean()
#0.9165476190476192
cross_val_score(RFC(n_estimators=100,random_state=0),X_dr,y,cv=5).mean()
#0.9432380952380953
#對比不同n_estimators的分數差異,進行參數選擇

模型效果還好,但有沒有什麼辦法能夠進一步提高模型的表現呢?

7. 突發奇想,特徵數量已經不足原來的3%,換模型怎麼樣?

在之前的建模過程中,因為計算量太大,所以我們一直使用隨機森林,但事實上,我們知道KNN的效果比隨機森林更好,KNN在未調參的狀況下已經達到96%的準確率,而隨機森林在未調參前只能達到93%,這是模型本身的限制帶來的,這個數據使用KNN效果就是會更好。現在我們的特徵數量已經降到不足原來的3%,可以使用KNN了嗎?

#更換模型
from sklearn.neighbors import KNeighborsClassifier as KNN
cross_val_score(KNN(),X_dr,y,cv=5).mean() #k默認值為5
#0.9699761904761905

8. KNN的k值學習曲線

#======【TIME WARNING: 2mins 30s】======#

score = []

for i in range(10):
    X_dr = PCA(21).fit_transform(X)
    once = cross_val_score(KNN(i+1),X_dr,y,cv=5).mean()
    score.append(once)

plt.figure(figsize=[20,5])
plt.plot(range(10),score)
plt.show()

9.定下超參數後,模型效果如何,模型運行時間如何?

cross_val_score(KNN(4),X_dr,y,cv=5).mean()
#0.9686190476190475
#=======【TIME WARNING: 3mins】======#
#%%timelit
#cross_val_score(KNN(4),X_dr,y,cv=5).mean()

可以發現,原本785列的特徵被縮減到21列之後,用KNN跑出了目前位置這個數據集上最好的結果。再進行更細緻的調整,也許可以將KNN的效果調整到98%以上。PCA為我們提供了無限的可能——不用再因為數據量太龐大而被迫選擇更加複雜的模型。

相關焦點

  • 機器學習 | 降維算法Part1
    目前,機器學習在疾病的鑑別診斷,藥物的生產研究,臨床試驗研究,放射影像學等醫學領域已有十分廣泛的應用。今天推出機器學習系列筆記第7期,本期分享內容為:機器學習之降維算法Part1。(筆者使用的是Windows系統)降維算法1 概述1.1 什麼叫「維度」?
  • 機器學習算法一覽
    把問題解決思路和方法應用建議提前到這裡的想法也很簡單,希望能提前給大家一些小建議,對於某些容易出錯的地方也先給大家打個預防針,這樣在理解後續相應機器學習算法之後,使用起來也有一定的章法。2.機器學習算法簡述按照不同的分類標準,可以把機器學習的算法做不同的分類。
  • 圖解機器學習的常見算法
    確實,機器學習的各種套路確實不少,但是如果掌握了正確的路徑和方法,其實還是有跡可循的,這裡我推薦SAS的Li Hui的這篇博客,講述了如何選擇機器學習的各種方法。另外,Scikit-learn 也提供了一幅清晰的路線圖給大家選擇:其實機器學習的基本算法都很簡單,下面我們就利用二維數據和交互圖形來看看機器學習中的一些基本算法以及它們的原理。
  • sklearn與機器學習系列專題之降維(六)一文弄懂LLE特徵篩選&降維
    (2)LLE算法可以很好表達數據的內在流形結構,能夠保留數據的本質特徵,可以很好得保留原有數據特徵,這點在故障診斷中有重要的意義。(3)LLE算法本身參數的選擇很少,計算量較小,故能更好的進行特徵參數優化,這為故障檢測和故障診斷打下堅實的基礎。
  • t-SNE:可視化效果最好的降維算法
    降維1D,2D和3D數據可以可視化。但是在數據科學領域並不總是能夠處理一個小於或等於3維的數據集,我們肯定會遇到使用高維數據的情況。對於數據科學專業人員來說,有必要對工作數據進行可視化和深入了解,以便更好地完成工作,我們可以使用降維技術降維技術的另一個最受歡迎的用例是在訓練ML模型時降低計算複雜度。通過使用降維技術,數據集的大小已經縮小,與此同時,有關原始數據的信息也已應用於低維數據。因此,機器學習算法從輸入數據集中學習既簡單又省時。
  • Machine Learning:十大機器學習算法
    無監督學習算法 (Unsupervised Algorithms):這類算法沒有特定的目標輸出,算法將數據集分為不同的組。線性回歸算法 Linear Regression回歸分析(Regression Analysis)是統計學的數據分析方法,目的在於了解兩個或多個變量間是否相關、相關方向與強度,並建立數學模型以便觀察特定變量來預測其它變量的變化情況。線性回歸算法(Linear Regression)的建模過程就是使用數據點來尋找最佳擬合線。
  • 五分鐘了解機器學習十大算法
    本文為有志於成為數據科學家或對此感興趣的讀者們介紹最流行的機器學習算法。機器學習是該行業的一個創新且重要的領域。我們為機器學習程序選擇的算法類型,取決於我們想要實現的目標。現在,機器學習有很多算法。因此,如此多的算法,可能對於初學者來說,是相當不堪重負的。
  • 機器學習最主流的算法庫sklearn
    sklearn是機器學習研究人員的入門必選庫,也是機器學習算法工程師繞不過去的算法庫。本文主要介紹sklearn的主要功能、優缺點等。最後,以一個簡單的例子來告訴大家如何使用sklearn完成機器學習算法的研究和實踐。」scikit-learn是什麼?
  • FinHack筆記(30)-機器學習算法概要
    「回歸」既可以指算法也可以指問題,因此在指代的時候容易混淆。實際上,回歸就是一個過程而已。常用的回歸算法包括:普通最小二乘回歸(OLSR)線性回歸邏輯回歸逐步回歸多元自適應回歸樣條法(MARS)局部估計平滑散點圖(LOESS)2、基於實例的學習算法
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    機器學習解決的問題:分類,回歸,降維,聚類。其中有些算法適合多種問題,有些只適合解決一種問題,下面列出一些常見的一些機器學習算法。梯度提升樹、xgboost分類&回歸&聚類:SVM降維:PCA1.2 學習機器學習的誤區在學習機器學習之前,有一些理解和誤區需要先做好說明,防止大家在學習機器學習的過程中過於鑽牛角尖
  • 通俗理解一個常用的降維算法(t-SNE)
    當我們想對高維數據集進行分類,但又不清楚這個數據集有沒有很好的可分性(同類之間間隔小、異類之間間隔大)時,可以通過降維算法將數據投影到二維或三維空間中。很久以前,就有人提出一種降維算法,主成分分析(PCA) 降維法,中間其他的降維算法陸續出現,比如 多維縮放(MDS),線性判別分析(LDA),等度量映射(Isomap)。
  • sklearn與機器學習系列專題之降維(五)一文弄懂Isomap特徵篩選&降維
    等度量映射(Isometric Feature Mapping,Isomap)是流形學習的一種,用於非線性數據降維,是一種無監督算法
  • sklearn與機器學習系列專題之降維(七)一文弄懂t-SNE特徵篩選&降維
    t-SNE算法由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出,主要的降維思想也是減少數據集的維數,並保持內部關係。t-SNE 算法對每個數據點近鄰的分布進行建模,其中近鄰是指相互靠近數據點的集合。
  • 無監督機器學習算法:主成分分析
    之前我們曾經講過,無監督學習是一種不使用標記數據(無目標變量)的機器學習。因此,算法的任務是在數據本身中尋找模式。無監督機器學習算法的兩種主要類型分別是使用主成分分析的降維算法和聚類算法(包括K-Means和層次聚類算法)。下面將依次介紹這些內容。
  • 機器學習算法之有監督學習和無監督學習的區別
    在生活中,我們應用的很多東西其實都使用的是機器學習算法,例如我們使用的好多APP,包括AI助手、web搜索、手機翻譯等,現在你手機社交媒體新聞的推薦由機器學習算法提供支持,你在視頻網站上推薦的視頻、影視劇也是機器學習模型的結果,你現在聽歌軟體的每日歌曲推薦也是利用機器學習算法的強大功能來創建推薦你喜歡的歌曲列表等等,但是機器學習有許多不同的風格的應用。
  • 一步步教你輕鬆學主成分分析PCA降維算法
    1 數據降維1.1 預備知識1.2 什麼是降維降維是對數據高維度特徵的一種預處理方法。降維是將高維度的數據保留下最重要的一些特徵,去除噪聲和不重要的特徵,從而實現提升數據處理速度的目的。在實際的生產和應用中,降維在一定的信息損失範圍內,可以為我們節省大量的時間和成本。降維也成為了應用非常廣泛的數據預處理方法。
  • sklearn與機器學習系列專題之降維(二)一文弄懂LDA特徵篩選&降維
    這是機器學習中最為常用的降維方法,能降低算法的計算開銷,使得數據集更容易處理,且完全無參數的限制。但是,如果用戶對觀測對象有一定的先驗知識,掌握了數據的一些特徵,卻很難按照預想的方法對處理過程進行幹預,可能達不到預期的效果,在非高斯分布的情況下,PCA方法得出的主元可能也並不是最優的。
  • 四大機器學習降維算法:PCA、LDA、LLE、Laplacian Eigenmaps
    機器學習領域中所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。
  • 比PCA降維更高級——(R/Python)t-SNE聚類算法實踐指南
    關於PCA  現實中大多數人會使用PCA進行降維和可視化,但為什麼不選擇比PCA更先進的東西呢?關於PCA的介紹可以閱讀該文獻。本文講解比PCA(1933)更有效的算法t-SNE(2008)。本文內容1 什麼是t-SNE?2 什麼是降維?
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    Scikit learn 也簡稱 sklearn, 是機器學習領域當中最知名的 python 模塊之一.Sklearn 包含了很多種機器學習的方式:· Classification 分類· Regression 回歸· Clustering 非監督分類· Dimensionality reduction 數據降維· Model Selection 模型選擇· Preprocessing 數據預處理