scikit学习管道中是否具有“或”功能

问题描述 投票:1回答:1

我正在使用scikit学习库的Pipeline和GridSearchCV。

例如,特征选择方法可以由FeatureUnion组合。在这种情况下,结果将串联在一起。我要寻找的是一个或功能,这样网格搜索可以并行执行操作,并且最终不会合并。

在下面的(无效)示例中,应执行SelectKBest()+ SVC()和VarianceThreshold()+ SVC()。

pipeline = Pipeline([ 
    [('kbest', SelectKBest()), 
     ('variance', VarianceThreshold())], 
    ('svm', SVC()) 
]) 

parameters = { 
    'kbest__k': [3, 5], 
    'variance__threshold': [0.1, 0.2], 
    'svm__C': [1], 
    'svm__gamma': [0.1, 0.01] 
} 

grid_search = GridSearchCV(pipeline, parameters) 
grid_search.fit(X, y) 

如果是,是否可以将相同的功能用于多个估算器?

python scikit-learn
1个回答
0
投票

这里是操作方法:

  1. 使用字典列表而不是单个字典,类似于sklearn官方文档中提供了example
  2. 要跳过的步骤,只需使用[None]即可跳过。

一个工作示例:

from sklearn.feature_selection import VarianceThreshold
from sklearn.svm import SVC
from sklearn.datasets import load_iris

pipeline = Pipeline([ 
    ('kbest', SelectKBest()), 
    ('variance', VarianceThreshold()), 
    ('svm', SVC()) 
]) 

iris = load_iris()
X = iris.data
y = iris.target

parameters = [
    {
        'variance': [None], 
        'kbest__k': [1, 2], 
        'svm__C': [1], 
        'svm__gamma': [0.1, 0.01] 
    },
    {
        'kbest': [None], 
        'variance__threshold': [0.1, 0.2], 
        'svm__C': [1], 
        'svm__gamma': [0.1, 0.01] 
    }
]

grid_search = GridSearchCV(pipeline, parameters) 
grid_search.fit(X, y) 
© www.soinside.com 2019 - 2024. All rights reserved.