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

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 MIMessage附件   java试图从JSON数组向数据库插入数据   铸造java。util。ArrayList无法转换为java。util。矢量   在到达末尾后从头开始读取csv文件(Java、OpenCSV)   Java swing如何在另一个线程中打开框架   java如何为集合正确编写此比较器。排序(arrayList、comparator)?   JavaOOD将配置传递给外部类的最佳方式   java不确定如何使用switch语句从main()调用要运行的方法   java循环菜单以在选择后显示   java将位置对象转换为地址(谷歌地图)   java Hazel cast客户端端口问题   使用JarJar重新打包工具的java   使用Java Netscape目录LDAP API和二进制筛选器值   java如何从Google App Engine下载应用程序源文件   java如何居中javafx场景图“摄影机”   java调用servlet而不提交并停留在同一个JSP页面中   将文本文件加载到HashMap<Integer,List<String>>java中   JavaFX平台。重新加载站点后运行更高版本()