【原創】.NET平臺機器學習元件-Infer.NET連載(一)介紹
關於本文件的說明
本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。
歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。
本人正在研究基於Infer.NET元件,並計劃將其應用於實際的預測之中,該元件功能強大,封裝很完善,但也有很多難以理解的地方,同時官方也給出了大量的例子,限於個人精力有限,更新時間較慢,也希望有興趣的朋友一起來完成該項工作。
1.基本介紹
該元件的採用的是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.使用一組觀測值(資料),推理引擎根據使用者指定的設定,執行編譯演算法,以便產生推理查詢要求的邊際分佈。可以對觀測值重複不同的設定,而不需要重新編譯演算法。
1.5 Frequently Asked Questions
常見問題,比較簡單,暫時沒有翻譯的必要,地址在這裡。
1.6 Resources and References
常見問題,比較簡單,暫時沒有翻譯的必要,地址在這裡。
2.資源下載
這裡提供Infer.NET 2.6的下載,包括了例子和基礎的原始碼。下載地址:連結:http://pan.baidu.com/s/1o6FmVe6 密碼:12wz
另外本文的翻譯電子版,以及該專案相關的翻譯資源,將在最終完成後逐步開放,請關注本部落格。
翻譯很累,寫篇文章也費時間,兄臺順手點個推薦吧。
相關推薦
【原創】.NET平臺機器學習元件-Infer.NET連載(一)介紹
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET元件,並
【原創】.NET平臺機器學習元件-Infer.NET連載(二)貝葉斯分類器
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET元件,並
.NET平臺機器學習元件-Infer.NET(三) Learner API—資料對映與序列化
關於本文件的說明 本文件基於Infer.NET 2.6對Infer.NET User Guide進行中文翻譯,但進行了若干簡化和提煉,按照原網站的思路進行,但不侷限與其順序。 歡迎傳播分享,必須保持原作者的資訊,但禁止將該文件直接用於商業盈利。 本人正在研究基於Infer.NET
.NET平臺開源專案速覽(13)機器學習元件Accord.NET框架功能介紹
Accord.NET Framework是在AForge.NET專案的基礎上封裝和進一步開發而來。因為AForge.NET更注重與一些底層和廣度,而Accord.NET Framework更注重與機器學習演算法以及提供計算機視訊、音訊、訊號處理以及統計應用相關的解決方案。該專案使用C#語言編寫,專
.NET平臺機器學習
閱讀目錄 .NET平臺機器學習資源彙總,有你想要的麼? 1.開源綜合類 2.開源.NET平臺非綜合類 3.其他資源與技術部落格 4.我的100篇部落格之路 回到目錄 .NET平臺機器學習資源彙總,有你想要的麼?
【人工智慧】人工智慧與機器學習有關概念的理解
一、什麼是智慧 什麼叫智慧,智慧是什麼? 這個問題簡單嗎,看似簡單;能回答清楚嗎?非常難!這是一個深刻的哲學問題,是一個有關於人何以為人的哲學問題! Intelligence has been defined in many ways to include t
【原創】python遊戲pygame學習筆記(2)--pie遊戲--還要DEBUG
# -*- coding:utf-8 -*- import pygame import sys from pygame.locals import * import math color=200,80,60 width=4 x=300 y=250 radius=2
【資源】100頁機器學習入門完整版,初學者必備!
【導讀】近日,作者Andriy Burkov放出了他撰寫的《The Hundred-Page Machine Learning Book》的這本書的最新版,只有100頁,目標是任何只要有基礎數學知識的人都能看懂的機器學習書籍。這本書的十一個章節最新版都已經在網站上公開,本書將涵蓋監督學習和非監督學習
Machine Learning .NET平臺機器學習
機器學習——深度學習(Deep Learning) https://blog.csdn.net/abcjennifer/article/details/7826917 機器學習系列 https://morvanzhou.github.io/tutorials/machine-learning/ &nb
【面試】2017滴滴機器學習演算法工程師面試
一面: 先自我介紹,然後看著簡歷問我,有用過哪些機器學習的演算法做專案。比如說決策樹用它做過什麼專案沒有?CNN用它做過什麼專案沒有? 我回答沒有,因為現場編我也編不出來。就跟老師說我自己學習的。然後考官就讓我介紹一下決策樹。我就自己介紹(感覺自己介紹的很不
.NET平臺機器學習資源彙總,有你想要的麼?
接觸機器學習1年多了,由於只會用C#堆程式碼,所以只關注.NET平臺的資源,一邊積累,一邊收集,一邊學習,所以在本站第101篇部落格到來之際,分享給大家。部分用過的 ,會有稍微詳細點的說明,其他沒用過的,也是我關注的,說不定以後會用上。機器學習並不等於大資料或者資料探勘,還有有些區別,有些東西可以用來處
【原創】ARM平臺記憶體和cache對xenomai實時性的影響
[TOC] ## 1. 問題概述 對ti am5728 xenomai系統latency測試時,在測試過程中發現,記憶體壓力對latency影響極大,未新增記憶體壓力下資料如下(注:文中所有測試使用預設gravity,對實時任務cpu已使用`isolcpus=1`隔離,另外文中的結論可能只對ARM平臺有效)
【原創】開源.NET排列組合元件KwCombinatorics使用(二)——排列生成
前言 本文今天介紹的.NET開源元件是KwCombinatorics,它是.NET平臺一個高效的生成排列組合序列的開源類庫,它提供了4種生成排列與組合序列的方式。雖然原理和功能都很簡單,但是這個類庫在軟體測試、組合數學以及密碼學等方面都有很大的用處。很早就接觸了這個類庫,以前在一些小程式
【原創】開源.NET排列組合元件KwCombinatorics使用(三)——笛卡爾積組合
前言 本文今天介紹的.NET開源元件是KwCombinatorics,它是.NET平臺一個高效的生成排列組合序列的開源類庫,它提供了4種生成排列與組合序列的方式。雖然原理和功能都很簡單,但是這個類庫在軟體測試、組合數學以及密碼學等方面都有很大的用處。很早就接觸了這個類庫,以前在一些小
【原創】開源.NET排列組合元件KwCombinatorics使用(一)—組合生成
1.Combination類基本介紹 Combination類是根據指定的物件列表,依次升序選擇非重複數字的組合序列,重複是什麼意思呢?就是指定序列中的元素不重複選擇2次。舉個例子:從 0,1,2,3這4個數中,取出3個元素組成序列,那麼共有這麼幾種組合方式:{0,1,2},{0,1,3},{0,2
機器學習框架ML.NET學習筆記【1】基本概念
一、序言 微軟的機器學習框架於2018年5月出了0.1版本,2019年5月釋出1.0版本。期間各版本之間差異(包括名稱空間、方法等)還是比較大的,隨著1.0版釋出,應該是趨於穩定了。之前在園子裡也看到不少相關介紹的文章,對我的學習提供了不少幫助。由於目前
機器學習框架ML.NET學習筆記【2】入門之二元分類
一、準備樣本 接上一篇文章提到的問題:根據一個人的身高、體重來判斷一個人的身材是否很好。但我手上沒有樣本資料,只能偽造一批資料了,偽造的資料比較標準,用來學習還是蠻合適的。 下面是我用來偽造資料的程式碼: string Filename = "./figure_full.c
機器學習框架ML.NET學習筆記【3】文字特徵分析
一、要解決的問題 問題:常常一些單位或組織召開會議時需要錄入會議記錄,我們需要通過機器學習對使用者輸入的文字內容進行自動評判,合格或不合格。(同樣的問題還類似垃圾簡訊檢測、工作日誌質量分析等。) 處理思路:我們人工對現有會議記錄進行評判,標記合格或不合格,通過對這些記錄的學習形成模型,學習演算法仍採用二元
機器學習框架ML.NET學習筆記【4】多元分類之手寫數字識別
一、問題與解決方案 通過多元分類演算法進行手寫數字識別,手寫數字的圖片解析度為8*8的灰度圖片、已經預先進行過處理,讀取了各畫素點的灰度值,並進行了標記。 其中第0列是序號(不參與運算)、1-64列是畫素值、65列是結果。 我們以64位畫素值為特徵進行多元分類,演算法採用SDCA最大熵分類演算法。
機器學習框架ML.NET學習筆記【6】TensorFlow圖片分類
一、概述 通過之前兩篇文章的學習,我們應該已經瞭解了多元分類的工作原理,圖片的分類其流程和之前完全一致,其中最核心的問題就是特徵的提取,只要完成特徵提取,分類演算法就很好處理了,具體流程如下: 之前介紹過,圖片的特徵是不能採用畫素的灰度值的,這部分原理的臺階有點高,還好可以直接使用通過Te