原理:PCA通過正交變換將數(shù)據(jù)轉(zhuǎn)換到一個新的坐標(biāo)系統(tǒng)中,使得這個新坐標(biāo)系統(tǒng)的第一坐標(biāo)軸上的數(shù)據(jù)方差最大,第二坐標(biāo)軸上的數(shù)據(jù)方差次之,以此類推。這些新坐標(biāo)軸被稱為主成分。
應(yīng)用:PCA通常用于減少數(shù)據(jù)集的維度,同時盡可能保留數(shù)據(jù)中的變異性。它也常用于可視化高維數(shù)據(jù)。
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
# 應(yīng)用PCA
pca = PCA(n_components=2) # 降到2維
X_pca = pca.fit_transform(X)
# 可視化結(jié)果
plt.scatter(X_pca[:, 0], X_pca[:, 1])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Iris Dataset')
plt.show()
原理:LDA是一種監(jiān)督學(xué)習(xí)算法,旨在識別可以最佳區(qū)分不同類別的特征。LDA不僅降維,還保留了類別信息。
應(yīng)用:常用于特征提取和降維,尤其適用于分類任務(wù)中。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
# LDA也是一種監(jiān)督學(xué)習(xí)算法,需要類別標(biāo)簽
y = data.target
# 應(yīng)用LDA
lda = LDA(n_components=2) # 降到2維
X_lda = lda.fit_transform(X, y)
# 可視化結(jié)果
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y)
plt.xlabel('LD1')
plt.ylabel('LD2')
plt.title('LDA of Iris Dataset')
plt.show()
原理:t-SNE是一種用于高維數(shù)據(jù)降維的非線性技術(shù),通過概率分布的方式保持了高維空間中樣本點之間的相對距離。
應(yīng)用:常用于高維數(shù)據(jù)的可視化,特別是在圖像處理、NLP等領(lǐng)域。
from sklearn.manifold import TSNE
# 應(yīng)用t-SNE
tsne = TSNE(n_components=2, random_state=0)
X_tsne = tsne.fit_transform(X)
# 可視化結(jié)果
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
plt.xlabel('t-SNE feature 1')
plt.ylabel('t-SNE feature 2')
plt.title('t-SNE of Iris Dataset')
plt.show()
原理:MDS試圖在低維空間中保持樣本間的距離,使得這些距離盡可能接近它們在原始高維空間中的距離。
應(yīng)用:常用于探索性數(shù)據(jù)分析和可視化,尤其是在樣本間距離的保持是重要的場景中。
from sklearn.manifold import MDS
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
# 加載數(shù)據(jù)集
digits = load_digits()
X = digits.data
# 應(yīng)用MDS降維
mds = MDS(n_components=2)
X_mds = mds.fit_transform(X)
# 可視化結(jié)果
plt.scatter(X_mds[:, 0], X_mds[:, 1], c=digits.target, cmap='Spectral', alpha=0.5)
plt.colorbar()
plt.title('MDS on the Digits Dataset')
plt.show()
原理:LLE是一種非線性降維方法,它通過保持局部樣本間的線性關(guān)系來尋求數(shù)據(jù)在低維空間中的最佳嵌入。
應(yīng)用:適用于數(shù)據(jù)的非線性結(jié)構(gòu)探索和可視化。
from sklearn.manifold import LocallyLinearEmbedding
# 應(yīng)用LLE降維
lle = LocallyLinearEmbedding(n_components=2)
X_lle = lle.fit_transform(X)
# 可視化結(jié)果
plt.scatter(X_lle[:, 0], X_lle[:, 1], c=digits.target, cmap='Spectral', alpha=0.5)
plt.colorbar()
plt.title('LLE on the Digits Dataset')
plt.show()
數(shù)據(jù)降維技術(shù)可以分為線性和非線性兩大類。線性方法(如PCA和LDA)適用于數(shù)據(jù)呈線性分布時,而非線性方法(如t-SNE、MDS、LLE)適用于數(shù)據(jù)分布更為復(fù)雜的情況。選擇哪種降維方法取決于具體數(shù)據(jù)的特性和分析的目標(biāo)。正確應(yīng)用降維技術(shù)可以顯著提高數(shù)據(jù)處理的效率和算法的性能。
聯(lián)系客服