第31集:特征工程:特征選擇與降維技術
摘要
特征工程是機器學習和數據科學中不可或缺的一環,其核心目標是通過選擇重要特征和降低維度來提升模型性能并減少計算復雜度。本集聚焦于特征選擇與降維技術,涵蓋過濾法、包裹法、嵌入法等特征選擇方法以及 PCA、t-SNE 和 UMAP 等降維技術。我們將通過實戰案例演示如何對高維數據進行降維可視化,并使用遞歸特征消除(RFE)選擇關鍵特征。

核心概念和知識點
1. 特征選擇方法
- 過濾法:基于統計指標(如相關系數、互信息)選擇特征,獨立于模型。
- 包裹法:將模型性能作為評估標準,例如遞歸特征消除(RFE)。
- 嵌入法:利用模型內部的特征重要性(如決策樹、Lasso 回歸)進行選擇。
2. 降維技術
- PCA(主成分分析):線性降維方法,通過最大化方差提取主要成分。
- t-SNE(t-分布鄰域嵌入):非線性降維方法,適合高維數據的可視化。
- UMAP(統一流形逼近與投影):一種更快且更靈活的非線性降維方法。
3. 缺失值處理與特征編碼
- 缺失值處理:填充均值/中位數、插值法或直接刪除缺失值。
- 特征編碼:將類別型特征轉換為數值型特征(如 One-Hot 編碼、Label 編碼)。
實戰案例
案例 1:對 MNIST 數據集使用 PCA 進行降維并可視化
背景
MNIST 是一個手寫數字圖像數據集,每個樣本是一個 28x28 的灰度圖像(784 維)。我們使用 PCA 將數據降維到 2 維以進行可視化。
代碼實現
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 加載 MNIST 數據集
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target.astype(int)# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用 PCA 降維到 2 維
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 可視化降維結果
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', alpha=0.6)
plt.colorbar(scatter, label='Digit Label')
plt.title("PCA Visualization of MNIST Dataset")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.show()# 輸出解釋方差比例
print(f"Explained Variance Ratio: {pca.explained_variance_ratio_}")
輸出結果
Explained Variance Ratio: [0.097 0.071]
可視化
案例 2:使用遞歸特征消除(RFE)選擇關鍵特征
背景
我們使用 Scikit-learn 提供的乳腺癌數據集,通過 RFE 方法選擇最重要的特征并訓練邏輯回歸模型。
代碼實現
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
from sklearn.metrics import accuracy_score# 加載數據集
data = load_breast_cancer()
X, y = data.data, data.target# 數據集劃分與標準化
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 使用 RFE 選擇特征
model = LogisticRegression(max_iter=10000)
rfe = RFE(estimator=model, n_features_to_select=5) # 選擇 5 個特征
rfe.fit(X_train_scaled, y_train)# 查看選擇的特征
selected_features = np.array(data.feature_names)[rfe.support_]
print(f"Selected Features: {selected_features}")# 在測試集上評估模型
y_pred = rfe.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy with Selected Features: {accuracy:.2f}")
輸出結果
Selected Features: ['mean radius' 'mean perimeter' 'mean concave points''worst radius' 'worst perimeter']
Accuracy with Selected Features: 0.96
可視化
我們可以對比原始特征和選擇后的特征數量:
import seaborn as snssns.barplot(x=rfe.ranking_, y=data.feature_names)
plt.title("Feature Ranking by RFE")
plt.xlabel("Ranking")
plt.ylabel("Feature Name")
plt.show()
總結
特征工程是提升模型性能的關鍵步驟,合理的特征選擇和降維可以顯著降低計算復雜度并提高模型泛化能力。通過本集的學習,我們掌握了如何使用 PCA 對高維數據進行降維可視化,以及如何使用 RFE 方法選擇關鍵特征。
擴展思考
1. 如何結合特征工程優化 AI 大模型的輸入?
AI 大模型(如 GPT、BERT)通常需要高質量的輸入特征。通過特征工程,我們可以:
- 對文本數據進行特征提取(如 TF-IDF、詞向量)。
- 對圖像數據進行預處理(如標準化、裁剪)。
- 去除噪聲特征,減少冗余信息,從而提高大模型的訓練效率。
2. 自動化特征工程工具的應用前景
自動化特征工程工具(如 Featuretools、AutoFeat)能夠自動生成候選特征,減少人工干預。未來,這些工具可能與 AI 大模型結合,形成端到端的自動化建模流程,進一步提升開發效率。
專欄鏈接:Python實戰進階
下期預告:No32 - 并發編程:多線程與異步 I/O 的實戰應用