自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

三個(gè)主要降維技術(shù)對比介紹:PCA, LCA,SVD

大數(shù)據(jù)
隨著數(shù)據(jù)集的規(guī)模和復(fù)雜性的增長,特征或維度的數(shù)量往往變得難以處理,導(dǎo)致計(jì)算需求增加,潛在的過擬合和模型可解釋性降低。降維技術(shù)提供了一種補(bǔ)救方法,它捕獲數(shù)據(jù)中的基本信息,同時(shí)丟棄冗余或信息較少的特征。

隨著數(shù)據(jù)集的規(guī)模和復(fù)雜性的增長,特征或維度的數(shù)量往往變得難以處理,導(dǎo)致計(jì)算需求增加,潛在的過擬合和模型可解釋性降低。降維技術(shù)提供了一種補(bǔ)救方法,它捕獲數(shù)據(jù)中的基本信息,同時(shí)丟棄冗余或信息較少的特征。這個(gè)過程不僅簡化了計(jì)算任務(wù),還有助于可視化數(shù)據(jù)趨勢,減輕維度詛咒的風(fēng)險(xiǎn),并提高機(jī)器學(xué)習(xí)模型的泛化性能。降維在各個(gè)領(lǐng)域都有應(yīng)用,從圖像和語音處理到金融和生物信息學(xué),在這些領(lǐng)域,從大量數(shù)據(jù)集中提取有意義的模式對于做出明智的決策和建立有效的預(yù)測模型至關(guān)重要。

本文將深入研究三種強(qiáng)大的降維技術(shù)——主成分分析(PCA)、線性判別分析(LDA)和奇異值分解(SVD)。我們不僅介紹這些方法的基本算法,而且提供各自的優(yōu)點(diǎn)和缺點(diǎn)。

主成分分析(PCA)

主成分分析(PCA)是一種廣泛應(yīng)用于數(shù)據(jù)分析和機(jī)器學(xué)習(xí)的降維技術(shù)。它的主要目標(biāo)是將高維數(shù)據(jù)轉(zhuǎn)換為低維表示,捕獲最重要的信息。

我們的目標(biāo)是識別數(shù)據(jù)集中的模式,所以希望數(shù)據(jù)分布在每個(gè)維度上,并且在這些維度之間是有獨(dú)立性的。方差作為可變性的度量標(biāo)準(zhǔn),本質(zhì)上量化了數(shù)據(jù)集分散的程度。用數(shù)學(xué)術(shù)語來說,它表示與平均的平均平方偏差。計(jì)算方差的公式用var(x)表示如下:

協(xié)方差量化了兩組有序數(shù)據(jù)中對應(yīng)元素相似的程度。用cov(x, y)表示變量x和y之間的協(xié)方差。xi表示第i維中x的值,而x柱和y柱表示它們各自的平均值。如果我們有一個(gè)維數(shù)為m*n的矩陣X,其中包含n個(gè)數(shù)據(jù)點(diǎn),每個(gè)數(shù)據(jù)點(diǎn)有m維,那么協(xié)方差矩陣可以計(jì)算如下:

協(xié)方差矩陣包括

  1. 以尺寸方差為主要對角線元素
  2. 維度的協(xié)方差作為非對角線元素

我們的目標(biāo)是確保數(shù)據(jù)廣泛分散,表明其維度之間的高方差,另外一個(gè)目標(biāo)是消除相關(guān)維度,這意味著維度之間的協(xié)方差應(yīng)為零(表明它們的線性無關(guān))。所以對數(shù)據(jù)進(jìn)行變換的目的是使其協(xié)方差矩陣具有以下特征:

  1. 作為主要對角線元素的顯著值。
  2. 零值作為非對角線元素。

所以必須對原始數(shù)據(jù)點(diǎn)進(jìn)行變換獲得類似于對角矩陣的協(xié)方差矩陣。將矩陣轉(zhuǎn)換成對角矩陣的過程稱為對角化,它構(gòu)成了主成分分析(PCA)背后的主要動機(jī)。

PCA的工作原理

1、標(biāo)準(zhǔn)化

