代码之家  ›  专栏  ›  技术社区  ›  SkyWalker

如何指定使用集成分类器在网格搜索中迭代的级别?

  •  0
  • SkyWalker  · 技术社区  · 6 月前

    我有以下设置,但我找不到在网格搜索svm*和mlp*时通过级别进行探索的方法:

    steps = [('preprocessing', StandardScaler()),
             ('feature_selection', SelectKBest(mutual_info_classif, k=15)),
             ('clf', VotingClassifier(estimators=[("mlp1", mlp1),
                                                  ("mlp2", mlp2),
                                                  ("mlp3", mlp3),
                                                  ("svm1", svm1),
                                                  ("svm2", svm2)
                                                 ], voting='soft'))
            ]
    
    model = Pipeline(steps=steps)
    params = [{
        'preprocessing': [StandardScaler(), MinMaxScaler(), MaxAbsScaler()],
        'feature_selection__score_func': [f_classif, mutual_info_classif]
    }]
    
    grid_search = GridSearchCV(model, params, cv=10, scoring='balanced_accuracy', verbose=1, n_jobs=20, refit=True)
    
    1 回复  |  直到 6 月前
        1
  •  1
  •   Szymon Roziewski    6 月前

    在VotingClassifier中,可以使用以下结构指定嵌套参数:

    clf__<estimator_name>__<hyperparameter_name>
    

    clf 指的是 VotingClassifier 进入管道。 <estimator_name> 指估计器的名称 投票分类器 (例如mlp1、svm1)。 <hyperparameter_name> 是指个体估计器的参数(例如,MLP的hidden_layer_sizes或SVM的C)。

    现在,您可以在params字典中包含超参数mlp1、mlp2、mlp3(用于MLP分类器)和svm1、svm2(用于SVM分类器)。例如

    params = [{
        # Preprocessing variations
        'preprocessing': [StandardScaler(), MinMaxScaler(), MaxAbsScaler()],
        
        # Feature selection variations
        'feature_selection__score_func': [f_classif, mutual_info_classif],
        
        # Hyperparameters for MLP classifiers
        'clf__mlp1__hidden_layer_sizes': [(50,), (100,), (50, 50)],
        'clf__mlp1__activation': ['relu', 'tanh'],
        'clf__mlp2__hidden_layer_sizes': [(50,), (100,)],
        'clf__mlp2__activation': ['relu', 'tanh'],
        'clf__mlp3__hidden_layer_sizes': [(50, 50), (100, 50)],
        'clf__mlp3__activation': ['relu', 'logistic'],
        
        # Hyperparameters for SVM classifiers
        'clf__svm1__C': [0.01, 0.1, 1, 10],
        'clf__svm1__kernel': ['linear', 'rbf'],
        'clf__svm2__C': [0.1, 1, 10],
        'clf__svm2__kernel': ['rbf', 'sigmoid']
    }]