开发者社区> 数据之巅> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【原创】.NET平台机器学习组件-Infer.NET连载(一)介绍

简介:
+关注继续查看
Infer.NET机器学习翻译系列文章将进行连载,感兴趣的朋友请收藏或关注

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

微软Infer.NET机器学习组件文章目录:http://www.cnblogs.com/asxinyu/p/4329742.html

关于本文档的说明

  本文档基于Infer.NET 2.6对Infer.NET User Guide进行中文翻译,但进行了若干简化和提炼,按照原网站的思路进行,但不局限与其顺序。

  欢迎传播分享,必须保持原作者的信息,但禁止将该文档直接用于商业盈利。

  本人正在研究基于Infer.NET组件,并计划将其应用于实际的预测之中,该组件功能强大,封装很完善,但也有很多难以理解的地方,同时官方也给出了大量的例子,限于个人精力有限,更新时间较慢,也希望有兴趣的朋友一起来完成该项工作。

     Email:asxinyu@qq.com

  本文章地址 http://www.cnblogs.com/asxinyu/p/4252769.html

1.基本介绍

  Infer.NET是微软剑桥研究院基于.NET平台开发的一款机器推理组件,官方网站http://research.microsoft.com/en-us/um/cambridge/projects/infernet/default.aspx

  该组件的采用的是Microsoft Research License Agreement 授权,Non-Commercial Use Only,除了商业使用,都可以,自己看着办。

      本章节的英文原文为,在这里

1.1 Infer.NET是什么?

Infer.NET是一个概率图模型中(graphical models)用于运行贝叶斯推理机(Bayesian inference)的框架。如果对概率图模型或者贝叶斯推理的意义不了解,你可以参考一下相关资源文件,在Resources and References page页面。Infer.NET为各种应用程序所需要推理提供了先进的消息传递算法和统计程序。Infer.NET 与现有的一些推理软件有下列区别:

1.1.1 丰富的建模语言

支持单变量和多变量变量、也支持连续型和离散型变量。可以使用大量的各种因素进行建模,包括算术运算、线性代数、范围和积极约束、布尔操作符等等。支持不同模型的组合,以及不同类型的组合。【附:Infer.NET的内部使用了The model specification language (MSL) 建模语言,由于该组件不允许用于商业,因此源代码也没有全部开发,无法也无法搞清楚其原理】

1.1.2 多种推理算法

内置了多种推理算法,如Expectation Propagation, Belief Propagation (a special case of EP), Variational Message Passing and Gibbs sampling.这几个专业词汇暂时还不懂意义。

1.1.3 为大规模推理而设计

现有的在大多数推理程序执行过程中的开销,减慢了推理过程。而Infer.NET将推理模型编译为能够独立执行的源代码,不需要额外的开销。它也可以直接集成到您的应用程序。此外,也可以查看,分步执行源代码,或者使用标准的开发工具进行修改。

1.1.4 用户可以进行扩展

概率分布、因素、消息操作和推理算法都可以由用户添加。Infer.NET使用一个插件架构,使其开放性,适应性更强。而内置库支持多种模型和推理操作;但总会有特殊的情况,需要新的因素或者分布类型或者算法,这种情况下,用户可以编写自定义代码,自由与内置功能进行混合,以减少一些额外的工作。

可以看看一个简单使用Infer.NET的例子。这个文档中的示例代码是C#,但Infer.NET支持.NET平台的所有语言。 

1.2 安装文件夹

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。

Infer.FSharp.dll是为了标准的F#语言调用所做的一个封装。【不懂F#,也没有去深究】

Bin文件夹还包括了一些例子的生成文件,以及几个项目的生成文件。

例子文件夹中有2个完整项目的源代码,1个是贝叶斯分类器,1个是推荐系统【比较复杂,还没开始研究】

1.3 一个简单的例子

下面是一个使用Infer.NET计算抛掷2枚硬币,结果都是正面的概率的例子,代码如下:

1 Variable<bool> firstCoin = Variable.Bernoulli(0.5);
2 Variable<bool> secondCoin = Variable.Bernoulli(0.5);
3 Variable<bool> bothHeads = firstCoin & secondCoin;
4 InferenceEngine ie = new InferenceEngine();
5 Console.WriteLine("Probability both coins are heads: "+ie.Infer(bothHeads));

程序输出为:

1 Probability both coins are heads: Bernoulli(0.25)

上述结果说明2面同时为正面的概率为0.25。上述简单的例子,包括了使用Infer.NET编程的几个关键步骤。

