使用 scikit-learn 在 Python 中實現 PCA
介紹
主成分分析 (PCA) 是一種流行的降維方法,它使從高維資料集提取有用資訊變得更容易。它透過將資料重新投影到不同的軸上實現這一點,在這些軸上可以捕獲最大的方差。PCA 透過降低資料集的複雜性同時保留其基本結構來實現這一點。它有助於資料分析中的特徵選擇、資料壓縮和降噪等任務,甚至可以降低正在分析的資料的維數。PCA 已被應用於影像處理、生物資訊學、經濟學和社會科學等各個領域。
它有幾個應用,包括影像識別(人類和非人類)、遺傳學、金融、消費者細分、推薦系統和情感分析。總之,主成分分析是一種靈活的方法,可用於各種各樣的環境。
瞭解 PCA 背後的理論
什麼是主成分分析 (PCA)?
主成分分析 (PCA) 是一種降維技術,用於將高維資料轉換為低維表示,同時保留最重要的資訊。它識別資料變化最大的方向(主成分)。
PCA 中的數學概念
PCA 涉及線性代數和矩陣運算。它使用特徵向量和特徵值等概念來計算主成分。特徵向量表示最大方差的方向,特徵值表示每個特徵向量解釋的方差量。
解釋方差比率
解釋方差比率表示每個主成分解釋的資料總方差的比例。它有助於確定保留多少個主成分以在降維和保留資訊之間取得最佳平衡。
使用 scikit-learn 實現 PCA
安裝 scikit-learn
要安裝 scikit-learn,您可以使用以下命令:
Python 程式碼
pip install scikit-learn
載入必要的庫
在 Python 中,您需要匯入實現 PCA 所需的庫:
Python 程式碼
from sklearn.decomposition import PCA import numpy as np
資料預處理
縮放特徵
在應用 PCA 之前,建議將特徵縮放為具有零均值和單位方差。這可以使用 scikit-learn 的 StandardScaler 來實現:
Python 程式碼
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(data)
處理缺失值(如果適用)
如果您的資料包含缺失值,您可能需要在執行 PCA 之前處理它們。根據缺失資料的性質,可以使用插補或刪除等技術。
執行 PCA
要在縮放後的資料上執行 PCA,請建立 PCA 類的例項並將其擬合到資料上:
Python 程式碼
pca = PCA() pca.fit(scaled_data)
選擇元件數量
您可以根據解釋方差比率選擇元件數量。例如,要保留 95% 的方差,您可以使用:
Python 程式碼
n_components = np.argmax(np.cumsum(pca.explained_variance_ratio_) >= 0.95) + 1
解釋主成分
可以使用 pca.components 訪問主成分。主成分是原始特徵的線性組合,每個都代表資料變化的唯一軸。可以分析主成分的係數以揭示它們在解釋總方差中的相對重要性。
視覺化 PCA 結果
雙標圖
雙標圖是一種散點圖,同時顯示點和 PC。因此,可以觀察資料和主成分之間的關係。可以使用 Matplotlib 和 scikit-learn 等庫來生成雙標圖:
Python 程式碼
import matplotlib.pyplot as plt
# Assuming X is the original data matrix
X_pca = pca.transform(scaled_data)
plt.scatter(X_pca[:, 0], X_pca[:, 1]) # Replace 0 and 1 with the desired principal components
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
碎石圖
碎石圖繪製了主成分的特徵值(或解釋方差),從最高到最低。它有助於確定保留多少個元件。可以使用 Matplotlib 來建立碎石圖:
Python 程式碼
plt.plot(range(1, len(pca.explained_variance_ratio_) + 1), pca.explained_variance_ratio_, marker='o')
plt.xlabel('Principal Components')
plt.ylabel('Explained Variance Ratio')
plt.show()
這些視覺化提供了對資料結構以及每個主成分在捕獲原始資料可變性中的重要性的見解。
評估 PCA 的效能
評估解釋方差比率
應用 PCA 後,評估每個主成分解釋的資料變化量至關重要。此資料有助於確定保留多少個元件。可以使用 scikit-learn 的 PCA 物件的“explained_variance_ratio_”欄位在 Python 中訪問解釋方差比率。這是一個示例程式碼片段:
Python 程式碼
from sklearn.decomposition import PCA
# Assume 'X' is your preprocessed data
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# Accessing the explained variance ratio
explained_variance_ratio = pca.explained_variance_ratio_
print("Explained Variance Ratio:", explained_variance_ratio)
重建原始資料
透過將資料對映到低維空間,PCA 能夠降低資料的維數。可以使用“inverse_transform()”函式從壓縮表示返回到原始資料。這是一個示例程式碼片段:
Python 程式碼
# Reconstructing the original data X_reconstructed = pca.inverse_transform(X_pca)
評估降維對模型效能的影響
應用 PCA 後,您需要確定維數減少如何影響機器學習模型的效能。您可以在應用 PCA 之前和之後比較準確率或均方誤差等效能指標。這是一個示例程式碼片段:
Python 程式碼
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Assume 'y' is your target variable
X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
# Train and evaluate a logistic regression model on the reduced data
model = LogisticRegression()
model.fit(X_train, y_train)
accuracy_pca = model.score(X_test, y_test)
# Train and evaluate a logistic regression model on the original data
model_original = LogisticRegression()
model_original.fit(X_train_original, y_train)
accuracy_original = model_original.score(X_test_original, y_test)
print("Accuracy with PCA:", accuracy_pca)
print("Accuracy without PCA:", accuracy_original)
透過比較模型在應用 PCA 前後的效能,您可以確定降維如何影響您的特定任務。
結論
總之,使用 Python 中帶有 scikit-learn 的 PCA 可以非常有效地實現降維和特徵提取。如果正確理解、實施和評估,PCA 為更有效的資料分析、視覺化和建模鋪平了道路,這些分析、視覺化和建模跨越了廣泛的應用領域。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP