infer.net机器学习翻译系列文章将进行连载,感兴趣的朋友请收藏或关注
欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利。
本人正在研究基于infer.net组件,并计划将其应用于实际的预测之中,该组件功能强大,封装很完善,但也有很多难以理解的地方,同时官方也给出了大量的例子,限于个人精力有限,更新时间较慢,也希望有兴趣的朋友一起来完成该项工作。
该组件的采用的是microsoft research license agreement 授权,non-commercial use only,除了商业使用,都可以,自己看着办。
支持单变量和多变量变量、也支持连续型和离散型变量。可以使用大量的各种因素进行建模,包括算术运算、线性代数、范围和积极约束、布尔操作符等等。支持不同模型的组合,以及不同类型的组合。【附:infer.net的内部使用了the model specification language (msl) 建模语言,由于该组件不允许用于商业,因此源代码也没有全部开发,无法也无法搞清楚其原理】
内置了多种推理算法,如expectation propagation, belief propagation (a special case of ep), variational message passing and gibbs sampling.这几个专业词汇暂时还不懂意义。
现有的在大多数推理程序执行过程中的开销,减慢了推理过程。而infer.net将推理模型编译为能够独立执行的源代码,不需要额外的开销。它也可以直接集成到您的应用程序。此外,也可以查看,分步执行源代码,或者使用标准的开发工具进行修改。
概率分布、因素、消息操作和推理算法都可以由用户添加。infer.net使用一个插件架构,使其开放性,适应性更强。而内置库支持多种模型和推理操作;但总会有特殊的情况,需要新的因素或者分布类型或者算法,这种情况下,用户可以编写自定义代码,自由与内置功能进行混合,以减少一些额外的工作。
infer.net通过zip压缩包进行发行,解压后,可以看到如下的文件夹目录:
“bin,learners,source(distributions,factors,wrappers),samples(c#,f#)”
bin文件夹包含了infer.net的dll文件:
1.infer.compiler.dll是一个使用infer.net api编写的将模型描述转换为推理代码的编译器;
2.infer.runtime.dll是一个执行推理代码的程序集
一般开发过程中只需要引用这两个dll,但在某些部署场景你可能只需要infer.runtime.dll。
bin文件夹还包括了一些例子的生成文件,以及几个项目的生成文件。
例子文件夹中有2个完整项目的源代码,1个是贝叶斯分类器,1个是推荐系统【比较复杂,还没开始研究】
下面是一个使用infer.net计算抛掷2枚硬币,结果都是正面的概率的例子,代码如下:
程序输出为:
上述结果说明2面同时为正面的概率为0.25。上述简单的例子,包括了使用infer.net编程的几个关键步骤。
1.定义概率模型:所有infer.net程序都需要明确定义的概率模型。上述程序的前3行就是定义3个随机变量。
2.创建推理引擎(推理机):所有的推理都是使用推理引擎进行的,在使用之前,必须创建和配置推理引擎。如第四行,使用默认的推理算法创建的推理引擎。
下图是infer.net的推理过程:
过程如下:
1.首先用户创建1个 模型定义,并声明一些和模型相关推理查询需求;
2.用户将模型定义和推理查询传递给模型编译器,后者使用指定的推理算法,创建需要执行这些查询模型的源代码。这个源代码可以写入一个文件,如果需要,也可以直接使用。
3.c#编译器编译源代码来创建一个编译过的算法。这可以手动执行,或通过推断方法自动执行。
4.使用一组观测值(数据),推理引擎根据用户指定的设置,执行编译算法,以便产生推理查询要求的边际分布。可以对观测值重复不同的设置,而不需要重新编译算法。
另外本文的翻译电子版,以及该项目相关的翻译资源,将在最终完成后逐步开放,请关注本博客。
翻译很累,写篇文章也费时间,兄台顺手点个推荐吧。