讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 GridSearchCV 中灵活集成特征选择与全特征保留策略

酷瑶姑娘_6644

酷瑶姑娘_6644

发布时间:2026-09-02 19:20:04

|

246人浏览过

|

来源于php中文网

原创

如何在 GridSearchCV 中灵活集成特征选择与全特征保留策略

本文介绍在 scikit-learn 管道中结合 SequentialFeatureSelector 与 passthrough 语义,通过比例型参数 n_features_to_select(如 1.0)统一建模“全特征使用”场景,使网格搜索能公平比较不同特征子集规模(含全部特征)的性能表现。

本文介绍在 scikit-learn 管道中结合 sequentialfeatureselector 与 `passthrough` 语义,通过比例型参数 `n_features_to_select`(如 `1.0`)统一建模“全特征使用”场景,使网格搜索能公平比较不同特征子集规模(含全部特征)的性能表现。

在构建机器学习管道时,常需评估特征选择对模型性能的实际增益。但标准的 SequentialFeatureSelector(SFS)默认不支持 n_features_to_select = n_features(即保留全部特征),直接指定整数 3 会触发 ValueError: n_features_to_select must be —— 这看似限制了“是否启用特征选择”的决策空间。

关键突破点在于:n_features_to_select 支持浮点数输入,表示所选特征占原始特征总数的比例。 因此,当预处理后特征维度为 n 时,设 n_features_to_select=1.0 即等价于“选择全部特征”,其行为在功能上与 'passthrough' 一致,且天然兼容 Pipeline 的参数网格结构,无需额外分支或自定义转换器。

以下是在原示例基础上优化后的完整实现:

import pandas as pd
import seaborn as sns
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer

# 数据准备(同原示例)
titanic = sns.load_dataset('titanic')
features = ['age', 'fare', 'sex']
X = titanic[features].copy()
y = titanic['survived']

# 构建预处理器(保持不变)
numeric_features = ['age', 'fare']
numeric_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='constant')),
    ('scaler', StandardScaler())
])

categorical_features = ['sex']
categorical_transformer = Pipeline([
    ('imputer', SimpleImputer(strategy='constant')),
    ('onehot', OneHotEncoder(drop='first', sparse_output=False))
])

preprocessor = ColumnTransformer([
    ('num', numeric_transformer, numeric_features),
    ('cat', categorical_transformer, categorical_features)
], remainder='passthrough')

# 初始化分类器与 SFS(注意:SFS 需基于可拟合的 estimator)
clf = LogisticRegression(max_iter=1000, solver='liblinear')
sfs = SequentialFeatureSelector(clf, direction='forward', cv=3)

# 构建管道:预处理 → 特征选择 → 分类
pipeline = Pipeline([
    ('preprocessor', preprocessor),
    ('feature_selection', sfs),
    ('classifier', clf)
])

# ✅ 关键改进:使用比例参数,支持 [1/3, 2/3, 1.0]
# 假设预处理后特征数为 4(age、fare、sex_male),则:
#   1/3 ≈ 1 个特征,2/3 ≈ 2 个特征,1.0 = 全部 4 个特征
param_grid = {
    'feature_selection__n_features_to_select': [1/3, 2/3, 1.0],
    'classifier__C': [0.1, 1.0, 10.0]
}

grid_search = GridSearchCV(pipeline, param_grid, cv=5, scoring='accuracy', n_jobs=-1)
grid_search.fit(X, y)

# 查看详细结果(含各参数组合的均值/标准差得分)
results_df = pd.DataFrame(grid_search.cv_results_)
print("Grid search results (top 5 by mean test score):")
print(results_df[[
    'param_feature_selection__n_features_to_select',
    'param_classifier__C',
    'mean_test_score', 'std_test_score'
]].sort_values('mean_test_score', ascending=False).head())

注意事项与最佳实践

  • 预处理后特征数需明确n_features_to_select=1.0 是相对于 feature_selection 步骤输入特征数(即 preprocessor 输出维度)而言的。建议先用 preprocessor.fit_transform(X).shape[1] 验证实际维度,确保比例设置合理。
  • SFS 计算开销较大:前向/后向搜索的时间复杂度随特征数增长显著。若特征较多(>20),建议改用 SelectKBestRFECV,或限定 n_features_to_select 的最大比例(如 0.8)。
  • 避免重复验证 passthrough:无需再手动添加 ('feature_selection', 'passthrough') 到 pipeline 步骤中——n_features_to_select=1.0 已语义等价,且保证了参数空间的一致性与可比性。
  • 结果解读:若 1.0 对应的配置取得最优分数,说明当前任务中不进行特征削减更优;反之则表明降维带来泛化提升,此时可进一步分析被选中的特征组合。

综上,利用 n_features_to_select 的浮点语义,是 scikit-learn 生态中实现“特征选择 vs 全特征”统一网格搜索的最简洁、最规范、最可复现的方式。它既符合 sklearn 的设计哲学(参数驱动、组件解耦),又规避了自定义 PassthroughSelector 等冗余封装,是生产级特征工程流程中的推荐实践。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
Python 机器学习入门与 Scikit-Learn 实战
Python 机器学习入门与 Scikit-Learn 实战

面向机器学习初学者,以 Scikit-Learn 为核心工具,讲解机器学习基本概念(监督学习/无监督学习/模型评估)、数据预处理(标准化/归一化/缺失值填充/特征编码)、常用分类算法(逻辑回归/决策树/随机森林/SVM/KNN)、回归算法(线性回归/岭回归/Lasso)、无监督聚类(K-Means/DBSCAN)、交叉验证与超参数调优(GridSearch/RandomSearch)、混淆矩阵与 ROC/AUC 模型评估指标,帮助开发者

295

2026.04.24

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

0

2026.09.22

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

20

2026.09.21

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

20

2026.09.21

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

0

2026.09.21

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

0

2026.09.21

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

0

2026.09.21

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

40

2026.09.20

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

20

2026.09.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn