
魯偉編著
作爲一門應用型學科,機器學習植根於數學理論,落地於代碼實現。這就意味着,掌握公式推導和代碼編寫,方能更加深入地理解機器學習算法的內在邏輯和運行機制。本書在對全部機器學習算法進行分類梳理的基礎之上,分別對監督學習單模型、監督學習集成模型、無監督學習模型、概率模型四個大類共26個經典算法進行了細緻的公式推導和代碼實現,旨在幫助機器學習學習者和研究者完整地掌握算法細節、實現方法以及內在邏輯。
《機器學習:公式推導與代碼實現》|魯偉 一句話概括 這是一本以“數學推導 + 算法實現 + 案例驗證”爲主線的機器學習教材,系統梳理監督學習、集成學習、無監督學習和概率模型中的26個經典算法。 核心邏輯 全書採用統一的學習框架: 1. 先明確任務、數據和機器學習三要素。2. 從損失函數、目標函數和數學假設理解模型。3. 推導參數估計、優化和預測過程。4. 用Python、NumPy和sklearn完成代碼實現。5. 通過案例檢驗算法效果。6. 比較模型的適用場景、優缺點和調參方法。 核心觀點是:真正理解機器學習,不能只會調用庫函數,而要知道模型在優化什麼、爲什麼這樣優化,以及代碼如何對應公式。 核心內容 1. 機器學習的基本框架 入門部分介紹監督學習、無監督學習、分類、迴歸、聚類、特徵、標籤、模型和損失函數等概念。 機器學習的基本流程包括: - 明確問題。- 準備數據。- 選擇特徵。- 劃分訓練集和測試集。- 建立模型。- 訓練參數。- 評估結果。- 調整模型。 NumPy幫助處理矩陣和向量,sklearn則提供標準化的模型、數據處理和評價工具。 2. 線性迴歸及其正則化 線性迴歸通過特徵加權組合預測連續數值。書中以二手房房價爲例,推導最小二乘法和矩陣形式的參數解。 當特徵過多或存在共線性時,模型容易過擬合: - LASSO使用L1正則化,能夠推動部分參數變爲零,形成一定的特徵選擇效果。- Ridge使用L2正則化,限制參數過大,提升模型穩定性。 正則化的本質是在擬合數據之外,對模型複雜度加入約束。 3. 邏輯斯蒂迴歸和分類器 邏輯斯蒂迴歸通過Sigmoid函數將線性輸出轉換爲概率,適合二分類;多類別任務則可以使用Softmax。 最大似然估計尋找最能解釋觀測數據的參數,交叉熵損失衡量預測概率與真實類別之間的差異。 分類器還需要關注決策邊界、分類閾值、類別不平衡、誤分類代價、預測概率和多類別擴展。 4. LDA、kNN、決策樹和SVM - 線性判別分析通過類內緊湊、類間分離的目標尋找投影方向。- kNN依據距離尋找鄰居,再通過鄰居類別進行判斷,簡單但對距離度量和特徵尺度敏感。- 決策樹通過信息增益、基尼指數等指標選擇劃分特徵,並可使用ID3、CART和剪枝。- SVM通過最大化分類間隔尋找邊界,核函數可以處理非線性數據。 這些模型分別體現了投影、距離、規則劃分和幾何間隔等不同建模思想。 5. 神經網絡從感知機發展而來 感知機用加權輸入和激活函數完成簡單分類。多層網絡通過隱藏層和非線性激活表達更復雜的關係。 神經網絡學習依賴前向傳播、損失函數、反向傳播、梯度計算、參數更新、訓練和驗證。 書中還介紹卷積、池化、循環網絡和PyTorch,說明神經網絡如何分別處理圖像空間結構和序列關係。 6. 集成學習降低單模型侷限 集成學習通過組合多個弱模型或基礎模型,提高整體性能。 - AdaBoost根據分類錯誤調整樣本權重。- GBDT逐步擬合前一輪模型的殘差。- XGBoost在梯度提升基礎上加入正則化、二階信息和工程優化。- LightGBM通過更高效的樹生長和特徵處理提升大規模訓練效率。- CatBoost針對類別特徵和目標泄漏問題進行專門設計。- 隨機森林通過Bagging和隨機特徵選擇降低方差。 不同集成模型在精度、速度、內存、類別特徵處理和可解釋性方面各有取捨。 7. 模型比較和調參需要驗證 模型選擇不能只看一次測試結果。需要通過交叉驗證、學習曲線和多種評價指標判斷模型是否過擬合、參數是否合理、數據是否足夠,以及不同模型的差異是否穩定。 超參數調優可以使用網格搜索、隨機搜索和分層驗證,但調參不能替代問題理解和數據質量治理。 8. 聚類分析發現無標籤結構 無監督學習不依賴人工標籤,而是根據距離、密度或概率分佈尋找數據結構。 - k均值通過不斷更新聚類中心形成分組。- PCA尋找能夠保留主要方差的低維方向。- SVD進行矩陣分解,可用於降維、推薦和特徵提取。 聚類結果不是天然存在的客觀類別,往往還需要結合領域知識解釋和驗證。 9. 概率模型描述不確定性 最大信息熵模型在滿足已知約束的前提下選擇最不偏置的分佈。 樸素貝葉斯通過貝葉斯定理計算類別後驗概率,並作出分類;貝葉斯網絡則用圖結構表示變量之間的條件依賴。 概率模型的優勢是能夠表達不確定性和先驗知識,但其效果依賴分佈假設、獨立性假設和數據質量。 10. EM算法處理潛變量 當數據中存在不可直接觀測的隱變量時,EM算法在兩個階段之間迭代: - E步:根據當前參數估計隱變量。- M步:根據隱變量估計更新模型參數。 它可用於高斯混合模型、聚類和其他潛變量問題。算法通過不斷提高似然或證據下界尋找局部最優解,因此初始化和收斂情況會影響最終結果。 11. 理論推導幫助理解代碼 公式推導能夠說明模型的目標函數、參數估計、梯度來源、正則化作用、算法成立條件以及代碼中的矩陣運算。 代碼實現則能檢驗公式是否正確,並暴露數據處理、數值穩定性、邊界條件和計算效率等實際問題。 本書最值得關注的核心觀點 機器學習算法的差異,首先體現在它們對數據和模型的不同假設。 線性模型假設關係可以用較簡單的函數表示;決策樹通過規則劃分空間;kNN依賴局部相似性;SVM關注間隔;概率模型關注分佈;神經網絡則通過多層表示學習複雜關係。 因此,選算法時不應只看排行榜,而應先問: 數據具有什麼結構?目標是什麼?哪些假設合理?錯誤代價如何?模型能否解釋、驗證和部署? 一段話總結 《機器學習:公式推導與代碼實現》從機器學習術語、任務類型、三要素、流程以及NumPy和sklearn基礎講起,系統推導並實現線性迴歸、邏輯斯蒂迴歸、LASSO、Ridge、LDA、kNN、決策樹、神經網絡和SVM等監督學習單模型;隨後深入AdaBoost、GBDT、XGBoost、LightGBM、CatBoost和隨機森林等集成方法,並比較模型性能與調參策略。無監督部分介紹k均值、PCA和SVD,概率模型部分討論最大信息熵、樸素貝葉斯、貝葉斯網絡和EM算法。全書通過二手房、廣告、推薦、分類和聚類等案例,把公式、算法步驟和代碼實現連接起來。全書最核心的啓發是:算法學習不能停留在調用接口,只有理解目標函數、數學假設、參數更新、代碼實現和評價邊界,才能真正知道模型爲何有效、何時失效,以及如何進行可靠選擇。
書如其名,這本書是關於機器學習的公式推導與代碼實現,以下是我以爲本書較好的三個方面: 1、作者的思路清晰,體系明確,撰寫的章節層次分明,基本都遵循一定的結構:算法簡介、公式推導、numpy代碼實現、與sklearn的對比、小結,所以閱讀的時候感覺每章都自成體系; 2、結合公式推導和代碼實現,有利於瞭解算法背後的一些原理,有利於加深對算法執行的理解,有利於提升實現算法的代碼水平,從而避免僅侷限在調包調參,而是能用簡潔的話語描述算法是如何運行的; 3、基本涵蓋了主流的傳統機器學習算法,26個章節,26個算法,分成了四個部分:監督學習單模型、監督學習集成模型、無監督學習和概率模型,內容夯實,參考章節內容,基本可以做到開箱即用,當然千萬不要手寫代碼了,直接按照方法調包即可,避免重複造輪子。 最後,本書確實也有一些不足之處,作者在最後一章也進行了說明,不過瑕不掩瑜,看完以後還是會有收穫,又想起了高數、線代、概率論的相關知識。
生活並不能像machine learning可以將所有學習過程,內在邏輯和運行機制都用代碼編譯實現,過程中會有主線但也必然會有無數偶然、隨機事件的疊出。而事件中每個人感受性想象力的迥異就可能會製造出許許多多平行宇宙,當負向宇宙在某種情況下互相疊加,不同立場的碰撞中情緒膨脹的放大效應就可能會讓一個誤會一發不可收拾。人是無法保證所有的行爲都一定有邏輯和相關性的。重要的是我們要能區分偶然和必然、無關和相關。這非常難,但只要我們逐漸對一件事保持客觀理性的深入瞭解,就會變得越來越容易。儘可能去關上一些對負向言外之意的想象力開關,嘗試逐漸脫敏的過程會讓我們所有人都慢慢擁有更好的生命體驗。
本書涵蓋監督學習、無監督學習、概率模型等主流機器學習算法,共26個經典算法,全書代碼在GitHub開源。
基本上從頭到尾看了一遍,還不錯。不足之處是,理論講解,有的地方比較粗糙。好的地方是,所附的代碼都是可以跑通的,雖然未必最優,也未必pythonic。
感謝魯偉先生! 感謝書友們,尤其是“無知”先生! 這本書很好地帶我推開門,有了個全景式的初步認識。 認真敲入了全部代碼,除了 決策樹 的有關部分,其它都成功運行了 (稍加update),得到實在的編程體會,尤其是用Numpy手搓。 認真對照了作者在Github上的代碼,增加了認識。 感謝CSDN,StackOverFlow,GeeksForGeeks 等社區的諸多作者! 還有百度百科,維基百科。 還和ChatGPT互動了幾次,見識了它的強大與搞笑。 期待接下來進入 李航先生的《統計學習方法》,更深地理解相關的數學!
雖然本書名重點提到了“公式推導”,但其實公式推導並不細緻,缺乏細節,算不上亮點,如果想看公式推導,應該看《統計學習方法》之類的偏理論書籍。 本書真正的亮點是代碼實現,大概60%的算法都用底層代碼親自實現,而不是簡單的調用python庫,作者的GitHub倉庫提供了本書全套代碼,大部分能運行。 遺憾的是,底層代碼實現僅佔60%,到了本書後半段,代碼實現非常敷衍,最後幾章乾脆直接調用python庫了。 另一個遺憾是,代碼錯誤較多,直接導致算法預測結果不準確。我在github上給作者提了幾個PR修復錯誤,大部分都迅速通過合併了,但最後一個PR作者至今沒回應,不知道什麼原因。總之如果讀者想知道具體的代碼錯誤,可以去GitHub上看看。 代碼實現雖然是本書的亮點,但在如今的ChatGPT時代,我們可以讓ChatGPT幫助我們寫出算法的代碼實現,大多數時候代碼都能運行良好,至少比本書的代碼好多了,所以本書的亮點又進一步被削弱了。
本書總共介紹了26種機器學習模型與算法,幾乎涵蓋了全部主流的機器學習算法,包括線性迴歸、對數幾率迴歸、LASSO迴歸、Ridge迴歸、LDA、近鄰、決策樹、感知機、神經網絡、支持向量機、AdaBoost、GBDT、XGBoost、LightGBM、CatBoost、隨機森林、聚類算法與均值聚類、PCA、SVD、最大信息熵、樸素貝葉斯、貝葉斯網絡、EM算法、HMM、CRF和MCMC。 機器學習方法都是由模型(model)、策略(strategy)和算法(algorithm)三個要素構成的,具體可理解爲機器學習模型在一定的優化策略下使用相應求解算法來達到最優目標的過程。
部分數學推導跳躍性較大、數學符號未提前解釋所表示的含義,有時難以理解算法是如何推導出來的,此外有些實現的算法和推導過程中的算法有些不一樣。
有些公式,沒有推導過程,直接就出來了,可讀性比較差