當(dāng)特征以不同的單位度量時(shí),對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。這需要減去平均值,然后除以每個(gè)特征的標(biāo)準(zhǔn)差。對具有不同尺度特征的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化的失敗可能導(dǎo)致誤導(dǎo)性的成分。

2、計(jì)算協(xié)方差矩陣

如前面討論的那樣計(jì)算協(xié)方差矩陣

3、計(jì)算特征向量和特征值

確定協(xié)方差矩陣的特征向量和特征值。

特征向量表示方向(主成分),特征值表示這些方向上的方差大小。

4、特征值排序

對特征值按降序排序。與最高特征值相對應(yīng)的特征向量是捕獲數(shù)據(jù)中最大方差的主成分。

5、選擇主成分

根據(jù)需要解釋的方差選擇前k個(gè)特征向量(主成分)。一般情況下會設(shè)定閾值,保留總方差的很大一部分,例如85%。

6、轉(zhuǎn)換數(shù)據(jù)

我們可以用特征向量變換原始數(shù)據(jù):

如果我們有m維的n個(gè)數(shù)據(jù)點(diǎn)X: m*n

P: k*m

Y = PX: (k*m)(m*n) = (k*n)

新變換矩陣有n個(gè)數(shù)據(jù)點(diǎn),有k維。

優(yōu)點(diǎn)

降維:PCA有效地減少了特征的數(shù)量,這對遭受維數(shù)詛咒的模型是有益的。

特征獨(dú)立性:主成分是正交的(不相關(guān)的),這意味著它們捕獲獨(dú)立的信息,簡化了對約簡特征的解釋。

降噪:PCA可以通過專注于解釋數(shù)據(jù)中最顯著方差的成分來幫助減少噪聲。

可視化:降維數(shù)據(jù)可以可視化,有助于理解底層結(jié)構(gòu)和模式。

缺點(diǎn)

原始特征的可解釋性可能在變換后的空間中丟失,因?yàn)橹鞒煞质窃继卣鞯木€性組合。

PCA假設(shè)變量之間的關(guān)系是線性的,但并非在所有情況下都是如此。

PCA對特征的尺度比較敏感,因此常常需要標(biāo)準(zhǔn)化。

異常值可以顯著影響PCA的結(jié)果,因?yàn)樗鼈?cè)重于捕獲最大方差,這可能受到極值的影響。

何時(shí)使用

高維數(shù)據(jù):PCA在處理具有大量特征的數(shù)據(jù)集以減輕維度詛咒時(shí)特別有用。

共線的特點(diǎn):當(dāng)特征高度相關(guān)時(shí),PCA可以有效地捕獲共享信息并用更少的組件表示它。

可視化:它將數(shù)據(jù)投射到一個(gè)較低維度的空間,可以很容易地可視化。

線性關(guān)系:當(dāng)變量之間的關(guān)系大多是線性的,主成分分析是一個(gè)合適的技術(shù)。

Python代碼示例

import numpy as np
 from sklearn.decomposition import PCA
 from sklearn.preprocessing import StandardScaler
 from sklearn.model_selection import train_test_split
 from sklearn.datasets import load_iris
 
 # Load iris dataset as an example
 iris = load_iris()
 X = iris.data
 y = iris.target
 
 # Split the dataset into training and testing sets
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 # Standardize the data (important for PCA)
 scaler = StandardScaler()
 X_train_std = scaler.fit_transform(X_train)
 X_test_std = scaler.transform(X_test)
 
 # Apply PCA
 pca = PCA()
 X_train_pca = pca.fit_transform(X_train_std)
 
 # Calculate the cumulative explained variance
 cumulative_variance_ratio = np.cumsum(pca.explained_variance_ratio_)
 
 # Determine the number of components to keep for 85% variance explained
 n_components = np.argmax(cumulative_variance_ratio >= 0.85) + 1
 
 # Apply PCA with the selected number of components
 pca = PCA(n_compnotallow=n_components)
 X_train_pca = pca.fit_transform(X_train_std)
 X_test_pca = pca.transform(X_test_std)
 
 # Display the results
 print("Original Training Data Shape:", X_train.shape)
 print("Reduced Training Data Shape (PCA):", X_train_pca.shape)
 print("Number of Components Selected:", n_components)

