为scikit-learn网格搜索构建参数网格的帮助程序
项目描述
帮助构建scikit-learn网格搜索的参数网格。
指定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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b3e660a4579d4ebd71081b21254ee945f43e2971bd1adab5d0826e0a340330f1 |
|
MD5 | 545ffd93cebe33ed8577a3fa90e9781e |
|
BLAKE2b-256 | a2cd10e39018f721b77a8decbb3f6442e4c0f0ad6cab2999aec2cf9af3b3d1b4 |