1. 程式人生 > >機器學習標準教科書PRML的Python實現:最佳讀書伴侶

機器學習標準教科書PRML的Python實現:最佳讀書伴侶

機器學習神書之一的 PRML(模式識別與機器學習)是所有機器學習讀者或希望系統理解機器學習的讀者所必須瞭解的書籍。這本書系統而全面地論述了模式識別與機器學習領域的基本知識和最新發展,而該 GitHub 專案希望實現這本書的所有演算法與概念,是非常優秀的資源與專案。

PRML 這本機器學習和模式識別領域中經典的教科書不僅反映了這些年該領域的最新發展,同時還全面而系統地介紹了模式識別和機器學習領域內詳細的概念與基礎。這本書主要針對高階本科生或研究生,以及人工智慧相關的研究人員和從業人員。如果讀者以前沒有模式識別或機器學習相關的概念或知識,我們可能需要熟悉一些多元微積分和基本的線性代數等數學基礎。此外,我們本科學的概率論與數理統計也需要複習一些,但這本書包含了對基本概率論的介紹,所以也可以藉由這些章節進行復習。

98120%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134737.jpg

PRML 適用於機器學習、統計學、電腦科學、訊號處理、計算機視覺、資料探勘和生物資訊學等課程。它也為廣大的讀者提供了豐富的支援,例如書籍官網提供了 400 多個詳細的練習資源,且根據難度分級。以下提供了該書籍的中英文資源,但我們還是建議讀者查閱原版的英文書籍。此外,我們在 GitHub 上也能找到非常多的學習資源,例如中文翻譯專案、Matlab 實現專案或各種讀書筆記等。本文主要介紹了一個新的 GitHub 專案,該專案希望能實現 PRML 這本書籍的各種演算法與概念。

該 GitHub 專案主要是希望使用 Python 程式碼實現在 Bishop 書籍「Pattern Recognition and Machine Learning」中介紹的演算法。其中程式碼可以分為兩部分,即實現各章節具體演算法的 Python 程式碼檔案和有助於理解各章節具體內容的 Jupyter Notebook 檔案。在本文中,機器之心將簡要介紹描述各章節的 Notebook,而各個演算法的具體實現就需要讀者朋友自行深入瞭解該專案了。

該 GitHub 專案所需要的程式語言為 Python 3,其它科學計算庫還需要 NumPy 和 SciPy。若我們需要閱讀各章節的 Notebook 檔案,就需要安裝 Jupyter,若希望在 Notebook 上繪製結果曲線或其他圖表,我們需要安裝 Matplotlib。此外,若我們希望饋送資料進行訓練,還需要安裝 sklearn 包。

在各章節具體演算法的 Python 程式碼中,其羅列了聚類方法、特徵抽取、線性模型、核方法、馬爾科夫模型、概率分佈模型、取樣方法和神經網路方法等主題的實現。如下展示了線性模型資料夾下所包含的具體演算法:

05624%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134752.jpg

而對於 Notebook 部分來說,該專案展示了 PRML 各章節的輔助內容與實現程式碼,這一部分的內容目錄如下:

  • ch1. 簡介
  • ch2. 概率分佈
  • ch3. 線性模型和迴歸
  • ch4. 線性模型和分類
  • ch5. 神經網路
  • ch6. 核方法
  • ch7. 稀疏核機器
  • ch9. 混合模型與 EM 演算法
  • ch10. 近似推斷
  • ch11. 取樣方法
  • ch12. 連續隱變數

這些章節都是根據原書章節進行展示的,例如在簡介章節中,該專案重點展示了多項式曲線擬合和貝葉斯曲線擬合。如在多項式擬閤中,我們希望用以下形式的多項式擬合數據:

12235%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134756.jpg

其中 M 為多項式的階數,多項式係數 w_0, . . . , w_M 可以整體表示為向量 w。這些多項式係數可以通過梯度下降等方法調整多項式曲線擬合資料的情況。該 GitHub 專案先匯入前面定義的具體模型,然後如下所示,再在 Notebook 部分展示模型的結果:

18348%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134759.jpg

這和原書中的結果是非常相似的,我們甚至可以進一步調整不同的多項式複雜度以檢視不同的擬合效果。因為增加了實踐過程,這樣的實現非常有助於我們理解原書中的概念與演算法。此外,如果我們對演算法的理解有什麼疑惑,也可以檢視具體的程式碼加深理解。

前面展示的案例是簡介部分非常簡單的多項式擬合方法,而對於更復雜一些的模型與方法,該專案也有非常好的實現與展示。例如在第七章中,PRML 主要介紹了稀疏核機器(Sparse Kernel Machines),包括最大間隔分類器、相關向量機(Relevance Vector Machines/RVM)等方法。如下所述,該專案對這一部分的內容也有非常好的輔助作用。

例如在最大間隔分類器或支援向量機中,我們假設訓練資料集在特徵空間中是線性可分的。因此根據定義,存在至少⼀個 引數 w 和 b 的選擇方式,使得對於 t_n = +1 的點,線性模型 y(x) = w*φ(x) + b 都滿足y(x_n) > 0,而對於 t_n = -1 的點,都有 y(x_n) < 0。因此對於所有訓練資料點,我們有 t_n*y(x_n) > 0。

但是這種分類的情況會有很多,我們可以選擇最穩妥的分類方法,即決策邊界儘可能地處於所分類別的中間。支援向量機解決這個問題的方法是:引入間隔(margin)的概念,這 個概念被定義為決策邊界與任意樣本之間的最小距離,如原書第七章圖 7.1 所示。

31354%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134802.jpg

如左圖所示,間隔被定義為決策邊界與最近的資料點之間的垂直距離。最大化間隔會生成對決策邊界的一個特定的選擇,如右圖所示。這個決策邊界的位置由資料點的一個子集確定,被稱為支援向量,用圓圈表示。

在該 GitHub 專案中,其展示的程式碼與繪圖如下所示:

38263%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134805.jpg

若我們應用和方法將這種大間隔分類的方法應用核技巧,將原本線性不可分的資料投影到線性線性可分的特徵空間中,那麼我們就能將這種具有大間隔或具有更強泛化能力的分類器推廣到非線性分類中。如下展示了該專案這種擴充套件的支援向量機模型:

44332%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20171129134808.jpg

當然,本專案還有更多的模型與方法案例,我們可以按照 README 檔案中所給出的 Notebook 文件加強對 PRML 這本權威教材的理解。該專案目前還在進一步完善,也希望各位 PRML 的讀者能共同完善它,為我們自己提供更加優秀的學習資源。53899%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20170924135925.png