跳转到主要内容

为scikit-learn网格搜索构建参数网格的帮助程序

项目描述

帮助构建scikit-learn网格搜索的参数网格。

Latest version on PyPi licence Python versions supported

Issue tracker Travis CI build status Documentation Status Test coverage

指定Scikit-Learn中sklearn.model_selection.GridSearchCV的参数网格可能很麻烦,尤其是在

  • 你更改代码以将某些估计器包装在,比如说,一个Pipeline中,然后需要使用很多__作为前缀来更改网格中的所有参数时

  • 你正在搜索多个网格(即你的param_grid是一个列表),并且你想要更改这些网格中的所有网格

searchgrid允许你定义(并更改)与估计器一起的网格,从而减少工作量,有时还可以减少代码。它存储了你想要在特定估计器对象上搜索的参数。这使得指定复杂的参数网格变得更加直接,意味着你不需要在更改复合估计器的结构时更新你的网格。

它提供了两个主要功能

  • searchgrid.set_grid用于指定估计器或GP核要搜索的参数值。

  • searchgrid.make_grid_search用于使用估计器注释的参数空间构建GridSearchCV对象。

构建搜索空间的其它实用工具包括

  • searchgrid.build_param_grid

  • searchgrid.make_pipeline

  • searchgrid.make_union

快速入门

如果已安装scikit-learn,那么在终端中

pip install searchgrid

并在Python中使用

from search_grid import set_grid, make_grid_search
estimator = set_grid(MyEstimator(), param=[value1, value2, value3])
search = make_grid_search(estimator, cv=..., scoring=...)
search.fit(X, y)

或在多个不同的估计器/管道中搜索最佳方案

search = make_grid_search([estimator1, estimator2], cv=..., scoring=...)
search.fit(X, y)

动机示例

让我们来看看一些混乱的更改案例。我们首先进行一些导入。

>>> from sklearn.pipeline import Pipeline
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.decomposition import PCA
>>> from searchgrid import set_grid, make_grid_search
>>> from sklearn.model_selection import GridSearchCV
将估计器包装在pipeline中。

你有代码搜索分类器的参数。现在你想要在Pipeline中搜索这个分类器。使用普通的scikit-learn,你必须插入__并更改

>>> gs = GridSearchCV(LogisticRegression(), {'C': [.1, 1, 10]})

>>> gs = GridSearchCV(Pipeline([('reduce', SelectKBest()),
...                             ('clf', LogisticRegression())]),
...                   {'clf__C': [.1, 1, 10]})

使用searchgrid,我们只需要将分类器包裹在Pipeline中,无需更改参数网格,也不需要添加< span class="docutils literal">clf__ 前缀。从

>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> gs = make_grid_search(lr)

>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> gs = make_grid_search(Pipeline([('reduce', SelectKBest()),
...                                 ('clf', lr)]))
您想更改管道中正在搜索的估计器。

在scikit-learn中,想用PCA代替SelectKBest,您需要更改

>>> pipe = Pipeline([('reduce', SelectKBest()),
...                  ('clf', LogisticRegression())])
>>> gs = GridSearchCV(pipe,
...                   {'reduce__k': [5, 10, 20],
...                    'clf__C': [.1, 1, 10]})

>>> pipe = Pipeline([('reduce', PCA()),
...                  ('clf', LogisticRegression())])
>>> gs = GridSearchCV(pipe,
...                   {'reduce__n_components': [5, 10, 20],
...                    'clf__C': [.1, 1, 10]})

注意< span class="docutils literal">reduce__k 变成了< span class="docutils literal">reduce__n_components。

在searchgrid中,这更容易,因为您可以在同一地方更改估计器和参数

>>> reduce = set_grid(SelectKBest(), k=[5, 10, 20])
>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> pipe = Pipeline([('reduce', reduce),
...                  ('clf', lr)])
>>> gs = make_grid_search(pipe)

变成

>>> reduce = set_grid(PCA(), n_components=[5, 10, 20])
>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> pipe = Pipeline([('reduce', reduce),
...                  ('clf', lr)])
>>> gs = make_grid_search(pipe)
在多个网格中进行搜索。

您想从上一个示例中获取代码,但要在同一搜索中搜索特征选择和PCA缩减。

没有searchgrid

>>> pipe = Pipeline([('reduce', None),
...                  ('clf', LogisticRegression())])
>>> gs = GridSearchCV(pipe, [{'reduce': [SelectKBest()],
...                           'reduce__k': [5, 10, 20],
...                           'clf__C': [.1, 1, 10]},
...                          {'reduce': [PCA()],
...                           'reduce__n_components': [5, 10, 20],
...                           'clf__C': [.1, 1, 10]}])

使用searchgrid

>>> kbest = set_grid(SelectKBest(), k=[5, 10, 20])
>>> pca = set_grid(PCA(), n_components=[5, 10, 20])
>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> pipe = set_grid(Pipeline([('reduce', None),
...                           ('clf', lr)]),
...                 reduce=[kbest, pca])
>>> gs = make_grid_search(pipe)

由于您不再关心步骤名称,可以使用< cite>searchgrid.make_pipeline 来更简单地表达替代步骤

>>> from searchgrid import make_pipeline
>>> kbest = set_grid(SelectKBest(), k=[5, 10, 20])
>>> pca = set_grid(PCA(), n_components=[5, 10, 20])
>>> lr = set_grid(LogisticRegression(), C=[.1, 1, 10])
>>> pipe = make_pipeline([kbest, pca], lr)
>>> gs = make_grid_search(pipe)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

searchgrid-0.2.0.tar.gz (6.2 kB 查看哈希值)

上传时间

由以下提供支持