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

时间:2016-08-05 12:32:10

标签: python scikit-learn

我正在使用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) 

如果是,是否可以使用相同的功能来生成多个估算器?

1 个答案:

答案 0 :(得分:0)

方法如下:

  1. 使用词典列表而不是单个词典,类似于 example在sklearn官方文档中提供。在某种程度上,每个字典 就像 OR 语句。
  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)