我有一个机器学习分类任务,它从多个固定长度的向量表示的拼接中进行训练。我如何在scikit-learn中使用自动特征选择、网格搜索或其他已建立的技术来找到适合我数据的最佳变换器组合?
以这个文本分类流程为例:
model = Pipeline([ ('vectorizer', FeatureUnion(transformer_list=[ ('word-freq', TfidfVectorizer()), # 词汇大小维度 ('doc2vec', MyDoc2VecVectorizer()), # 32维度(自定义变换器) ('doc-length', MyDocLengthVectorizer()), # 1维度(自定义变换器) ('sentiment', MySentimentVectorizer()), # 3维度(自定义变换器) ... # 可能还有很多其他变换器 ])), ('classifier', SVC())])
我怀疑这可能属于scikit slep002请求的dynamic-pipeline
功能。如果是这样,在过渡期如何处理?
回答:
虽然不能“选择最佳的(全有或全无)变换器特征子集”,我们可以使用scikit的特征选择
或降维
模块在分类之前的额外步骤中“选择/简化跨所有变换器的最佳特征子集”:
model = Pipeline([ ('vectorizer', FeatureUnion(transformer_list=[...])), ('feature_selector', GenericUnivariateSelect( mode='percentile', param=0.20, # 可超调参数 )), ('classifier', SVC())])
在特征发现的背景下(即:找到最佳的表达信号),这种技术比挑选变换器更强大。然而,在架构发现的背景下(即:找到最佳的管道布局和变换器的使用),这个问题似乎仍未解决..