1.定义概率模型:所有Infer.NET程序都需要明确定义的概率模型。上述程序的前3行就是定义3个随机变量。

2.创建推理引擎(推理机):所有的推理都是使用推理引擎进行的,在使用之前,必须创建和配置推理引擎。如第四行,使用默认的推理算法创建的推理引擎。

3.执行推理查询:给定一个推理引擎,就可以使用Infer()方法来查询变量的边际分布。例子的最后一行中,引擎就去推理2个都是正面的边际分布。你还可以在这里找到更多“运行推理”的细节。

1.4 Infer.NET工作原理

下图是Infer.NET的推理过程:

 过程如下:

1.首先用户创建1个 模型定义,并声明一些和模型相关推理查询需求;

2.用户将模型定义和推理查询传递给模型编译器,后者使用指定的推理算法,创建需要执行这些查询模型的源代码。这个源代码可以写入一个文件,如果需要,也可以直接使用。

3.C#编译器编译源代码来创建一个编译过的算法。这可以手动执行,或通过推断方法自动执行。

4.使用一组观测值(数据),推理引擎根据用户指定的设置,执行编译算法,以便产生推理查询要求的边际分布。可以对观测值重复不同的设置,而不需要重新编译算法。

本文章原始地址 http://www.cnblogs.com/asxinyu/p/4252769.html

1.5 Frequently Asked Questions  

  常见问题,比较简单,暂时没有翻译的必要,地址在这里

1.6 Resources and References

  常见问题,比较简单,暂时没有翻译的必要,地址在这里

2.资源下载

  这里提供Infer.NET 2.6的下载,包括了例子和基础的源码。下载地址:链接:http://pan.baidu.com/s/1o6FmVe6 密码:12wz

  如果本文章资源下载不了,或者文章显示有问题,请参考 本文原文地址http://www.cnblogs.com/asxinyu/p/4252769.html

  另外本文的翻译电子版,以及该项目相关的翻译资源,将在最终完成后逐步开放,请关注本博客。

      翻译很累,写篇文章也费时间,兄台顺手点个推荐吧。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云机器学习PAI-ModelHub公共模型部署与Python调用示例
自然语言处理NLP(Natural Language Processing)是人工智能和语言学领域的分支学科,能够挖掘自然语言文本蕴含的信息和知识。PAI提供多种已经训练好的自然语言处理类模型供您使用,包括新闻分类、金融文本匹配、中文基础NER及BERT文本向量化模型。本文以新闻分类模型为例,介绍如何将公共模型库的现有模型部署到EAS,然后使用Python SDK演示如果对部署的模型进行调用。
1385 0
前端走进机器学习生态,在 Node.js 中使用 Python
从今天开始,你就可以开始看着 Python 的文档,使用 JavaScript 来“学习和使用”机器学习和深度学习了!
1891 0
Python机器学习小知识:pandas.apply
pandas.apply函数是Python在机器学习处理数据时常用的一个方法。apply函数会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。该函数定义如下:DataFrame.apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)其中,func 参数是函数名,相当于C/C++的函数指针。
749 0
为何我们用 Go 而非 Python 编写机器学习基础设施平台?
Go 又称 Golang,是 Google 开发的一种静态强类型、编译型、并发型且具有垃圾回收功能的编程语言。Go 语言于 2009 年 11 月正式宣布推出并开放源代码,开始在 Linux 及 Mac OS X 平台上进行了实现,后追加 Windows 系统下的实现。
1446 0
Python机器学习基础教程系列
python机器学习基础教程,送给各位爱学的小伙伴
1180 0
带你读《Python机器学习》之二:Python与数据科学
本书讲解了如何使用Python的核心元素以及强大的机器学习库,同时还展示了如何正确使用一系列统计模型。本书可作为学习数据科学的初学者及想进一步拓展数据科学领域认识的读者的参考书。同样,本书也适合计算机等相关专业的本科生、研究生阅读。全书共13章,除了简要介绍机器学习及Python在机器学习中的应用,还系统讲述了数据分类、数据预处理、模型优化、集成学习、回归、聚类、神经网络、深度学习等内容。本书将机器学习背后的基本理论与应用实践联系起来,通过这种方式让读者聚焦于如何正确地提出问题、解决问题。
1124 0
+关注
数据之巅
专注于.NET平台开源项目,微软Power BI技术与机器学习算法
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PHP在机器学习上的应用及云深度学习平台的架构设计与实现
立即下载
PAI分布式机器学习平台
立即下载
阿里云机器学习PAI-DSW入门指南
立即下载