
Michael Bowles
在學習和研究機器學習的時候,面臨令人眼花繚亂的算法,機器學習新手往往會不知所措。本書從算法和Python語言實現的角度,幫助讀者認識機器學習。本書專注於兩類核心的“算法族”,即懲罰線性迴歸和集成方法,並通過代碼實例來展示所討論的算法的使用原則。全書共分爲7章,詳細討論了預測模型的兩類核心算法、預測模型的構建、懲罰線性迴歸和集成方法的具體應用和實現。本書主要針對想提高機器學習技能的Python開發人員,幫助他們解決某一特定的項目或是提升相關的技能。
《Python機器學習:預測分析核心算法》拆解 作者:[美]Michael Bowles 一、一句話概括 可靠的預測模型不需要從大量算法中盲目挑選,而應先理解數據和評價指標,再重點掌握兩類覆蓋面廣的核心方法:以正則化控制複雜度的線性模型,以及通過組合多個弱模型提高性能的集成方法。 二、核心邏輯 本書圍繞兩類算法族展開: 1. 懲罰線性迴歸:在線性模型中加入正則化,通過限制參數控制過擬合,並完成特徵選擇。2. 集成方法:組合多棵決策樹或多個模型,降低方差或逐步修正錯誤。 全書的學習路徑是: 理解問題和數據 → 建立評價方法 → 平衡模型複雜度與數據規模 → 學習懲罰線性模型 → 學習樹與集成模型 → 用Python解決迴歸、二分類和多分類問題 作者希望讀者掌握可遷移的建模原則,而不是隻會調用某個軟件接口。 三、核心內容 1. 預測建模從明確問題類型開始 機器學習任務首先要判斷目標是什麼。 常見監督學習問題包括: 迴歸:預測連續數值,如價格、年齡和評分;二分類:在兩個類別中判斷,如水雷或岩石;多分類:在多個類別中選擇,如玻璃種類。 不同任務需要不同的損失函數、輸出形式和評價指標。 如果目標定義錯誤,後續算法再複雜也無法產生有意義的結果。 2. 理解數據比立即訓練模型更重要 面對新數據集,應先檢查: 樣本數量;特徵數量;數據類型;缺失值;異常值;特徵分佈;目標分佈;特徵與目標的關係;特徵之間的相關性;類別是否平衡。 可視化能夠幫助發現偏態、離羣點、類別重疊和非線性關係。 建模前的探索不是形式步驟,而是選擇算法和預處理方式的依據。 3. 數據的行列結構決定建模方式 典型監督學習數據可以表示爲特徵矩陣和目標向量。 每一行代表一個樣本,每一列代表一個屬性,目標則是模型需要預測的結果。 需要特別注意: 數字編號不一定是真正數值特徵;類別變量需要編碼;不同尺度可能影響線性模型;高相關特徵可能造成參數不穩定;樣本數少而特徵多時,過擬合風險更高。 數據表示本身就是模型假設的一部分。 4. 必須劃分訓練、驗證與測試數據 模型需要在訓練數據上學習,在驗證數據上選擇超參數,最後在未參與任何選擇的測試數據上評價。 如果反覆根據測試集結果修改模型,測試集就已經成爲訓練過程的一部分,最終成績會被高估。 樣本較少時,可以使用交叉驗證,讓不同數據輪流作爲驗證集,提高評價穩定性。 所有數據處理步驟也必須只在訓練數據中擬合,避免數據泄漏。 5. 模型選擇是偏差與方差的權衡 簡單模型可能無法表達真實規律,產生較高偏差;複雜模型容易適應訓練噪聲,產生較高方差。 隨着模型複雜度增加: 訓練誤差通常持續下降;驗證誤差先下降,再可能上升;模型對數據擾動更加敏感;解釋和維護成本也會上升。 最優模型不是訓練誤差最低的模型,而是在未見數據上表現最好、複雜度又合理的模型。 6. 評價指標必須反映使用目標 迴歸任務常用: 均方誤差;均方根誤差;平均絕對誤差;決定係數。 分類任務常用: 準確率;精確率;召回率;F1值;ROC曲線和AUC;混淆矩陣。 類別不平衡時,準確率可能誤導。例如,正例只有1%,全部預測爲負也有99%準確率,卻毫無價值。 指標選擇應結合誤報和漏報的實際成本。 7. 線性模型是重要基線 線性迴歸把預測表示爲特徵的加權和。 它具有訓練快、解釋清楚和容易擴展等優點,也能作爲複雜模型的性能基準。 線性不等於簡單無用。通過添加交互項、非線性變換和合適特徵,線性模型可以解決許多現實問題。 其主要風險包括多重共線性、異常值敏感和高維過擬合。 8. 正則化通過懲罰參數控制複雜度 懲罰線性迴歸在原始損失函數中加入參數懲罰。 基本思想是: 模型既要擬合數據,也不能讓參數無限增大 懲罰強度由超參數控制: 懲罰太弱,模型可能過擬合;懲罰太強,模型可能欠擬合;合適強度需要通過驗證或交叉驗證選擇。 正則化相當於在準確性和簡單性之間建立明確權衡。 9. 嶺迴歸使用L2懲罰穩定模型 嶺迴歸對參數平方和進行懲罰。 它會把係數壓縮到較小值,但通常不會讓係數完全變爲零。 在特徵高度相關時,普通線性迴歸的參數可能非常不穩定。嶺迴歸通過限制係數幅度,提高模型對數據變化的穩定性。 它適合多數特徵可能都具有一定作用、但需要防止參數過大的場景。 10. Lasso使用L1懲罰實現稀疏選擇 Lasso對參數絕對值之和進行懲罰。 這種懲罰會讓部分系數變爲零,因此同時完成擬合和特徵選擇。 它適合特徵很多、但只有部分特徵真正重要的情況。 當多個特徵高度相關時,Lasso可能只隨機保留其中一個,導致選擇結果不穩定。此時需要結合業務知識和重複驗證解釋結果。 11. Elastic Net結合L1與L2 Elastic Net同時使用L1和L2懲罰。 它既能夠產生稀疏解,又能緩解Lasso在相關特徵中的不穩定。 模型需要調整兩個方面: 總體正則化強度;L1和L2的混合比例。 超參數增加意味着必須使用更加嚴格的交叉驗證,避免在驗證集上過度調參。 12. 懲罰線性方法可以擴展到分類 二分類可以使用邏輯迴歸,把線性組合通過Sigmoid轉換爲類別概率。 對邏輯迴歸加入L1、L2或Elastic Net正則化,可以在高維分類任務中控制複雜度。 多分類問題則可以採用: 一對多策略;多項邏輯迴歸;多個二分類器組合。 線性分類器在特徵維度高、樣本較稀疏時往往非常有競爭力。 13. 決策樹用遞歸切分形成預測規則 決策樹反覆選擇特徵和閾值,把樣本分到更純的子節點。 它能夠自然表達非線性和特徵交互,也不太依賴特徵縮放。 樹的主要問題是高方差:訓練數據稍有變化,樹結構可能明顯不同。 限制深度、葉節點樣本數和剪枝可以控制複雜度,但單棵樹的性能通常不如集成模型。 14. Bagging通過平均降低方差 Bagging從原訓練集進行有放回抽樣,得到多個訓練子集,在每個子集上訓練一個模型。 迴歸任務對多個預測取平均,分類任務則投票。 如果各模型的錯誤不完全相同,平均後可以抵消部分波動。 Bagging特別適合決策樹等高方差模型。其核心不是讓每個模型更強,而是讓模型之間存在足夠差異。 15. 隨機森林進一步降低樹之間的相關性 隨機森林在Bagging基礎上增加隨機特徵選擇。 每次節點分裂只從一部分特徵中尋找最佳切分,避免少數強特徵在所有樹中佔據主導。 這樣不同樹之間差異更大,集成後的方差更低。 隨機森林通常具有: 較強基線性能;對非線性和交互建模能力;對預處理要求較低;可估計特徵重要性;能處理較多特徵。 但模型規模可能較大,特徵重要性也可能受到高基數和相關變量影響。 16. 梯度提升通過逐步修正錯誤建立強模型 梯度提升按順序訓練多個弱學習器。 每個新模型重點擬合當前集成仍未處理好的殘差或梯度方向,最終將多個小模型相加。 與Bagging並行訓練不同,Boosting是逐步依賴的: 當前模型 → 分析錯誤 → 新模型修正錯誤 → 加入集成 學習率、樹數量和樹深度共同控制模型複雜度。 提升模型性能強,但更容易因調參不當而過擬合。 17. Bagging與Boosting解決不同問題 Bagging主要降低方差,讓不穩定模型通過平均變得穩定。 Boosting主要降低偏差,逐步增強模型表達能力。 簡單比較如下: Bagging可並行訓練,調參相對容易;Boosting順序訓練,通常具有更高擬合能力;隨機森林對噪聲較穩健;梯度提升對學習率和樹深度更敏感;兩者都需要通過驗證集確認泛化表現。 算法選擇應取決於數據和任務,而不是固定偏好。 18. 特徵重要性不等於因果關係 樹模型和正則化線性模型可以提供特徵權重或重要性。 這些結果說明某個特徵對當前數據中的預測有幫助,卻不能證明它會導致目標變化。 重要性還會受到: 特徵相關性;編碼方式;數據分佈;模型結構;缺失模式;潛在混雜因素。 模型解釋適合用於理解預測,但因果決策需要額外設計和證據。 19. Python代碼的價值在於建立完整流程 本書通過聲納水雷、鮑魚年齡、紅酒口感和玻璃分類等案例,展示從讀取數據到模型比較的全過程。 實踐重點包括: 數據檢查;可視化;特徵和目標分離;訓練測試劃分;正則化路徑;交叉驗證;模型訓練;指標比較;結果解釋。 代碼只是方法的載體。讀者應理解每個步驟爲什麼存在,而不是隻複製最終程序。 20. 本書的工具和代碼具有時代性 本書主要使用較早期的Python機器學習工具和編程方式,部分接口、數據處理習慣和庫版本可能已經變化。 今天可以使用更成熟的scikit-learn流水線、交叉驗證、預處理和模型解釋工具。 但其核心方法仍未過時: 先理解數據;建立基線;嚴格劃分數據;通過正則化控制複雜度;比較線性與樹模型;使用交叉驗證選擇超參數;讓指標匹配實際目標。 四、本書最值得關注的核心觀點 本書最值得關注的觀點是: 機器學習的關鍵不是擁有最多算法,而是理解兩種控制複雜度的基本思想:約束單個模型,以及組合多個模型。 懲罰線性迴歸通過限制參數,讓單個模型避免過度擬合;集成方法則讓多個模型互相抵消錯誤或逐步修正不足。 二者代表了兩條非常普遍的路線: 通過偏好更簡單的解獲得穩定性;通過模型多樣性和組合獲得更強預測能力。 掌握這兩類思想後,面對新算法時就能看清其核心是在怎樣控制偏差、方差和複雜度。 五、一段話總結 《Python機器學習:預測分析核心算法》沒有羅列大量模型,而是圍繞懲罰線性迴歸和集成方法兩類核心算法,建立從數據理解、問題分類、評價指標到模型選擇的完整預測流程。嶺迴歸通過L2懲罰穩定相關特徵的參數,Lasso通過L1懲罰產生稀疏解,Elastic Net則兼顧二者;Bagging利用多個模型平均降低方差,隨機森林通過隨機特徵進一步增加樹的多樣性,梯度提升則按順序修正已有模型的錯誤。全書通過迴歸、二分類和多分類案例強調,模型訓練誤差不是最終目標,真正重要的是嚴格劃分數據、用交叉驗證選擇複雜度,並讓評價指標反映現實中的錯誤成本。雖然代碼接口具有年代感,但正則化、偏差—方差權衡和集成學習的核心思想仍是現代預測分析的重要基礎。
讀此書以前,需要對統計學、計算方法和Python編程語言有一些基本瞭解。作者對懲罰性迴歸分析和集成方法的原理解釋得比較清楚,但例子和文字枯燥乏味,感覺像學術論文,適合長期失眠患者閱讀
讀的不是太懂,代碼排版有問題,影響閱讀,詳細的公式推導也沒有,感覺有點跳躍,算法介紹的比較多,但感覺不適合初學者。
重複係數>5 (有些code可能重複了20遍),膚淺係數0.3(只知道調用,卻不加解釋),灌輸的幾個概念我還要去看其他書理解。
外國人寫的書果然淺顯易懂,就是有些太淺了,只適合入門
一開始實在提不起興趣來讀.半個月偶爾翻一翻才勉強看完前三章。第四章開始看得很是過癮,三天不到翻完了全本。 缺點: 這書的排版是個bug,官網附加的代碼是更新過好幾遍的,看的費勁。後來乾脆懶得看code跟圖了。 優點: 特別適合總結跟查漏補缺! 適合已經開始做數據分析,做過一些分析,寫過一些代碼,但是總是懵逼,不知道怎麼下手的人,不得要領的人。 實用性很強,實戰性也很強,總結性非常強。什麼情況用什麼算法,有什麼缺陷,怎麼解決,一清二楚。但凡是重點的,絕對會在合適的時機再深入淺出一下,還章節前概括,章節末尾總結,跟論文似的。 看到後面覺得,這作者挺實在,本書內容跟介紹寫的一模一樣。
這翻頁的代碼也太多了,個人感覺講述特徵處理、性能分析、模型選擇等內容不多,尤其是後面集成學習部分都把Scikit-learn接口搬上來了
代碼部分不是很簡潔,可以自己修改,講的挺不錯的
只看了到了第二章 好多輔助連接都打不開[撇嘴]