同时存在文本与数值特征时如何搭建适配GridSearchCV的pipeline?
混合文本与数值特征的分类任务Pipeline搭建指南
需求说明
在同时包含文本特征和数值特征的分类任务中,需要完成以下全流程自动化操作:
- 单独对文本列运行
CountVectorizer做词频向量化 - 将向量化后输出的稀疏矩阵与原数值特征拼接
- 拼接后的特征统一输入分类器训练
- 全流程支持
GridSearchCV做超参数搜索
可行实现代码
# 依赖导入(若未提前导入可补充) from sklearn.pipeline import Pipeline, ColumnTransformer from sklearn.feature_extraction.text import CountVectorizer from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import GridSearchCV # X_train包含两列:['text','num'],分别为文本特征列和数值特征列 # y_train包含单列标签:['label'] # 定义文本列的处理流水线 word_transformer = Pipeline(steps = [('cvec', CountVectorizer())]) # 定义列转换器:文本列走自定义处理逻辑,其余数值列直接保留 preprocessor = ColumnTransformer( transformers = [('wt', word_transformer, ['text'])], remainder = 'passthrough' ) # 定义全流程流水线:先做特征预处理,再输入随机森林分类器 pipe = Pipeline(steps=[ ('preprocessor', preprocessor), ('RBC', RandomForestClassifier()) ]) # 定义GridSearchCV的超参数搜索范围 # 参数命名规则:用双下划线__逐层嵌套调用组件的参数 pipe_params = { 'preprocessor__wt__cvec__max_features': [1500, 2000, 3000], 'RBC__max_features': ['sqrt', 'log2'] } # 初始化网格搜索,采用5折交叉验证 gs = GridSearchCV(pipe, param_grid=pipe_params, cv=5) # 启动训练和超参数搜索 gs.fit(X_train, y_train)
核心规则说明
嵌套组件的参数调用需遵循双下划线逐层匹配规则:
- 第一层匹配Pipeline中定义的组件别名,比如示例中的
preprocessor、RBC - 后续层级依次匹配下层组件的自定义别名,直到最后一级为需要调整的参数名
- 该规则适用于所有Pipeline、ColumnTransformer嵌套的超参数搜索场景
内容的提问来源于stack exchange,提问作者Chee Yuan Ng
相关产品推荐
相关产品推荐