上面代碼在最初應(yīng)用PCA()時(shí)沒有指定組件的數(shù)量,這意味著它將保留所有組件。然后使用np.cumsum(pca.explained_variance_ratio_)計(jì)算累計(jì)解釋方差。確定解釋至少85%方差所需的分量數(shù),并使用選定的分量數(shù)再次應(yīng)用PCA。請注意PCA只應(yīng)用于訓(xùn)練數(shù)據(jù),然后在測試數(shù)據(jù)應(yīng)用轉(zhuǎn)換方法即可。

線性判別分析(LDA)

線性判別分析(LDA)作為一種降維和分類技術(shù),目標(biāo)是優(yōu)化數(shù)據(jù)集中不同類別之間的區(qū)別。LDA在預(yù)先確定數(shù)據(jù)點(diǎn)類別的監(jiān)督學(xué)習(xí)場景中特別流行。PCA被認(rèn)為是一種“無監(jiān)督”算法,它忽略了類標(biāo)簽,專注于尋找主成分以最大化數(shù)據(jù)集方差,而LDA則采用“監(jiān)督”方法。LDA計(jì)算“線性判別器”,確定作為軸的方向,以最大限度地分離多個(gè)類。我們這里使用“Iris”數(shù)據(jù)集的示例來了解LDA是如何計(jì)算的。它包含了來自三個(gè)不同物種的150朵鳶尾花的尺寸。

Iris數(shù)據(jù)集中有三個(gè)類:

  • Iris-setosa (n=50)
  • Iris-versicolor (n=50)
  • Iris-virginica (n=50)

有四個(gè)特征:

  • sepal length in cm
  • sepal width in cm
  • petal length in cm
  • petal width in cm

LDA的工作步驟

1、計(jì)算三種不同花類的平均向量mi, (i=1,2,3):

Mean Vector class 1: [ 5.006 3.418 1.464 0.244]
 
 Mean Vector class 2: [ 5.936 2.77   4.26   1.326]
 
 Mean Vector class 3: [ 6.588 2.974 5.552 2.026]

每個(gè)向量包含特定類的數(shù)據(jù)集中4個(gè)特征的平均值。

2、計(jì)算類內(nèi)散點(diǎn)矩陣(Sw),它表示每個(gè)類內(nèi)數(shù)據(jù)的分布

結(jié)果如下:

within-class Scatter Matrix:
  [[ 38.9562 13.683   24.614   5.6556]
  [ 13.683   17.035   8.12     4.9132]
  [ 24.614   8.12   27.22     6.2536]
  [ 5.6556   4.9132   6.2536   6.1756]]

3、計(jì)算類間散點(diǎn)矩陣(Sb), Sb表示不同類之間的分布,公式如下:

結(jié)果如下:

between-class Scatter Matrix:
  [[ 63.2121 -19.534   165.1647   71.3631]
  [ -19.534   10.9776 -56.0552 -22.4924]
  [ 165.1647 -56.0552 436.6437 186.9081]
  [ 71.3631 -22.4924 186.9081   80.6041]]

4、計(jì)算Sw-1Sb的特征值和特征向量(類似于PCA)。在我們的例子中,有4個(gè)特征值和特征向量

Eigenvector 1:
 [[-0.2049]
  [-0.3871]
  [ 0.5465]
  [ 0.7138]]
 Eigenvalue 1: 3.23e+01
 
 Eigenvector 2:
 [[-0.009 ]
  [-0.589 ]
  [ 0.2543]
  [-0.767 ]]
 Eigenvalue 2: 2.78e-01
 
 Eigenvector 3:
 [[ 0.179 ]
  [-0.3178]
  [-0.3658]
  [ 0.6011]]
 Eigenvalue 3: -4.02e-17
 
 Eigenvector 4:
 [[ 0.179 ]
  [-0.3178]
  [-0.3658]
  [ 0.6011]]
 Eigenvalue 4: -4.02e-17

5、通過減少特征值對特征向量進(jìn)行排序,并選擇最上面的k。

通過減少特征值對特征對進(jìn)行排序后,基于2個(gè)信息量最大的特征對構(gòu)建d×k維度特征向量矩陣(稱之為W)。在下面的例子中,得到了下面的矩陣:

Matrix W:
  [[-0.2049 -0.009 ]
  [-0.3871 -0.589 ]
  [ 0.5465 0.2543]
  [ 0.7138 -0.767 ]]

6、使用矩陣W (4 × 2矩陣)通過方程將樣本轉(zhuǎn)換到新的子空間:Y = X*W,其中X是矩陣格式的原始數(shù)據(jù)(150 × 4矩陣),Y是轉(zhuǎn)換后的數(shù)據(jù)集(150 × 2矩陣)。

優(yōu)點(diǎn)

最大化類分離:LDA的目的是最大限度地分離不同的類,使其有效的分類任務(wù)。

降維:與PCA一樣,LDA也可用于降維,其優(yōu)點(diǎn)是考慮了類信息。

缺點(diǎn)

對異常值的敏感性:LDA對異常值非常敏感,異常值的存在會影響方法的性能。

正態(tài)性假設(shè):LDA假設(shè)每個(gè)類中的特征是正態(tài)分布的,如果違反了這個(gè)假設(shè),它可能無法很好地執(zhí)行。

需要足夠的數(shù)據(jù):LDA在每個(gè)類只有少量樣本的情況下可能表現(xiàn)不佳。擁有更多的樣本可以改善類參數(shù)的估計(jì)。

何時(shí)使用

分類任務(wù):當(dāng)目標(biāo)是將數(shù)據(jù)分類到預(yù)定義的類中時(shí),LDA是有益的。

保存類信息:當(dāng)目標(biāo)是在降低維數(shù)的同時(shí)保留與區(qū)分類相關(guān)的信息時(shí),LDA非常有用

正態(tài)性假設(shè)成立:當(dāng)類別內(nèi)的正態(tài)分布假設(shè)成立時(shí),LDA表現(xiàn)良好。

監(jiān)督降維:當(dāng)任務(wù)需要在類標(biāo)簽的指導(dǎo)下進(jìn)行降維時(shí),LDA是一個(gè)合適的選擇。

Python代碼示例

import numpy as np
 import pandas as pd
 from sklearn.model_selection import train_test_split
 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
 from sklearn.datasets import make_classification
 from sklearn.preprocessing import StandardScaler
 
 # Generate a sample dataset
 X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
 
 # Split the data into training and test sets
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 # Standardize the features (important for LDA)
 scaler = StandardScaler()
 X_train = scaler.fit_transform(X_train)
 X_test = scaler.transform(X_test)
 
 # Initialize LDA and fit on the training data
 lda = LinearDiscriminantAnalysis()
 X_train_lda = lda.fit_transform(X_train, y_train)
 
 # Calculate explained variance ratio for each component
 explained_variance_ratio = lda.explained_variance_ratio_
 
 # Calculate the cumulative explained variance
 cumulative_explained_variance = np.cumsum(explained_variance_ratio)
 
 # Find the number of components that explain at least 75% of the variance
 n_components = np.argmax(cumulative_explained_variance >= 0.75) + 1
 
 # Transform both the training and test data to the selected number of components
 X_train_lda_selected = lda.transform(X_train)[:, :n_components]
 X_test_lda_selected = lda.transform(X_test)[:, :n_components]
 
 # Print the number of components selected
 print(f"Number of components selected: {n_components}")

奇異值分解(SVD)

奇異值分解是一種矩陣分解技術(shù),廣泛應(yīng)用于線性代數(shù)、信號處理和機(jī)器學(xué)習(xí)等領(lǐng)域。它將一個(gè)矩陣分解成另外三個(gè)矩陣,原始矩陣以簡化形式表示。

SVD的工作步驟

1、矩陣分解

