貝葉斯統計這個名字來源于托馬斯·貝葉斯(Thomas Bayes, 1702-1761),一位長老會牧師和業余數學家,他首次推導出了我們現在所知的貝葉斯定理,該定理在1763年(死后)發表。然而,第一個真正發展貝葉斯方法的人是皮埃爾-西蒙·拉普拉斯(1749-1827),因此,也許用拉普拉斯統計學來描述它會更正確一些。盡管如此,我們將尊重斯蒂格勒的同名法則,也將堅持傳統,并在本書的其余部分繼續討論貝葉斯方法。從貝葉斯和拉普拉斯(以及其他許多理論)的先驅時代到今天,發生了很多事情——新思想被開發出來,其中許多思想是由計算機激發或使之成為可能的。這本書的目的是為這個主題提供一個現代的視角,從基本原理來構建一個堅實的基礎到現代貝葉斯工作流和工具的應用。
//bayesiancomputationbook.com/welcome.html
我們寫這本書是為了幫助貝葉斯初學者成為中級建模者。我們并不是說這在你讀完這本書后就會自動發生,但我們希望這本書能引導你走向一個富有成效的方向,特別是如果你徹底閱讀它,做練習,應用書中的思想到你自己的問題,并繼續從別人那里學習。
特別指出,這本書的目標讀者是對應用貝葉斯模型解決數據分析問題感興趣的貝葉斯從業人員。通常學術界和工業界是有區別的。
我們的目的是在本書完成后,您不僅會熟悉貝葉斯推理,而且會對貝葉斯模型進行探索性分析,包括模型比較、診斷、評估和結果的交流。這也是我們的意圖,從現代和計算的角度來教授所有這一切。對我們來說,如果我們采用計算的方法,貝葉斯統計可以更好地理解和應用,這意味著,例如,我們更關心經驗檢驗我們的假設是如何被違反的,而不是試圖證明假設是正確的。這也意味著我們使用許多可視化。建模方法的其他含義將隨著頁面的進展而變得清晰。
最后,正如書名中所述,我們在本書中使用Python編程語言。更具體地說,我們將主要關注PyMC3[1]和TensorFlow Probability (TFP)[2],作為模型構建和推理的主要概率編程語言(pls),并使用ArviZ作為主要的庫來探索性分析貝葉斯模型[3]。在本書中,我們不打算對所有Python ppl進行詳盡的調研和比較,因為有很多選擇,而且它們發展得很快。我們將重點放在貝葉斯分析的實際方面。編程語言和庫只是我們到達目的地的橋梁。
盡管本書選擇的編程語言是Python,其中選擇的庫很少,但我們所涉及的統計和建模概念是語言和庫無關的,在許多計算機編程語言中都可以使用,比如R、Julia和Scala等等。具有這些語言知識但不了解Python的積極讀者仍然可以從這本書中受益,特別是如果他們找到了支持他們所選擇語言中等效功能的合適包或代碼,以獲得實際實踐。此外,作者還鼓勵其他人將本文中的代碼示例翻譯成其他語言或框架。如果您愿意,請與我們聯系。
第一章提供了對貝葉斯推理的基本和中心概念的復習或快速介紹。本章中的概念將在本書的其余部分重新討論和應用。
第二章介紹了貝葉斯模型的探索性分析。也就是說,引入了貝葉斯工作流中的許多概念,但這些概念本身并不是推理。在本書的其余部分中,我們將應用和重溫本章中的概念。
第三章是專門介紹了一個特定的模型體系結構。它提供了線性回歸模型的介紹,并為接下來的五章建立了基本的基礎。第三章還全面介紹了本書中使用的主要概率編程語言PyMC3和TensorFlow Probability。
第四章擴展了線性回歸模型,并討論了更高級的主題,如穩健回歸、層次模型和模型重參數化。本章使用PyMC3和TensorFlow Probability。
第五章介紹了基函數,特別是作為線性模型擴展的樣條,它允許我們構建更靈活的模型。本章使用PyMC3。
第六章重點介紹時間序列模型,從時間序列的回歸建模到更復雜的模型,如ARIMA和線性高斯狀態空間模型。本章使用TensorFlow Probability。
第七章介紹了貝葉斯可加回歸樹的非參數模型。我們討論了這個模型的可解釋性和可變重要性。本章使用PyMC3。
第八8章將關注近似貝葉斯計算(ABC)框架,它對于我們沒有明確的可能性公式的問題是有用的。本章使用PyMC3。
第九章對端到端貝葉斯工作流進行了概述。它展示了商業環境中的觀察性研究和研究環境中的實驗性研究。本章使用PyMC3。
第十章深入探討了概率編程語言。本章將介紹各種不同的概率編程語言。
Python Book為任何與數據打交道但沒有編程經驗的人提供了學習Python的基本入門指南。作者是一位經驗豐富的數據科學家和Python程序員,他向讀者展示了如何使用Python進行數據分析、探索、清理和討論。讀者將了解Python語言中哪些內容對數據分析很重要,以及為什么重要。
Python Book為讀者提供了全面全面的Python介紹,它既簡單到對初學者來說是理想的,又深刻到對那些更有經驗的人來說是有用的。這本書幫助初出乍到的程序員在閱讀過程中逐漸提高他們的技能,并始終理解他們所涉及的內容以及為什么它是有用的。Python被谷歌、Facebook、Instagram、Spotify等大公司使用,在未來的幾年里,它將繼續成為編程領域的中心。
包含了Python編程主題的深入討論,如變量,等式和比較,元組和字典數據類型,while和for循環,以及if語句,讀者還將學習:
完美的統計學家,計算機科學家,軟件程序員,和從業人員在私營行業和醫學,Python書也將對任何上述領域的學生感興趣。因為它假設沒有編程經驗或知識,所以這本書非常適合那些使用數據工作并希望學習使用Python來增強他們工作的人。
本教材提供了一個全面的介紹統計原理,概念和方法,是必不可少的現代統計和數據科學。涵蓋的主題包括基于可能性的推理,貝葉斯統計,回歸,統計測試和不確定性的量化。此外,這本書討論了在現代數據分析中有用的統計思想,包括bootstrapping,多元分布的建模,缺失數據分析,因果關系以及實驗設計的原則。本教材包括兩個學期課程的充足材料,旨在為數據科學、統計和計算機科學的碩士學生掌握概率論的基本知識。對于想要加強統計技能的數據科學從業者來說也是有用的。
第一章對為什么統計和統計思想在數據科學領域具有重要意義進行了一般性討論。本書的這一章還將本書與側重于統計和機器學習的其他書進行了對比。后面的第2-5章可以看作是統計估計理論的簡要介紹。這兩種方法我們都包括,頻率理論和貝葉斯理論。換句話說,我們引入似然模型,就像解釋數值方法一樣,比如貝葉斯模型中的蒙特卡羅馬爾可夫鏈。第6章討論了統計檢驗,它與使用置信區間進行不確定性量化、貝葉斯推理和分類的方法相同。前六章提供了核心教學大綱,當然更多地關注理論和概念,但較少地關注應用。第7章著眼于回歸模型的廣泛領域,雖然本章更適用于此,但它肯定沒有涵蓋該領域,因為它應該與數據科學項目的普通教育有關。在我們看來,回歸是統計學和數據科學的一個基本概念,應該在單獨的講座/課程中討論;因此,這些材料需要包含在一個單獨的書中,其中一些我們在我們的書中引用。然而,我們認為,一本不涉及回歸的統計書也是不合適的。
數據科學不僅僅是機器學習和統計學,也不僅僅是預測。但有一件事我們可以非常自信地斷言,數據科學始終與數據有關。本書的目的有兩方面:
我們專注于數據科學的支柱: 數據。
我們使用Julia編程語言來處理數據。
有許多編程語言,每一種都有自己的優點和缺點。有些語言非常快,但很冗長。其他語言很容易寫,但很慢。這就是所謂的兩種語言問題,Julia的目標是解決這個問題。盡管我們三個人來自不同的領域,但我們都發現朱莉婭的語言在我們的研究中比我們以前使用過的語言更有效。我們將在第二節討論我們的一些論點。然而,與其他語言相比,Julia 是一種最新的語言。這意味著圍繞語言的生態系統有時很難駕馭。很難弄清楚從哪里開始,以及如何將所有不同的包組合在一起。這就是為什么我們決定創作這本書!我想讓研究人員,尤其是我們的同事,更容易開始使用這門很棒的語言。如上所述,每種語言都有其優缺點。在我們看來,數據科學絕對是Julia的強項。與此同時,我們三個人都在日常生活中使用數據科學工具。而且,你可能也想使用數據科學!這就是為什么本書將重點放在數據科學上。在本節的下一部分,我們強調數據科學的“數據”部分,以及為什么數據技能是,并將繼續在工業和學術界的高需求。我們主張將軟件工程實踐納入數據科學,這將減少與合作者更新和共享代碼時的摩擦。大多數數據分析都需要合作;這就是為什么這些軟件實踐將幫助您。
這本書的目的是介紹計算機科學家所需要的一些基本數學知識。讀者并不期望自己是數學家,我們希望下面的內容對你有用。
本書使用高級Python語言首次介紹科學應用的計算機編程。該闡述以實例和問題為導向,其中應用程序取自數學、數值微積分、統計學、物理學、生物學和金融。這本書教授“matlab風格”和過程編程以及面向對象編程。高中數學是一個必要的背景,它有利于學習經典和數字一元微積分并行閱讀這本書。除了學習如何編寫計算機程序,讀者還將學習如何利用數值方法和程序設計來解決科學和工程的各個分支中出現的數學問題。通過混合編程,數學和科學應用,這本書為實踐計算科學奠定了堅實的基礎。
這本書的目的是使用從數學和自然科學的例子來教授計算機編程。我們選擇使用Python編程語言,因為它結合了非凡的表達能力和非常干凈、簡單和緊湊的語法。Python很容易學習,非常適合作為計算機編程的入門。Python也非常類似于MATLAB,是一種很好的數學計算語言。將Python與編譯語言(如Fortran、C和c++)相結合很容易,這些語言被廣泛用于科學計算。
本書中的例子將編程與數學、物理、生物和金融的應用程序相結合。讀者需要具備基本的一元微積分知識,在高中數學強化課程中教授。這當然是一個優勢,以并行的大學微積分課程,最好包含經典和數值方面的微積分。雖然不是嚴格要求,高中物理背景使許多例子更有意義。
許多入門編程書籍都很緊湊,重點是列出編程語言的功能。然而,學習編程就是學習如何像程序員一樣思考。這本書主要關注的是思考過程,或者等價地說: 編程是一種解決問題的技術。這就是為什么大多數頁面都致力于編程中的案例研究,在這里我們定義一個問題并解釋如何創建相應的程序。新的結構和編程風格(我們可以稱之為理論)通常也通過示例介紹。
這本書的目的是教你像計算機科學家一樣思考。這種思維方式結合了數學、工程和自然科學的一些最好的特點。像數學家一樣,計算機科學家使用形式語言來表示思想(特別是計算)。就像工程師一樣,他們設計東西,將組件組裝成系統,并在備選方案中進行權衡。像科學家一樣,他們觀察復雜系統的行為,形成假設,并測試預測。
計算機科學家最重要的技能是解決問題。解決問題的能力是指組織問題,創造性地思考解決方案,并清晰準確地表達解決方案的能力。事實證明,學習編程的過程是練習解決問題技巧的絕佳機會。這就是為什么這一章叫做,程序之道。
在某種程度上,你將學習編程,這本身就是一項有用的技能。在另一個層面上,您將把編程作為達到目的的一種手段。隨著時間的推移,這個目標會越來越清晰。
《如何像計算機科學家一樣思考》(How to Think Like a Computer Scientist)已經是目前最好的Python入門書籍了,但我們將其重新出版:
使用在線IDE Replit,而不是向學生展示如何在Windows上設置Python(許多有抱負的程序員都放棄了這一點)。
使展示現代化,并將源代碼轉換為Markdown,這樣讀者可以更容易地作出貢獻。
使用在線應用程序PythonTutor.com逐步可視化和逐步執行代碼。
學習使用Python分析數據和預測結果的更簡單和更有效的方法
Python機器學習教程展示了通過關注兩個核心機器學習算法家族來成功分析數據,本書能夠提供工作機制的完整描述,以及使用特定的、可破解的代碼來說明機制的示例。算法用簡單的術語解釋,沒有復雜的數學,并使用Python應用,指導算法選擇,數據準備,并在實踐中使用訓練過的模型。您將學習一套核心的Python編程技術,各種構建預測模型的方法,以及如何測量每個模型的性能,以確保使用正確的模型。關于線性回歸和集成方法的章節深入研究了每種算法,你可以使用書中的示例代碼來開發你自己的數據分析解決方案。
機器學習算法是數據分析和可視化的核心。在過去,這些方法需要深厚的數學和統計學背景,通常需要結合專門的R編程語言。這本書演示了機器學習可以如何實現使用更廣泛的使用和可訪問的Python編程語言。
使用線性和集成算法族預測結果
建立可以解決一系列簡單和復雜問題的預測模型
使用Python應用核心機器學習算法
直接使用示例代碼構建自定義解決方案
機器學習不需要復雜和高度專業化。Python使用了更簡單、有效和經過良好測試的方法,使這項技術更容易為更廣泛的受眾所接受。Python中的機器學習將向您展示如何做到這一點,而不需要廣泛的數學或統計背景。
如果您是用Python編程的新手,并且正在尋找可靠的介紹,那么這本書就是為您準備的。由計算機科學教師開發,在“為絕對初學者”系列叢書通過簡單的游戲創造教授編程的原則。您將獲得實際的Python編程應用程序所需的技能,并將了解如何在真實場景中使用這些技能。在整個章節中,你會發現一些代碼示例來說明所提出的概念。在每一章的結尾,你會發現一個完整的游戲,展示了這一章的關鍵思想,一章的總結,以及一系列的挑戰來測試你的新知識。當你讀完這本書的時候,你將非常精通Python,并且能夠將你所學到的基本編程原理應用到你要處理的下一種編程語言。
本書涵蓋了這些領域中使用Python模塊演示的概率、統計和機器學習的關鍵思想。整本書包括所有的圖形和數值結果,都可以使用Python代碼及其相關的Jupyter/IPython Notebooks。作者通過使用多種分析方法和Python代碼的有意義的示例,開發了機器學習中的關鍵直覺,從而將理論概念與具體實現聯系起來。現代Python模塊(如panda、y和Scikit-learn)用于模擬和可視化重要的機器學習概念,如偏差/方差權衡、交叉驗證和正則化。許多抽象的數學思想,如概率論中的收斂性,都得到了發展,并用數值例子加以說明。本書適合任何具有概率、統計或機器學習的本科生,以及具有Python編程的基本知識的人。