使机器学习和其他计算机实验自动化

experitur的Python项目详细描述


快速性

 src=build statuscodecovdocumentation status

experitur自动化机器学习和其他计算机实验。包括网格搜索和恢复中止的实验。没有锁定,您的所有数据都可以以基于文本的机器可读yaml格式轻松访问。

example

实验说明

每个实验都在一个普通的python文件中描述。@experiment装饰符用于标记实验入口点。

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...

参数网格

实验的核心是它的参数网格。它的工作方式类似于sklearn.model_selection.parametergrid。每个参数都有一个可以接受的值列表。从每个参数的值的交叉积中产生许多试验。

入口点

实验是用@experiment修饰的正则函数(除非它是抽象的派生的)。执行时,使用当前试用版调用函数。它可能会返回结果字典。

签名:(试用)->;dict

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""print("parameters:",pformat(parameters))return{}

现在,您可以运行实验:

$ experitur run example.py
...

如您所见,run被调用四次,每次组合为[1,2]x[a,b]。

多次实验

python文件可以包含多个实验:

fromexperiturimportexperiment@experiment(...)defexample1(trial):...@experiment(...)defexample2(trial):...

实验遗传

一个实验可以使用parent参数继承另一个实验的设置。

fromexperiturimportexperiment@experiment(...)defexample1(trial):...# Derived  with own entry point:@experiment(parent=example1)defexample2(trial):...# Derived  with inherited entry point:example3=experiment("example3",parent=example2)

参数替换

experitur包含递归参数替换引擎。每个值字符串都被视为递归格式字符串,并使用试验的整个参数集进行解析。

@experiment(parameter_grid={"a1":[1],"a2":[2],"b":[1,2],"a":["{a_{b}}"],})defexample(trial):...
$ experitur run parsub
...

这样,您可以使用依赖于其他设置的设置轻松运行复杂的设置。

递归格式字符串的工作方式与string.formatter类似,但有两个例外:

  1. 递归字段名:字段名本身可以是格式字符串:

    format("{foo_{bar}}", bar="baz", foo_baz="foo") -> "foo"
    
  2. 文本输出:如果格式字符串仅由替换字符串组成字段,不包含格式规范,不执行字符串转换:

    format("{}", 1) -> 1
    

    这允许对非字符串值使用格式字符串。

应用程序

如果要对不同的数据集运行实验,但对每个数据集需要稍有不同的设置,则此功能尤其有用。

假设我们有两个数据集,"bees"和"flowers"。

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
0

实验将对每个数据集执行一次,其中"蜜蜂"数据集的试验["作物"]==10和"花"数据集的试验["作物"]==0

试用版对象

每个实验都会收到一个试验对象,该对象允许访问试验的参数和元数据。

参数通过[]运算符访问(例如trial["a"]),元数据通过运算符访问(例如trial.wdir)。

访问父数据

文件

当experitur执行脚本时,它会在dox文件所在的目录中创建以下文件结构:

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
1

<;script>;/<;实验id>;/<;试用id>;/experitur.yaml包含参数和试用结果,例如:

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
2

大多数项目应该是不言而喻的。参数是传递到入口点的参数。id是从参数网格中变化的参数派生的。这样,您就可以轻松地解释文件结构。

收集结果

使用experitur collect script.py将所有实验的结果(包括参数和元数据)收集到位于script/results.csv的单个csv文件中

调用函数和默认参数

实验函数可能会调用其他具有默认参数的函数。 experitur为您提供一些实用程序函数,用于提取这些默认参数,并将它们添加到参数列表中。

对于以下示例,假设trial["p_a"]=1trial["p_b"]=2

  • 试用版。不带前缀(前缀:str,参数:dict)->;dict:提取所有以前缀开头的参数

    fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
    3
  • 试用版。应用(前缀:str,callable_u:callable,*args,**kwargs):callcallable_u参数以前缀开始

    fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
    4
  • trial.record_defaults(前缀,[可调用的]**默认值):为以前未设置的参数设置默认值。defaults中的值覆盖可调用的默认参数

    fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
    5

最好过度使用set_default_parametersapply_parameters。这样,结果文件始终包含完整的参数集。

有关简单示例,请参见examples/example.py。

安装

experitur打包在pypi上

fromexperiturimportexperiment@experiment(parameter_grid={"parameter_1":[1,2,3],"parameter_2":["a","b","c"],})defexample(trial):"""This is an example experiment."""...
6

请注意,该软件包目前正在进行大量开发,任何时候都可能发生变化!

示例

  • examples/example.py:一个非常基本的示例,显示了设置默认参数和应用参数的工作过程。
  • examples/classifier.py:尝试使用sklearn.svc的不同参数对手写数字进行分类(mnistmnist)。运行该示例,添加更多参数值,并查看如何在下一次运行期间跳过已存在的配置。

贡献

Experitur正在积极开发中,因此非常感谢任何用户反馈、错误报告、评论、建议或请求。请使用存储库中的漏洞跟踪器和fork。

兼容性

experitur是用python 3.5、3.6和3.7测试的

类似软件

  • 神圣的

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java向嵌入式Jetty添加多个端点   java如何在JAXWS处理程序中区分请求和响应?   使用Scenebuilder for JAVAFx的登录应用程序的java MVC体系结构   java对话框将不显示   Windows 7上的Java系统变量   java删除动态添加的面板   java将Javadoc嵌入到HTML网站中   带有URL编码数据的java Spring RestTemplate POST请求   java JAXR只运行一次函数   HttpClient缺少java依赖项   java深层反射比较   基于javarmi和CORBA的分布式计算   如何使用当前数据库时间从Java更新MongoDB?   java通过光标保存数据调试时显示错误数据