給定大小為M × n的矩陣M(或有M行n列的數(shù)據(jù)),奇異值分解將其分解為三個(gè)矩陣:M = u *Σ * v *

其中U是一個(gè)m × m正交矩陣,Σ是一個(gè)m × r對角矩陣,V是一個(gè)r × n正交矩陣。r是矩陣M的秩。

Σ的對角線元素為原矩陣M的奇異值,按降序排列。U的列是m的左奇異向量,這些向量構(gòu)成了m的列空間的正交基,V的列是m的右奇異向量,這些向量構(gòu)成了m的行空間的正交基。

2、簡化形式(Truncated SVD)

對于降維,通常使用截?cái)喟姹镜钠娈愔捣纸?。選擇Σ中前k個(gè)最大的奇異值。這些列可以從Σ中選擇,行可以從V * *中選擇。由原矩陣M重構(gòu)出一個(gè)新的矩陣B,公式如下:

B = u * Σ,B = V * A

其中Σ只包含原始Σ中奇異值的前k列,V包含原始V中奇異值對應(yīng)的前k行。

優(yōu)點(diǎn)

降維:SVD允許通過只保留最重要的奇異值和向量來降低維數(shù)。

數(shù)據(jù)壓縮:SVD用于數(shù)據(jù)壓縮任務(wù),減少了矩陣的存儲需求。

降噪:通過只使用最顯著的奇異值,奇異值分解可以幫助減少數(shù)據(jù)中噪聲的影響。

數(shù)值穩(wěn)定性:奇異值分解在數(shù)值上是穩(wěn)定的,適合于求解病態(tài)系統(tǒng)中的線性方程。

正交性:SVD分解中的矩陣U和V是正交的,保留了原矩陣的行與列之間的關(guān)系。

推薦系統(tǒng)中的應(yīng)用:奇異值分解廣泛應(yīng)用于推薦系統(tǒng)的協(xié)同過濾。

缺點(diǎn)

計(jì)算復(fù)雜度:計(jì)算大型矩陣的完整SVD在計(jì)算上是非常昂貴的。

內(nèi)存需求:存儲完整的矩陣U、Σ和V可能會占用大量內(nèi)存,特別是對于大型矩陣。

對缺失值的敏感性:SVD對數(shù)據(jù)中的缺失值很敏感,處理缺失值需要專門的技術(shù)。

何時(shí)使用

降維:當(dāng)目標(biāo)是在保留數(shù)據(jù)基本結(jié)構(gòu)的同時(shí)降低數(shù)據(jù)的維數(shù)時(shí)。

推薦系統(tǒng):在基于協(xié)同過濾的推薦系統(tǒng)中,SVD用于識別捕獲用戶-物品交互的潛在因素。

數(shù)據(jù)壓縮:在需要壓縮或近似大型數(shù)據(jù)集的場景中。

信號處理:在信號處理中,采用奇異值分解進(jìn)行降噪和特征提取。

主題建模:SVD被用于主題建模技術(shù),如潛在語義分析(LSA)。

Python代碼示例

import numpy as np
 from sklearn.model_selection import train_test_split
 from sklearn.decomposition import TruncatedSVD
 from sklearn.datasets import make_classification
 from sklearn.preprocessing import StandardScaler
 
 # Generate a sample dataset
 X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
 
 # Split the data into training and test sets
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
 # Standardize the features (important for SVD)
 scaler = StandardScaler()
 X_train = scaler.fit_transform(X_train)
 X_test = scaler.transform(X_test)
 
 # Initialize SVD and fit on the training data
 svd = TruncatedSVD(n_compnotallow=X_train.shape[1] - 1) # Use one less component than the feature count
 X_train_svd = svd.fit_transform(X_train)
 
 # Calculate explained variance ratio for each component
 explained_variance_ratio = svd.explained_variance_ratio_
 
 # Calculate the cumulative explained variance
 cumulative_explained_variance = np.cumsum(explained_variance_ratio)
 
 # Find the number of components that explain at least 75% of the variance
 n_components = np.argmax(cumulative_explained_variance >= 0.75) + 1
 
 # Transform both the training and test data to the selected number of components
 X_train_svd_selected = svd.transform(X_train)[:, :n_components]
 X_test_svd_selected = svd.transform(X_test)[:, :n_components]
 
 # Print the number of components selected
 print(f"Number of components selected: {n_components}")

