The results look OK, but how do you know that you aren’t missing something. Would
a more sophisticated model with more variables work even better? If you add enough
variables to a model, you can fit almost anything. However, you generally reach a
point of diminishing returns; at some point additional complexity starts reducing the
model’s quality. You need an
Occam’s razor to find a balance between accuracy and
complexity.
That 「razor」 is an integral part of Bayesian inference, which includes a
robust way to assess model quality called evidence that you can use to pick the best
model.
若是你加了足夠的變量的一個模型,你能夠適合幾乎任何。然而,你通常都會到達
收益遞減點;在某些點上附加的複雜性開始減小模型質量。你須要一個奧卡姆的剃刀,以找到一個平衡之間的精度和複雜性。「剃刀」是貝葉斯推理的一個組成部分,它包括可靠的方法來評估模型的質量,稱爲證據,你能夠用以挑選最好的模型算法
本項目大大簡化了機率規劃問題,
A modelling API,簡化了構建機率模型。即便是複雜的模型也只用幾行代碼來表示。
An inference engine,推理機,結合模型與你的觀察,和處理指定變量的可能值,機率的複雜的數學
三個例子:dom
選擇會議文件、多玩家遊戲中的等級玩家(濃乳一些挑戰須要等級差很少的玩家)、預測點擊率(一些廣告公司根據用戶習慣來預測點記錄表)
機率規劃如何工做,用下面偵探小說來講明:
你回到你的村子和你的鄰居在一個晚上的牌,只發現你的客人已被殘忍地殺害了。你必須發現
罪犯。最初,你知道:
有兩個可能的罪魁禍首:管家和廚師。
有三種可能的謀殺武器:一把屠刀,一把手槍,和一個壁爐鐵棒。
起初,罪犯和殺人的武器是未知的。然而,機率推理和觀察能夠幫助肯定可能的罪犯,並在過程當中提供一個介紹機率規劃的基礎知識。
犯罪嫌疑人和殺人武器:是隨機變量
須要一個變量來表明這個嫌疑人,值是有罪或無罪。沒法肯定究竟是哪一個值,除非嫌疑人坦白。然而能夠預測每一個嫌疑人是罪犯的機率。
隨機變量有一個值域,bool是true,false double是一個範圍如[0, 1] 或[-∞, ∞].每一個隨機變量都有一個聯合機率分佈,來指定每一個可能值的機率。如a bool random variable could have a 70% probability of being true, and a 30% probability of being false
隨機變量罪犯有兩個可能的值:管家和廚師
隨機變量武器有3個可能值:一把屠刀,一把手槍,和一個壁爐鐵棒
機率分佈:
罪犯和武器都是離散分佈,由於實際值一定在這個分佈內,所以每一個值得機率總和爲100%。
開始:先驗分佈
一個事先定義的變量在你以前的理解,已經作了觀察。
對罪犯:管家是一個正直的人,爲這個家庭忠誠地服務了多年。廚師受僱最近,有一個不光彩的過去的謠言。
從這個信息,你估計罪犯先驗是: 管家= 20% 廚師= 80%。
調查:觀察和後驗分佈
先驗是一個有用的起點,但你能夠提升你的理解,若是你在模型中觀察一個或多個隨機變量的實際值,他們再也不是不肯定的值。這讓你能更好的估計其餘變量的分佈。
例如,你知道管家更可能使用了手槍,和廚師更容易使用刀或鐵棒。你收到後驗屍官的報告,你能夠推斷出一個新的罪魁禍首的分佈,
若是殺人的武器是手槍,管家機率增長和廚師機率減小。觀察並不能取代先驗,它仍然是有效的,但能夠用附加的信息來修正prior belief,以便如實反映全部的有效數據。新的分佈稱爲後驗分佈 posterior distribution,或只是"posterior"。事實上,先驗分佈和後延分佈的區別有時是模糊的。一個更通常的和有用的方法來看待先驗和後驗機率是:
prior 表明觀察以前你對系統的理解。
posterior表明你作過觀察以後,對系統的理解。
假如你拿出一個額外的觀察:當謀殺發生後,一個新的驗屍報告給出了一個估計。在收到第2份報告前,你的理解是閱讀第1份報告後的posterior,在邏輯上是prior 對於新的報告(第二次觀察),這種類型的推理是增量的性質,被稱爲在線學習。或者你回到原來的prior belief,並從新考慮全部的證據從零開始。
你的證據越多,你的prior belief 越不重要。確鑿的證據應該推翻任何先前的prior belief ,可是若是你沒有足夠的證據來工做,prior belief 就更重要了。
量化的問題:條件的,聯合的,和邊緣分佈
Quantify the Problem: Conditional, Joint, and Marginal Distributions
前面的討論使得一些通常性的爭論關於如何推斷最有可能的罪魁禍首,但實際數字有點模糊。本節量化討論。
條件分佈
推斷posterior,你必須首先構造一個數學模型的謀殺情景。您已經指定了一個先驗的罪魁禍首。你也知道:
管家保存了老韋布利的手槍在上鎖的抽屜,但廚師不擁有手槍。男管家更可能使用了手槍。
廚師有足夠鋒利的屠刀供應及禁止管家要踏上廚房。管家不太可能用那把刀。
管家比廚師老多了,已經有點虛弱。專職管家不太可能使用一種對身體要求的武器鐵棒。
構建模型的最簡單的方法是估計機率,嫌疑人使用了可能的謀殺武器。這被稱爲條件分佈conditional distribution,,將兇器的分佈,由一個特定的值的條件對罪犯。
Pistol Knife Poker
Cook 5% 65% 30% = 100%
Butler 80% 10% 10% = 100%
每一個嫌疑犯必須使用一個可能的武器,因此每一個條件分佈的和是100%ide
聯合分佈
你可使用罪犯的prior ,及從上一節對偵探小說構建模型的條件分佈,這是一個已知的聯合分佈。
它包含了你對謀殺現場的完整理解,在做任何觀察以前。
Pistol Knife Poker
Cook 4% 52% 24% =80%
Butler 16% 2% 2% =20%
由於武器和嫌疑人的組合必須是這六種可能性之一,它們總和爲100%。
在本文檔中所使用的方法基本上是因果關係的,罪犯選擇武器,並使用它犯下謀殺罪。
罪魁禍首是變量,咱們感興趣的,咱們要推斷posterior ,因此咱們定義了一個prior 變量。
兇器是變量,咱們能夠觀察到,因此咱們定義該變量的條件分佈。
因果關係一般是最簡單的方法構造一個機率模型,即便你想在相反的方向推斷緣由,如謀殺武器知識的基礎上推斷嫌疑人。
邊際分佈Marginal Distributions
可使用聯合分佈來詢問各類問題。假設咱們想知道手槍是殺人武器的機率。你能夠從聯合分配的機率來計算 ,廚師使用的手槍和管家用手槍的可能性。你能夠作一樣的計算,爲刀和鐵棒。在你「總結」後仍然保持的分佈,但聯合分佈中的一個變量,是剩餘變量的邊緣分佈或更廣泛些只是邊際。post
Pistol Knife Poker
Cook 4% 52% 24%
Butler 16% 2% 2%
= 20% = 54% = 26%
到目前爲止,這些邊際基本上告訴你你已經知道的東西。更有趣的是,你作了觀察以後,並添加一些新的信息的混合。
Whodunit: Infer a Posterior
當驗屍官的報告到來時,你可使用兇器的觀察來推斷罪魁禍首的posterior ,它應該包含一個改進的疑犯估計。
posterior 是一個有條件邊緣,罪犯的邊緣,經過觀察發現兇器是手槍的條件。在這種簡單的狀況下,能夠從聯合分佈表中得到posterior
驗屍官的報告意味着你能夠從表格消除刀和撲克。手槍的剩餘值表示每一個嫌疑犯的有罪。然而,它們並非一個適當的分佈;數字不加1。機率
完成計算,將每手槍的邊際值除以(0.20)。歸一化值和產生的後驗分佈的權重表,
結果並不徹底肯定,但它看起來對管家不利!
在實踐中,模型一般要比在這個例子更復雜,使計算後驗機率更困難。應用「真實世界」情景的機率規劃須要一個更爲複雜的方法,對於模型構建和推理。
接下來是什麼:一個更爲先進(複雜)的方法
在前一節的聯合分佈是一個很是簡單的模型,只有2變量和一小部分可能的值。而對謀殺的觀察武器有力地代表,管家多是罪魁禍首,還有一種可能性那個廚師有罪。一個更復雜的模型,能夠處理更普遍的範圍觀測能夠提供更多的肯定性。然而,更多的計算後驗機率複雜的模型相對更難。
更復雜的模型:
您能夠經過擴展聯合分佈以處理其餘變量圖2。然而,對於多個變量或變量與許多可能的值表迅速變得不可收拾。此外,表是有用的僅用於離散分佈。若是你想爲謀殺定義一個時間的分佈,它必須表明一個連續的值範圍,一張表格沒法表示。
一個更靈活和強大的方法是創建一個聯合分佈的機率模型,以圖的形式表示系統的隨機變量之間的關係
。圖6顯示了2個例子,其中(一)爲圖偵探小說,和(b)延伸圖來處理額外的隨機變量
該模型表示隨機變量之間的關係,以下:
每一個方塊表明一個隨機變量。
箭頭表示隨機變量之間的因果關係。
陰影框表示可觀測的隨機變量。
非陰影框表示不可觀測的隨機變量,咱們但願推斷。
對於模型(a),模型是:罪犯選擇一個殺人的武器。你觀察這個殺人的武器,並用模型和觀察來推斷出可能的罪犯。即便這個模型表示因果關係,這被稱爲生成模型,你可使用它在任何方向推斷緣由。例如:你知道這個罪犯,你能夠用這個觀察來推斷出最有可能的殺人武器。
模型(b)是一個更復雜的模型,採用了額外的隨機變量的謀殺時間,屍體的狀態等幾個可觀察到的。你可使用這個模型結合多個隨機變量的觀測計算後驗機率,也許證實管家是無辜的,也許產生壓倒性的證據,他不得不認可。
更復雜的推理
偵探小說,你能夠用簡單的算法來推斷後從表圖2。當你添加變量,這種方法變得更加困難-----特別是若是他們有大量的可能的值----變量表示一個連續的可能值的變量而不工做。更現實的模型須要一個更復雜的方式來推斷後驗機率
圖6中的概念模型其實是一個圖形化的表示形式聯合分佈的數學表達式。機率程序可使用這個和貝葉斯推斷的後驗機率的數學表達任意複雜圖,包括有連續變量的圖分佈。你甚至能夠用數學表示來直接定義不能以圖形方式表示的模型。
How to Pick the Best Model
模型(a)提供了一個可能的罪犯的估計,但可能不足以定罪。一個更復雜和更先進的模型可能更有說服力。然而,添加更多的變量不必定產生一個更好的模型。一般有一個收益遞減的點,超過了該模型的附加複雜度,或者實際上使它變得更糟。
例如,當你將一個多項式擬合爲一組數據點時,你能夠經過向多項式中添加足夠的元素來得到精確的擬合。然而,一個多項式徹底適合每一個數據點一般擺盪在每一個點之間,現象稱爲過擬合,可能在必定程度上是準確的,但不是頗有用。一個多項式與較少的元素,每每能夠擬合數據,以及提供了一個更有用的和現實的模型。
你想要的是一個快樂的媒介:一個模型,適合的數據合理,而不過於複雜。簡而言之,你須要應用奧卡姆的剃刀,最好的模型是充分符合數據的最簡單的一個-----可能模型中的。
這二者在不一樣的方式中存在指紋的存在:
模型(a),罪犯在犯罪現場留下的指紋。
模型(B),罪犯對於留下指紋很當心,但幫兇也可能留下。
你一般沒法肯定哪個模型是最優的。然而,與機率規劃,你能夠把證據做爲一個隨機變量,並推斷出變量的分佈。分配給你每一個模型都是最優的機率,而且你可使用該信息來選擇最佳的模型。例如,若是證據爲模型(乙)的機率只有15%,共犯的可能增長了沒必要要的複雜性。所以,你能夠用簡單的解釋:「管家」。
infer.net機率規劃
機率規劃是一個通常的概念,而且能夠在各類各樣的方法。使用infer.net有什麼優點?總之,infer.net提供在代碼中表示圖形化模型的簡單方法,包括一個推理引擎inference engine處理posteriors的複雜數學推導。本節介紹了infer.net功能,以及它們如何快速幫助你,輕鬆實現強大的機率方案。
強大而靈活的模式構建
創造一個好的概念模型是困難的,而在infer.net範圍。。API 實現了一個普遍的模型,包括標準模型如,Bayes point machine, latent Dirichlet allocation, factor analysis, and principal component analysis一般只有幾行代碼
可擴展和可組合模型
infer.net建模的API是可組合的,這樣就能夠實現從簡單到複雜的積木概念模型。然而,你沒必要當即執行整個模型。例如,你能夠從一個簡化的開始概念模型,捕捉的基本特徵。當你工做的時候瑣碎的問題,你能夠設置在多個階段的模型和數據,若是須要,直到你有一個徹底實現的模型,能夠處理真實數據集。infer.net模型也被縮小了計算。你能夠開始小數據集和規模,以處理更大量的數據,包括應用並行計算
內置推理機
計算後驗機率,一般是至關困難的,並且須要一個深刻的瞭解貝葉斯推理與數值分析。infer.net包括推理爲您處理此任務的引擎。與infer.net,您的應用程序的構建一個模型,觀察一個或多個變量,而後查詢推理機的後延機率。該查詢只須要一行代碼。推理機
使用任何有支持的算法中的全部數值重舉—並返回請求的後驗機率。學習