Infer.NET——为热爱概率的人准备的库
目录
介绍
背景
概率介绍
在VS 2017社区版中安装Infer.NET库
一个Infer.NET程序
使用代码
结论
介绍
Infer.NET是一个开源库,可用于创建概率编程系统。我们可以使用Infer.NET来解决许多不同类型的机器学习问题,例如分类,推荐等。在本文中,我将介绍如何在Visual Studio 2017社区版中使用 infer.NET库。Infer.NET同时支持C#和F#,我将在本文中使用C#。
背景
概率介绍
假设我们有一个包含六个球的盒子——一个红球和五个蓝球。我们被允许随机拿起球2次:
当我们拿起一个球时,有两种可能的结果:红球或蓝球。挑选红球的概率是p = 1/6 = 0.17,并且挑选蓝球的概率是q = 1 - p = 5/6 = 0.83。如果我们两次拿球,可能会出现四种可能的结果,如下表所示:
为了表示每次拾取,我们可以使用布尔变量,其中true表示“拾取红球”,false表示“拾取蓝球”。布尔值上的分布有一些概率为真,称为伯努利分布。因此,我们可以通过从伯努利分布创建布尔随机变量来模拟每次拾取。
请注意,首次拾取和第二次拾取是独立的。因此,在拾取上挑选红球的概率和在第二次拾取上挑选红球的概率是(1/6 * 1/6)= 0.17 * 0.17 = 0.0289(你可以在这里找到关于伯努利分布的细节)。
很好,现在我们将使用infer.NET来计算我们的概率。但首先,我们需要在Visual Studio 2017社区版中安装infer.NET。
在VS 2017社区版中安装Infer.NET库
为简单起见,我们将创建一个控制台应用程序C#(.NET Framework)并命名它为InferDotNetDemo。我们还需要选择.NET Framework的4.7版本(或更高版本),因为我们可能会在早期版本中遇到一些错误。
在Solution Explorer窗口中,我们还将Program.cs重命名为InferDotNetDemo.cs:
我们可以通过右键单击InferDotNetDemo项目并选择Manage NuGet Packages 来安装Infer.NET :
在NuGet窗口中,我们选择Browse选项卡并在Search字段中输入'Infer.net'。最后,我们选择Microsoft.ML.Probabilistic.Compiler并单击Install按钮:
单击“预览更改”中的“确定”。
然后在许可证接受中单击我接受:
几秒钟后,Visual Studio将在“输出”窗口中响应一条消息:
一个Infer.NET程序
Infer.NET程序包括三个关键步骤:
- 步骤1:概率模型的定义
所有Infer.NET程序都需要定义概率模型。在我们的演示中们可以通过定义随机变量来定义模型,这些随机变量代表伯努利分布的第一次拾取和第二次拾取。
- 第2步:创建推理引擎
所有推论都是通过使用InferenceEngine类来推理引擎来实现的。
- 第3步:执行推理查询
给定推理引擎,您可以使用Infer()查询变量的边际分布。
使用代码
到目前为止,我们可以为我们的程序编写一些C#代码行。首先,我们将通过定义伯努利分布中的随机变量来定义概率模型,其中1/6 = 0.17为真:
Variable<bool> firstPicking = Variable.Bernoulli(0.17);
Variable<bool> secondPicking = Variable.Bernoulli(0.17);
制作随机变量的另一种方法是使用包含其他随机变量的表达式来导出它,如下所示:
Variable<bool> bothReds = firstPicking & secondPicking;
这里,只有两个firstPicking和secondPicking都是true时,bothReds才是true,因此它代表了两个选择都是红球的情况。
其次,我们创建了一个变量bothReds,我们将通过创建一个使用默认推理算法(Expectation Propagation)的推理引擎来找出它的分布:
InferenceEngine ie = new InferenceEngine();
我们可以使用此引擎的Infer()方法来查询bothReds变量的边际分布:
Console.WriteLine("Probability both pickings are a red ball: " + ie.Infer(bothReds));
InferDotNetDemo.cs文件中的所有代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ML.Probabilistic.Models;
using Microsoft.ML.Probabilistic.Algorithms;
using Microsoft.ML.Probabilistic.Distributions;namespace ConsoleApp1
{class InferDemoProgram{static void Main(string[] args){//**************Step 1: Define a probabilistic model*************************//creating a random variable for first pickingVariable<bool> firstPicking = Variable.Bernoulli(0.17);//creating a random variable for second pickingVariable<bool> secondPicking = Variable.Bernoulli(0.17);//creating a random variable based on other random variablesVariable<bool> bothReds = firstPicking & secondPicking;//**************Step 2: Creating an inference engine*************************InferenceEngine ie = new InferenceEngine();//**************Step 3: Execution of an inference query*************************//Using Expectation Propagation - the default algorithmif (!(ie.Algorithm is VariationalMessagePassing)){Console.WriteLine("Probability both pickings are a red ball: " + ie.Infer(bothReds));}elseConsole.WriteLine("Not run with Variational Message Passing!");Console.ReadKey();}}
}
运行我们的应用程序并获得如下所示的结果:
结论
在本文中,我只介绍了基本的Infer.NET库。如果您想了解有关此库的更多信息,可以参考下面的一些最佳来源:
- Infer.NET用户指南
- 通过概率编程进行机器学习作者:Yordan Zaykov
- 使用Infer.NET对竞争对手进行评级作者:James McCaffrey
原文地址:https://www.codeproject.com/Articles/1278872/Infer-NET-A-Library-for-People-Who-Love-Probabilit
Infer.NET——为热爱概率的人准备的库相关推荐
- 海豚湾在哪_前任3中的海豚湾在哪里揭晓 热爱海洋之人的梦中圣地
在电影<前任3>中,孟云和林佳约好了一起去海豚湾看海豚,但是最终两人却以分手告终.而令人好奇的是<前任3>中的海豚湾在哪里呢?一起来了解下吧. <前任3>讲述的是一 ...
- 我是学计算机的表情包,我是一个热爱学习的人表情包
聊天过程中我们总是喜欢一言不合就斗图装B,斗图谁输谁尴尬.大家是不是都想让自己的表情库厉害一些呢丰富一些呢?小编给大家带来了我是一个热爱学习的人表情包,喜欢斗图的小伙伴们速度下载搜藏了. 我是一个热爱 ...
- 《真正热爱互联网的人,从业务的探索中获得乐趣》——Zappos
存在两种互联网从业者: 一种是真正热爱互联网的人,他们从业务的探索中获得乐趣,至于商业成功带来的衍生的其他利益,则被视为是额外的: 另一种,从事这一行业只是手段,或者面对异性时更有吸引力才是他们所追求 ...
- 杭州职业技术学院:“企业人才智选库”助力恩施职院毕业生就业
4月22日,来自湖北恩施职业技术学院计算机应用技术专业的应届毕业生张永鹏在一场杭州的云招聘会上找到了自己心仪的工作,这让年初以来一直饱受疫情影响,没法外出求职的他终于放了心,不再害怕毕业即失业了. 张 ...
- python抽荣耀水晶_教你2种免费拿荣耀水晶的方法,获奖概率让人惊喜,一般人我不告诉他...
在王者荣耀中荣耀水晶一直是许多玩家想要得到的,那一般来说想要获取一个荣耀水晶需要花费大约2000RMB的样子,但是可喜的是王者荣耀这个游戏就是这么的亲民,会时不时的上线一些免费赠送的活动,那今天就告诉 ...
- 向北京以及热爱北京的人推荐个论坛---北京混混网
点击进入[北京混混网] 这里主要介绍了如何在北京生活,包括衣.食.住.行.工作.娱乐以及北京的一些打折信息,感觉对我们这些漂在北京以及扎根北京的人很有帮助:里面也有很多生活以及化妆方面的资料,程序员们 ...
- 【杂谈】如何应对烦人的开源库版本依赖-做一个心平气和的程序员?
平时做开发时最烦人的除了项目不会做,恐怕就是环境依赖的问题了吧. 一个好好的项目,换个环境总是出问题,开源库一升级就挂掉,总有"坏人"搞掉自己的系统库,今天就来随便聊聊吧. 作者 ...
- 复盘:一副牌(54张),三人斗地主,大小王在同一家的概率是多少
复盘:一副牌(54张),三人斗地主,大小王在同一家的概率是多少? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都 ...
- 概率编程编程_概率编程语言的温和介绍
概率编程编程 I recently started a new newsletter focus on AI education. TheSequence is a no-BS( meaning no ...
最新文章
- android对话框的使用(下)
- 如何使用 50 行 Python 代码制作一个计算器
- 牛客 - 阔力梯的树(树上启发式合并)
- mysql中select 的题型_MYSQL经典题型详情解析
- 【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
- R实例:非典型的数据可视化(一)
- Java 在Excel中添加水印
- 红外遥控切歌(好运来/天空之城)、红外模块的应用
- Java 用“等待-通知”机制优化循环等待
- 微信小程序为啥有的时候不显示封面广告、以及其他广告
- 腾讯系互联网券商富途证券将赴美IPO,最高融资3亿美元...
- 中序和后序(前序和中序)序列确定一颗二叉树
- Python与图像处理7
- 计算机图形学 -- 光栅图形学扫描线填充多边形[转]
- HIT-ICS Hello‘s P2P
- Activity的相关知识(一)
- 君正Magik算法平台介绍
- 周三直播 | PaddleGAN又开金手指,零门槛人像转卡通
- 高等数学——傅里叶级数
- ELK日志处理之使用Grok解析日志