【原創】.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

  另外本文的翻譯電子版,以及該項目相關的翻譯資源,將在最終完成后逐步開放,請關注本博客。

      翻譯很累,寫篇文章也費時間,兄台順手點個推薦吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM