🎯 学习目标

  • 理解特征选择的重要性
  • 掌握过滤法、包装法、嵌入法
  • 学会使用sklearn进行特征选择
  • 了解不同方法的适用场景
特征选择概念图

为什么需要特征选择

并非所有特征都对预测有帮助。特征选择可以去除无关或冗余特征, 降低维度、减少计算量、提高模型性能、增强模型可解释性。

📊 三大类特征选择方法

🔍

过滤法 (Filter)

基于统计指标评估特征,与模型无关

📦

包装法 (Wrapper)

基于模型性能评估特征子集

🧠

嵌入法 (Embedded)

训练过程中自动选择特征

💻 过滤法实现

from sklearn.feature_selection import ( SelectKBest, f_classif, mutual_info_classif, VarianceThreshold, chi2 ) # 方差阈值过滤(去除方差小的特征) selector = VarianceThreshold(threshold=0.1) X_high_var = selector.fit_transform(X) # 选择K个最佳特征(基于ANOVA F值) selector = SelectKBest(f_classif, k=10) X_selected = selector.fit_transform(X, y) # 查看被选中的特征 selected_features = selector.get_support(indices=True) print(f'选中的特征索引: {selected_features}') # 互信息法(捕获非线性关系) selector = SelectKBest(mutual_info_classif, k=10) X_selected = selector.fit_transform(X, y)

📦 包装法实现

from sklearn.feature_selection import RFE, RFECV from sklearn.ensemble import RandomForestClassifier # 递归特征消除 (RFE) model = RandomForestClassifier(n_estimators=100, random_state=42) rfe = RFE(model, n_features_to_select=10) X_selected = rfe.fit_transform(X, y) # 查看特征排名 print(f'特征排名: {rfe.ranking_}') # 带交叉验证的RFE(自动确定最佳特征数) rfecv = RFECV(model, cv=5, scoring='accuracy') X_selected = rfecv.fit_transform(X, y) print(f'最佳特征数: {rfecv.n_features_}')

🧠 嵌入法实现

from sklearn.feature_selection import SelectFromModel from sklearn.linear_model import Lasso # 基于Lasso的特征选择 lasso = Lasso(alpha=0.01) selector = SelectFromModel(lasso) X_selected = selector.fit_transform(X, y) # 基于树模型的特征重要性 rf = RandomForestClassifier(n_estimators=100) selector = SelectFromModel(rf, threshold='median') X_selected = selector.fit_transform(X, y) # 查看特征重要性 rf.fit(X, y) import pandas as pd importance = pd.Series(rf.feature_importances_, index=feature_names) print(importance.sort_values(ascending=False).head(10))

⚖️ 方法对比

方法 优点 缺点 适用场景
过滤法 快速、简单 忽略特征交互 初步筛选、高维数据
包装法 考虑特征组合 计算量大 小规模、精确选择
嵌入法 效率与效果平衡 依赖模型类型 大多数场景
💡
实践建议

先用过滤法快速去除无关特征,再用嵌入法精细选择。对于最终模型,可以尝试包装法获得最优特征子集。

特征选择
图:特征选择去除冗余,保留关键信息

📝 本节小结

  • • 特征选择降低维度、提升性能、增强可解释性
  • • 过滤法基于统计指标,快速但忽略特征交互
  • • 包装法基于模型性能,效果最好但计算量大
  • • 嵌入法在训练中自动选择,效率与效果平衡
  • • 实践中可组合使用不同方法