机器学习进阶文档深度页
特征选择
删除低价值、冗余或不稳定特征,降低方差、成本与解释负担,并把选择过程限制在训练折内。
学习前需要掌握
交叉验证正则化内容待补充
背景与问题
特征过多会增加训练成本和偶然相关性。常量、重复、噪声和预测时昂贵的列可能降低泛化或工程可用性。
概念定义
特征选择从候选输入中保留一部分列;它不同于 PCA 等特征提取,后者创建新的组合变量。
直观理解
不是给模型越多信息越好,而是保留稳定、有用、可获得且成本合理的信息。
核心原理
可用方法包括低方差/冗余删除、统计检验、L1、树重要性、递归消除和基于 CV 的选择。任何数据驱动选择必须在训练折内部完成。
计算与实现步骤
- 1
删除不可用和泄漏特征。
- 2
删除常量、重复和明显冗余。
- 3
选择与任务匹配的方法。
- 4
放入 Pipeline。
- 5
用相同交叉验证比较性能与稳定性。
- 6
记录保留特征和采集成本。
代码实现
示例 1
Pipeline 内使用 L1 选择
Pipeline 内使用 L1 选择
scikit-learn
example_01.py用途:避免先看完整数据再选择特征。
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
model = make_pipeline(
StandardScaler(),
SelectFromModel(LogisticRegression(penalty="l1", solver="liblinear", C=0.1)),
LogisticRegression(max_iter=2000),
)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
避免先看完整数据再选择特征。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–4 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScalerStep 2 · 6–10 行
每个交叉验证训练折独立完成选择。
model = make_pipeline(
StandardScaler(),
SelectFromModel(LogisticRegression(penalty="l1", solver="liblinear", C=0.1)),
LogisticRegression(max_iter=2000),
)代码与数学原理
减去训练均值并除以训练标准差,对应代码中的 mean/std 或 StandardScaler。
预期输出或运行结果
模型只把被训练折 L1 选择器保留的列传给最终分类器。
常见错误 · 4 条
- 不要在测试集上调用 fit 或 fit_transform;测试集只能复用训练参数。
- 完整数据选择后再 CV
- 把重要性解释为因果
- 高度相关特征选择不稳定
实际应用
- 高维表格
- 稀疏文本
- 降低采集成本
常见错误
完整数据选择后再 CV
把重要性解释为因果
高度相关特征选择不稳定
文档来源
02|数据预处理与特征工程原始文档
学习资料/learning_tech/02_preprocessing_feature_engineering.md- §11 特征选择
- §12 使用 Pipeline 防止泄漏
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。