用于构建scikit学习网格搜索的参数网格的帮助程序
searchgrid的Python项目详细描述
帮助构建scikit学习网格搜索的参数网格 <;scikit learn:grid_search>;。
为中的sklearn.model\u selection.gridSearchCv<;gridSearchCv>;指定参数网格 scikit learn可能很烦人,特别是在以下情况下:
- 您可以更改代码,将一些估计器包装在^{tt1}中$ 然后需要使用大量 __s
- 您正在多个网格上搜索(即您的param_grid是 列表)并希望对所有这些网格进行更改
SearchGrid允许您定义(和更改)网格以及 esimator,减少工作量,有时还编写代码。 它存储要在每个特定估计器上搜索的参数 反对。这使得 指定复杂的参数网格,意味着您不需要更新 网格当你改变你的复合估计器的结构。
它提供两个主要功能:
- searchgrid.set_grid用于指定要 搜索估计器或gp核。
- search grid.make_grid_search用于构造 GridSearchCV使用参数空间的对象估计器被注释 和。
其他用于构建搜索空间的实用程序包括:
- 搜索网格.构建参数网格
- 搜索网格.make_pipeline
- 搜索网格。合并
快速启动
如果安装了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
- 在管道中包装估计器。
您有一个在参数上搜索分类器的代码。 现在要在管道中搜索该分类器。 使用普通的旧scikit learn,您必须插入__s并更改:
>>> gs = GridSearchCV(LogisticRegression(), {'C': [.1, 1, 10]})
收件人:
>>> gs = GridSearchCV(Pipeline([('reduce', SelectKBest()), ... ('clf', LogisticRegression())]), ... {'clf__C': [.1, 1, 10]})
使用searchgrid,我们只需将分类器包装在管道中,并且 无需更改参数网格,只需添加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]})
注意reduce__k变成了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约简。
不带搜索网格:
>>> 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]}])
使用搜索网格:
>>> 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)
既然你不再关心步骤名了,就用 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)