代码之家  ›  专栏  ›  技术社区  ›  Jack Fleeting

BaggingClassifier参数内部参数的网格搜索

  •  0
  • Jack Fleeting  · 技术社区  · 5 年前

    a question answered here ,但我相信它应该有自己的思路。

    在上一个问题中,我们处理的是集成分类器的集合,其中每个分类器都有自己的参数。让我们从提供的示例开始 MaximeKan

    my_est = BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, 
          max_features = 0.5), n_estimators = 5, bootstrap_features = False, bootstrap = False, 
          max_features = 1.0, max_samples = 0.6 )
    

    现在我想说的是,除了效率、计算成本等考虑因素之外,还有一个普遍的概念:我将如何使用这种设置运行网格搜索?

    我可以沿着这些线设置两个参数网格:

    BaggingClassifier :

    BC_param_grid = {
    'bootstrap': [True, False],
    'bootstrap_features': [True, False],    
    'n_estimators': [5, 10, 15],
    'max_samples' : [0.6, 0.8, 1.0]
    }
    

    RandomForestClassifier

    RFC_param_grid = {
    'bootstrap': [True, False],    
    'n_estimators': [100, 200, 300],
    'max_features' : [0.6, 0.8, 1.0]
    }
    

    现在我可以用我的估计器调用网格搜索:

    grid_search = GridSearchCV(estimator = my_est, param_grid = ???)

    我该怎么处理这些钱 param_grid

    matryoshka dolls

    1 回复  |  直到 5 年前
        1
  •  3
  •   Community Mr_and_Mrs_D    4 年前

    根据上面的@James Dellinger评论,并从那里扩展,我能够完成它。事实证明,“秘密酱汁”确实是一个几乎没有文档记录的特性- __ (双下划线)分隔符(在 Pipeline 文档):似乎要添加内部/基本估计器名称,然后是 __ param_grid 其中包括外部和内部估计器的参数。

    BaggingClassifier RandomForestClassifier . 因此,您需要做的是,首先,导入需要导入的内容:

    from sklearn.ensemble import BaggingClassifier, RandomForestClassifier
    from sklearn.model_selection import GridSearchCV
    

    其次是 参数网格

    param_grid = {
     'bootstrap': [True, False],
     'bootstrap_features': [True, False],    
     'n_estimators': [5, 10, 15],
     'max_samples' : [0.6, 0.8, 1.0],
     'base_estimator__bootstrap': [True, False],    
     'base_estimator__n_estimators': [100, 200, 300],
     'base_estimator__max_features' : [0.6, 0.8, 1.0]
    }
    

    最后,您的网格搜索:

    grid_search=GridSearchCV(BaggingClassifier(base_estimator=RandomForestClassifier()), param_grid=param_grid, cv=5)