【问题标题】:Is it possible to toggle a certain step in sklearn pipeline?是否可以在 sklearn 管道中切换某个步骤?
【发布时间】:2013-10-16 06:09:35
【问题描述】:

我想知道我们是否可以在sklearn.pipeline 中设置一个“可选”步骤。例如,对于分类问题,我可能想尝试一个 ExtraTreesClassifier 与 AND 而没有前面的 PCA 转换。在实践中,它可能是一个带有额外参数的管道,指定PCA 步骤的切换,以便我可以通过GridSearch 等对其进行优化。我在 sklearn 源代码中看不到这样的实现,但是有什么解决办法吗?

此外,由于管道中后续步骤的可能参数值可能取决于上一步中的参数(例如,ExtraTreesClassifier.max_features 的有效值取决于PCA.n_components),是否可以指定这样的条件依赖在sklearn.pipelinesklearn.grid_search

谢谢!

【问题讨论】:

    标签: python machine-learning scikit-learn pipeline


    【解决方案1】:
    • Pipeline 步骤目前不能在网格搜索中作为可选步骤,但您可以将 PCA 类包装到您自己的 OptionalPCA 组件中,并使用布尔参数在请求时作为快速解决方法关闭 PCA。您可能想查看hyperopt 以设置更复杂的搜索空间。我认为默认情况下它具有良好的 sklearn 集成来支持这种模式,但我再也找不到文档了。也许看看this talk

    • 对于依赖参数问题,GridSearchCV支持参数树来处理这种情况as demonstrated in the documentation

    【讨论】:

    • 附带说明,请注意ExtraTreesClassifier.max_features 可以是介于 0.0 和 1.0 之间的浮点值,而不是整数值。当实际功能数量可变时,这很有用,就像您的情况一样。
    • 感谢两位有见地的回答。我认为它们正是我想要的。
    【解决方案2】:

    来自docs

    单个步骤也可以作为参数替换,并且非最终步骤 步骤可以通过将它们设置为无来忽略:

    from sklearn.linear_model import LogisticRegression
    params = dict(reduce_dim=[None, PCA(5), PCA(10)],
                  clf=[SVC(), LogisticRegression()],
                  clf__C=[0.1, 10, 100])
    grid_search = GridSearchCV(pipe, param_grid=params)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 2016-07-15
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-04-09
    • 2021-07-22
    • 2020-04-15
    相关资源
    最近更新 更多