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枚硬币,结果都是正面的概率的例子,代码如下:

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

程序输出为:

 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

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

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

【原创】.NET平台机器学习组件-Infer.NET连载(一)介绍的更多相关文章

  1. 【原创】.NET平台机器学习组件-Infer.NET连载(二)贝叶斯分类器

                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 微软Infer.NET机器学习组件文章目录:http:/ ...

  2. NET平台机器学习组件-Infer.NET

    NET平台机器学习组件-Infer.NET(三) Learner API—数据映射与序列化 阅读目录 关于本文档的说明 1.基本介绍 2.标准数据格式的映射 3.本地数据格式映射 4.评估数据格式映射 ...

  3. .NET平台机器学习组件-Infer.NET(三) Learner API—数据映射与序列化

             所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 微软Infer.NET机器学习组件:http://www.cnblo ...

  4. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  5. 【目录】微软Infer.NET机器学习组件文章目录

    本博客所有文章分类的总目录链接:http://www.cnblogs.com/asxinyu/p/4288836.html 1.微软Infer.NET机器学习组件目录 1. Infer.NET连载(一 ...

  6. .NET平台机器学习资源汇总,有你想要的么?

    接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的, ...

  7. .NET平台机器学习

    .NET平台机器学习资源汇总,有你想要的么? 接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分 ...

  8. .NET平台机器学习资源汇总,有你想要的么?(转)

    出处:http://www.cnblogs.com/asxinyu/p/4422050.html 阅读目录 1.开源综合类 2.开源.NET平台非综合类 3.其他资源与技术博客 4.我的100篇博客之 ...

  9. winform快速开发平台 -> 工作流组件(仿GooFlow)

    对于web方向的工作流,一直在用gooflow对于目前我的winform开发平台却没有较好的工作流组件.  针对目前的项目经验告诉我们.一个工作流控件是很必要的. 当然在winform方面的工作流第三 ...

随机推荐

  1. flash跨域访问,crossdomain.xml,error #2048

    最近遇到了flash的万年老梗,跨域访问的问题.之前一直没有处理过这类问题,是因为做项目的时候别人已经处理好了.真到自己遇到的时候,还是很费脑筋的. 1遇到的问题 客户端发布到网页的时候,socket ...

  2. Java:单例模式的七种写法

    第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton ( ...

  3. Redis安装配置(Windows版)

    近期项目中引入Redis,故记录下来,方便日后查看. 可参考(http://www.cnblogs.com/happyday56/p/3916388.html)不说废话,直奔主题. 一.安装前的准备: ...

  4. grunt-connect-proxy解决开发时跨域问题

    最近的项目中前后端是完全分离开发的,前端用grunt管理项目.这样就会导致一个问题:开发时前端调用后台的接口时因为不在一个服务器,所以会出现跨域问题.但是也不能用JSONP或CROS方式实现真正的跨域 ...

  5. 输入/输出系统的四种不同工作方式对CPU利用率比较

    程序控制工作方式:输入/输出完全由CPU控制,整个I/O过程中CPU必须等待其完成,因此对CPU的能力限制很大,利用率较低 程序中断工作方式:CPU不再定期查询I/O系统状态,而是当需要I/O处理时再 ...

  6. HDU(1285)—确定比赛名次

    /*最近都在复习期末了...好久没做题,都快没智商了*/   有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后 ...

  7. 跨域无法获取自定义header的问题

    同域的时候,header里面的参数可以随便自己定义.服务端都是可以获取的. 但是跨域的时候,除了设置 <add name="Access-Control-Allow-Origin&qu ...

  8. 浅谈P2P金融

    自从李总理开发互联网大会,提出“互联网+”,好像与互联网相在的所有事情都火起来了.上至80岁的老头,下至十多岁的孩童,都知道了这个词“互联网+”.虽然大家可能对”互联网+“的概念都只是一支半解,但是像 ...

  9. C#_基础:委托速讲

    1定义:委托=函数指针 C# public delegate void Test(string str); 等价C++ public void (*Test)(string str): 委托赋值(初始 ...

  10. asp.net identity UserSecurityStamp 的作用

    UserSecurityStamp 主要是用来对用户安全相关信息做一个快照. 在使用asp.net identity 的 CreateAsync(TUser user) 创建一个用户的时候,如果开启了 ...