第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 的实战应用