y0
(發音為「為什麼不呢?」)是用於因果推理的 Python 程式碼。
y0
有一個功能齊全的內部領域特定語言來表示機率表達式:
from y0 . dsl import P , A , B
# The probability of A given B
expr_1 = P ( A | B )
# The probability of A given not B
expr_2 = P ( A | ~ B )
# The joint probability of A and B
expr_3 = P ( A , B )
它也可以用於操作表達式:
from y0 . dsl import P , A , B , Sum
P ( A , B ). marginalize ( A ) == Sum [ A ]( P ( A , B ))
P ( A , B ). conditional ( A ) == P ( A , B ) / Sum [ A ]( P ( A , B ))
DSL 物件可以使用str()
轉換為字串,並使用y0.parser.parse_y0()
解析回來。
可以在此 Jupyter Notebook 中找到 DSL 的完整演示
y0
有一個建立在networkx
之上的非循環有向混合圖的概念,可用來建模因果關係:
from y0 . graph import NxMixedGraph
from y0 . dsl import X , Y , Z1 , Z2
# Example from:
# J. Pearl and D. Mackenzie (2018)
# The Book of Why: The New Science of Cause and Effect.
# Basic Books, p. 240.
napkin = NxMixedGraph . from_edges (
directed = [
( Z2 , Z1 ),
( Z1 , X ),
( X , Y ),
],
undirected = [
( Z2 , X ),
( Z2 , Y ),
],
)
y0
在y0.examples
中有許多預先編寫的範例,這些範例來自 Pearl、Shpitser、Bareinboim 等。
y0
提供了許多演算法的實際實現,這些演算法在過去 15 年的出版物中仍未實現,包括:
演算法 | 參考 |
---|---|
ID | 施皮策和珀爾,2006 |
國際資料中心 | 施皮策和珀爾,2008 |
ID* | 施皮策和珀爾,2012 |
國際資料中心* | 施皮策和珀爾,2012 |
替代結果 | 蒂卡和卡爾瓦寧,2018 |
將演算法應用於 ADMG 和因果查詢以產生 DSL 中表示的估計值,如下所示:
from y0 . dsl import P , X , Y
from y0 . examples import napkin
from y0 . algorithm . identify import Identification , identify
# TODO after ID* and IDC* are done, we'll update this interface
query = Identification . from_expression ( graph = napkin , query = P ( Y @ X ))
estimand = identify ( query )
assert estimand == P ( Y @ X )
最新版本可以透過 PyPI 安裝:
$ pip install y0
最新的程式碼和數據可以直接從 GitHub 安裝:
$ pip install git+https://github.com/y0-causal-inference/y0.git
無論是提出問題、提出拉取請求還是分叉,我們都會感激您的貢獻。有關參與的更多信息,請參閱 CONTRIBUTING.md。
此套件中的程式碼根據 BSD-3-Clause 許可證獲得許可。
在我們發布關於y0
應用說明之前,您可以透過我們的 Zenodo 記錄引用該軟體(另請參閱上面的徽章):
@software { y0 ,
author = { Charles Tapley Hoyt and
Jeremy Zucker and
Marc-Antoine Parent } ,
title = { y0-causal-inference/y0 } ,
month = jun,
year = 2021 ,
publisher = { Zenodo } ,
version = { v0.1.0 } ,
doi = { 10.5281/zenodo.4950768 } ,
url = { https://doi.org/10.5281/zenodo.4950768 }
}
該專案得到了多個組織的支持(按字母順序排列):
Y0 因果推理引擎的發展由以下撥款資助:
資助機構 | 程式 | 授予 |
---|---|---|
美國國防部高等研究計劃局 | 自動化科學知識提取 (ASKE) | HR00111990009 |
PNNL 資料模型融合計劃 | 用於分析安全約束單元承諾的因果推理和機器學習方法(SCY0) | 90001 |
美國國防部高等研究計劃局 | 自動化科學知識擷取與建模 (ASKEM) | HR00112220036 |
該套件是使用 @cthoyt 的 cookiecutter-snekpack 模板透過 @audreyfeldroy 的 cookiecutter 套件創建的。
如果您想透過貢獻程式碼來參與,則自述文件的最後部分適用。
若要以開發模式安裝,請使用下列命令:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
pip install -e .
此專案使用cruft
來讓樣板檔案(即配置、貢獻指南、文件配置)與上游 cookiecutter 套件保持同步。更新如下:
pip install cruft
cruft update
有關 Cruft 更新命令的更多資訊可在此處取得。
複製儲存庫並使用pip install tox tox-uv
安裝tox
後, tests/
資料夾中的單元測試可以透過以下命令重複運行:
tox -e py
此外,這些測試會在 GitHub Action 中的每次提交時自動重新執行。
可以使用以下內容在本機上建立文件:
git clone git+https://github.com/y0-causal-inference/y0.git
cd y0
tox -e docs
open docs/build/html/index.html
該文件會自動安裝該套件以及pyproject.toml
中指定的額外docs
。可以在那裡添加sphinx
插件,例如texext
。此外,它們需要新增到docs/source/conf.py
中的extensions
列表中。
可以使用本指南將文件部署到 ReadTheDocs。 .readthedocs.yml
YAML 檔案包含您需要的所有設定。您還可以在 GitHub 上設定持續集成,不僅檢查 Sphinx 是否可以在隔離環境中建立文件(即使用tox -e docs-test
),還檢查 ReadTheDocs 是否也可以建置文件。
Zenodo 是一個長期存檔系統,可為您的軟體包的每個版本分配一個 DOI。
完成這些步驟後,您就可以開始了!在 GitHub 上進行「發布」後(步驟如下),您可以導航至 https://zenodo.org/account/settings/github/repository/y0-causal-inference/y0 查看該發布的 DOI並連結至Zenodo 記錄。
您只需執行以下步驟一次。
您必須為每台機器執行一次以下步驟。在您的主目錄中建立一個名為.pypirc
的文件,並包含以下內容:
[distutils]
index-servers =
pypi
testpypi
[pypi]
username = __token__
password = <the API token you just got>
# This block is optional in case you want to be able to make test releases to the Test PyPI server
[testpypi]
repository = https://test.pypi.org/legacy/
username = __token__
password = <an API token from test PyPI>
請注意,由於 PyPI 需要基於令牌的身份驗證,因此我們逐字使用__token__
作為使用者。如果您已經有一個帶有[distutils]
部分的.pypirc
文件,只需確保有一個index-servers
鍵並且pypi
位於其關聯列表中。有關配置.pypirc
檔案的更多資訊可以在此處找到。
在開發模式下安裝軟體包並使用pip install tox tox-uv
安裝tox
後,從 shell 執行以下命令:
tox -e finish
該腳本執行以下操作:
pyproject.toml
、 CITATION.cff
、 src/y0/version.py
和docs/source/conf.py
中的版本號切換為不帶-dev
後綴build
將程式碼打包到 tar 檔案和wheel中twine
上傳到 PyPI。tox -e bumpversion -- minor
。 這將觸發 Zenodo 為您的版本分配一個 DOI。