微軟因果推理的框架DoWhy github 介紹

2021-09-24 20:03:39 字數 3112 閱讀 5789

人類思維具有將原因與特定事件聯絡起來的能力,我們不斷地聯絡導致特定效果的事件鏈。神經心理學將這種認知能力稱為因果推理。電腦科學和經濟學研究一種特定形式的因果推理,稱為因果推理,側重於探索兩個觀察到的變數之間的關係。多年來,機器學習產生了許多因果推理的方法,但是在沒有a / b測試的情況下這些基於模式識別和相關分析的傳統機器學習方法不足以進行因果推理,這導致它們仍然難以在主流應用中使用。最近,微軟研究院開源了dowhy,乙個專注因果思考和分析的框架。

就像機器學習庫為**所做的那樣,「dowhy」是乙個旨在激發因果思考和分析的python庫。dowhy為因果推理方法提供了統一的介面,並自動測試了許多假設,從而使非專家可以進行推理。

為什麼需要因果推斷

與監督學習不同,因果推斷取決於對未觀察量的估計。**模型揭示了連線觀察資料中輸入和結果的模式。但是,為了進行干預,我們需要估計從當前值更改輸入值的各種效果,因為沒有資料存在。這些涉及估計反事實的問題在決策方案中很常見。

它會起有效嗎?對系統的擬議更改是否會改善人們的結果?它為什麼有效?是什麼導致了系統結果的變化?我們應該做什麼?系統的哪些變化可能會改善人們的成果?總體效果如何?系統如何與人類行為相互作用?系統建議對人們活動的影響是什麼?回答這些問題需要因果推理。雖然存在許多用於因果推理的方法,但很難比較它們的假設和結果的穩健性。

微軟的dowhy這一基於python的因果推理和分析庫,試圖簡化機器學習應用中因果推理的採用。受到judea pearl的因果推理的微積分的啟發,dowhy在乙個簡單的程式設計模型下結合了幾種因果推理方法,消除了傳統方法的許多複雜性。

什麼是dowhy

dowhy除了為常見的因果推斷方法提供乙個程式設計介面,dowhy的設計還是為了顯示常被忽略的因果分析假設。所以,dowhy的特點之一就是會讓潛在的假設更容易理解。另外,dowhy可以進行敏感度分析和其他魯棒性檢查。我們的目的是讓人們關注他們在對因果推斷做假設時的思考而不是其中的細節。

總結一下,dowhy為因果推理模型的實施做出了三項重要貢獻。

提供將給定問題建模為因果圖的原則方法,以便明確所有假設。為許多流行的因果推理方法提供統一的介面,結合圖形模型的兩個主要框架和潛在的結果。如果可能,自動測試假設的有效性,並評估估計對違規的穩健性。從概念上講,dowhy是根據兩個指導原則建立的:明確要求因果假設,並測試對違反這些假設的估計的穩健性。換句話說,dowhy將因果效應的識別與其相關性的估計分開,這使得能夠推斷出非常複雜的因果關係。

為了實現其目標,dowhy通過四個基本步驟對工作流中的任何因果推斷問題進行建模:模型,識別,估計和反駁。

模型: dowhy使用因果關係圖來模擬每個問題。當前版本的dowhy支援兩種圖形輸入格式:gml(首選)和點。該圖可能包括變數中因果關係的先驗知識,但dowhy沒有做出任何直接的假設。識別:使用輸入圖,dowhy根據圖形模型找到識別所需因果效果的所有可能方法。它使用基於圖形的標準和do-calculus來找到可以找到可以識別因果效應的表示式的潛在方法估計: dowhy使用統計方法(如匹配或工具變數)估算因果效應。當前版本的dowhy支援基於傾向的分層或傾向得分匹配的估計方法,這些方法側重於估計**分配以及側重於估計響應面的回歸技術。驗證:最後,dowhy使用不同的穩健性方法來驗證因果效應的有效性。如何使用dowhy

開發人員可以使用以下命令安裝python模組來開始使用dowhy:

python setup.py install

dowhy支援python 3+,它需要以下包:

numpyscipyscikit-learnpandasnetworkx(用於分析因果圖)matplotlib(用於一般情節繪圖)sympy(用於呈現符號表示式)與任何其他機器學習程式一樣,dowhy應用程式的第一步是載入資料集。在這個例子中,假設我們試圖推斷出不同醫學**和由以下資料集代表的結果之間的相關性。

treatment outcome w00 2.964978 5.858518 -3.1733991 3.696709 7.945649 -1.9369952 2.125228 4.076005 -3.9755663 6.635687 13.471594 0.7724804 9.600072 19.577649 3.922406

dowhy依靠pandas資料幀來捕獲輸入資料:

rvar = 1 if np.random.uniform() >0.5 else 0 data_dict = dowhy.datasets.xy_dataset(10000, effect=rvar, sd_error=0.2) df = data_dict['df']print(df[["treatment", "outcome", "w0"]].head())

在這一點上,我們只需要四個步驟來推斷變數之間的因果關係。這四個步驟對應於dowhy的四個操作:模型,估計,推斷和反駁。我們可以將問題建模為因果圖:

model= causalmodel( data=df, treatment=data_dict["treatment_name"], outcome=data_dict["outcome_name"], common_causes=data_dict["common_causes_names"], instruments=data_dict["instrument_names"])model.view_model(layout="dot")from ipython.display import image, displaydisplay(image(filename="causal_model.png"))

identified_estimand = model.identify_effect()

現在我們可以估計因果效應並確定估計是否正確。此示例使用線性回歸來簡化:

estimate = model.estimate_effect(identified_estimand, method_name="backdoor.linear_regression")# plot slope of line between treamtent and outcome =causal effectdowhy.plotter.plot_causal_effect(estimate, df[data_dict["treatment_name"]], df[data_dict["outcome_name"]])

最後,我們可以使用不同的技術來反駁因果估計:

res_random = model.refute_estimate(identified_estimand,estimate,method_name = 「random_common_cause」)

基於GPU推理的神經網路推理框架

一 簡介 二 什麼是推理框架 通常神經網路演算法從研發到應用有兩大環節,第一環節是設計並訓練模型 第二環節是把模型部署到產品上。推理通常認為是部署到產品後框架所需要實現的運算。乙個模型輸入乙個給定的資料得出乙個資料,類似於推理得到了乙個結果。不過上述說道的第一環節,其實也涉及到推理,只不過訓練的時候...

解答微軟的一道邏輯推理題

以下是微軟有名的一道邏輯推理題,網上有不少人給出了答案,但是推理過程都有些問題,在這裡我給出我的推理過程 教授選出兩個從2到9的數,把它們的和告訴學生甲,把它們的積告訴學生乙,讓他們輪流猜這兩個數 甲說 我猜不出 乙說 我猜不出 甲說 我猜到了 乙說 我也猜到了 問這兩個數是多少 我的解答 設甲聽到...

微軟100題(22)ABC三人紙牌的推理

題目 有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,再分別在a b c三人額頭上貼任意兩張牌,a b c三人都可以看見其餘兩人額頭上的牌,看完後讓他們猜自己額頭上是什麼顏色的牌,a說不知道,b說不知道,c說不知道,然後a說知道了。請教如何推理,a是怎麼知道的。推理 a b c都說不知道,那麼不存...