sklearn - 如何从传递给 GridSearchCV 的管道中检索 PCA 组件和解释方差

Posted

技术标签:

【中文标题】sklearn - 如何从传递给 GridSearchCV 的管道中检索 PCA 组件和解释方差【英文标题】:sklearn - How to retrieve PCA components and explained variance from inside a Pipeline passed to GridSearchCV 【发布时间】:2018-03-29 17:39:18 【问题描述】:

我正在使用带有如下管道的 GridSearchCV:

grid = GridSearchCV(
    Pipeline([
        ('reduce_dim', PCA()),
        ('classify', RandomForestClassifier(n_jobs = -1))
        ]),
    param_grid=[
        
            'reduce_dim__n_components': range(0.7,0.9,0.1),
            'classify__n_estimators': range(10,50,5),
            'classify__max_features': ['auto', 0.2],
            'classify__min_samples_leaf': [40,50,60],
            'classify__criterion': ['gini', 'entropy']
        
    ],
    cv=5, scoring='f1')

grid.fit(X,y)

我现在如何从grid.best_estimator_ 模型中检索componentsexplained_variance 等PCA 详细信息?

此外,我还想使用 pickle 将best_estimator_ 保存到文件中,然后再加载它。如何从此加载的估算器中检索 PCA 详细信息?我怀疑它会和上面一样。

【问题讨论】:

我没有得到你的 PCA 网格部分:'reduce_dim__n_components': range(0.7,0.9,0.1) 这里的值范围是多少? 【参考方案1】:

grid.best_estimator_是用最佳参数访问管道。

现在使用named_steps[]attribute 访问管道的内部估算器。

所以grid.best_estimator_.named_steps['reduce_dim'] 会给你pca 对象。现在您可以简单地使用它来访问此 pca 对象的 components_explained_variance_ 属性,如下所示:

grid.best_estimator_.named_steps['reduce_dim'].components_ grid.best_estimator_.named_steps['reduce_dim'].explained_variance_

【讨论】:

这是完美的。非常感谢!

以上是关于sklearn - 如何从传递给 GridSearchCV 的管道中检索 PCA 组件和解释方差的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 管道有没有办法在网格搜索期间进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给 GridSearchCV?

将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)

将二维数组传递给 sklearn.metrics.recall_score 时,为啥会出现 ValueError?

将 input_dim 传递给 KerasClassifier(sklearn 包装器/接口)

如何通过索引自定义 sklearn 交叉验证迭代器?

如何在 sklearn 中编写自定义估算器并对其使用交叉验证?