總結(jié)

在主成分分析(PCA)、線性判別分析(LDA)和奇異值分解(SVD)之間的選擇取決于數(shù)據(jù)的具體目標(biāo)和特征。以下是關(guān)于何時(shí)使用每種技術(shù)的一般指導(dǎo)原則:

主成分分析:

  1. 當(dāng)目標(biāo)是降低數(shù)據(jù)集的維數(shù)時(shí)。
  2. 在捕獲數(shù)據(jù)中的全局模式和關(guān)系至關(guān)重要的場景中。
  3. 用于探索性數(shù)據(jù)分析和可視化。

線性判別分析:

  1. 在分類問題中,增強(qiáng)類之間的分離。
  2. 當(dāng)有一個(gè)標(biāo)記的數(shù)據(jù)集時(shí),目標(biāo)是找到一個(gè)最大化階級歧視的投影。
  3. 當(dāng)正態(tài)分布類和等協(xié)方差矩陣的假設(shè)成立時(shí),LDA特別有效。

奇異值分解:

  1. 當(dāng)處理稀疏數(shù)據(jù)或缺失值時(shí)。
  2. 推薦系統(tǒng)的協(xié)同過濾。
  3. 奇異值分解也適用于數(shù)據(jù)壓縮和去噪。

三個(gè)技術(shù)的對比:

無監(jiān)督vs有監(jiān)督學(xué)習(xí):PCA是無監(jiān)督的,而LDA是有監(jiān)督的。根據(jù)標(biāo)記數(shù)據(jù)的可用性進(jìn)行選擇。

類可分離性:如果目標(biāo)是改進(jìn)類可分離性,那么首選LDA。PCA和SVD關(guān)注的是總體方差。

數(shù)據(jù)特征:數(shù)據(jù)的特征,如線性、類別分布和異常值的存在,會影響選擇。

特定于應(yīng)用程序的需求:考慮應(yīng)用程序的特定需求,例如可解釋性、計(jì)算效率或?qū)G失數(shù)據(jù)的處理。

綜上所述,PCA適用于無監(jiān)督降維,LDA適用于關(guān)注類可分性的監(jiān)督問題,而SVD具有通用性,可用于包括協(xié)同過濾和矩陣分解在內(nèi)的各種應(yīng)用。


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

2022-04-09 09:21:19

人工智能機(jī)器學(xué)習(xí)PCA算法

2017-09-11 09:20:14

機(jī)器學(xué)習(xí)無監(jiān)督學(xué)習(xí)聚類

2021-08-19 11:22:22

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

2022-07-15 15:56:51

云計(jì)算工具云中斷

2010-04-19 09:31:44

KDE

2024-06-19 09:43:51

2021-05-17 09:52:53

工具dumiVue 組件

2012-01-06 11:13:02

SinatraJava框架

2024-02-19 14:37:14

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

2019-10-24 15:56:30

Kubernetes虛擬化云原生

2022-03-24 14:05:56

數(shù)字孿生IT領(lǐng)導(dǎo)者數(shù)據(jù)分析

2009-09-16 11:44:26

IT運(yùn)維

2024-11-22 15:23:51

Python虛擬環(huán)境

2023-10-17 07:23:00

Vue組件代碼

2012-05-27 18:24:12

蘋果

2021-09-14 23:00:04

區(qū)塊鏈金融技術(shù)

2020-06-11 09:00:27

SDN網(wǎng)絡(luò)架構(gòu)網(wǎng)絡(luò)

2009-08-10 22:31:00

光纖通道技術(shù)光纖接入

2009-10-21 21:14:37

BTIM系統(tǒng)IT運(yùn)維管理北塔軟件

2023-04-26 11:14:11

IT領(lǐng)導(dǎo)者遠(yuǎn)程工作
點(diǎn)贊
收藏

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