
1. 從挑西瓜說起為什么這本教材值得逐字啃如果你問一個剛接觸機器學習的人入門該看什么十有八九會聽到同一個答案——那本封面畫著西瓜的書。它幾乎成了國內機器學習入門的一個符號但真正翻開它的人很多在第一章就卡住了公式密度高、概念抽象、符號定義密集讀兩頁就想合上。我自己第一次讀緒論的時候也是這樣覺得這不就是一堆定義堆砌嗎直到后來做項目反復回頭翻才發(fā)現(xiàn)緒論這一章其實是整本書的地圖它把后面所有章節(jié)要解決的問題、要用的語言、要避開的坑全都提前埋好了伏筆。這篇筆記我想做的事情很具體把緒論這一章里那些看起來只是定義的東西還原成它們真正要解決的問題。比如什么是機器學習這句話背后其實藏著一個關于歸納的哲學問題假設空間和版本空間這兩個概念是后面所有算法討論的地基而歸納偏好這個概念直接決定了你選模型時的直覺。我會盡量用大白話把這些講清楚同時補充一些教材里沒展開、但實際動手時一定會遇到的細節(jié)。適合誰看如果你正在啃這本書、被緒論的符號勸退或者你學過一些調包技能但沒搞懂底層邏輯這篇應該能幫你把地基打牢。如果你已經有一定基礎也可以把它當成一次回頭看很多當時沒在意的點現(xiàn)在會有新的理解。2. 機器學習到底在解決什么問題從記憶到泛化的跨越2.1 一個被忽略的前提我們?yōu)槭裁葱枰獙W習先別急著看定義。我們退一步想一個更根本的問題如果計算機能直接算出答案為什么還需要學習比如判斷一個西瓜好不好如果有一個完美的公式輸入糖度、色澤、敲擊聲就能算出好壞那直接寫死這個公式就行了不需要機器學習。問題在于現(xiàn)實里我們往往寫不出這個公式。不是因為我們不夠聰明而是因為好西瓜這個概念本身就沒有一個精確的數(shù)學定義。不同的人對好的標準不一樣同一個西瓜在不同場景下評價也不一樣。這種說不清但能判斷的任務才是機器學習真正要處理的。所以機器學習的本質不是讓機器記住答案而是讓機器從一堆例子中歸納出一個規(guī)律然后用這個規(guī)律去判斷沒見過的新情況。這個從已知到未知的能力就叫泛化。教材里那句學得模型適用于新樣本的能力說的就是這件事。這里有個很容易被忽略的點泛化能力不是越強越好而是要和訓練數(shù)據(jù)匹配。一個模型如果在訓練集上表現(xiàn)完美但在新數(shù)據(jù)上一塌糊涂這叫過擬合反過來如果它在訓練集上都沒學好那叫欠擬合。緒論里雖然沒有展開講這兩個概念但泛化這個詞一出現(xiàn)其實就已經把后面所有關于模型評估、正則化、交叉驗證的討論都框定了。2.2 歸納 vs 演繹機器學習走的是哪條路教材里有一句話很關鍵從特殊到一般的泛化過程稱為歸納從一般到特殊的特化過程稱為演繹。這句話看起來像語文題但它其實決定了你理解機器學習的方式。演繹是從公理推出結論比如數(shù)學證明前提正確、推理正確結論一定正確。歸納是從例子推出規(guī)律比如你見過100個好西瓜都是敲起來聲音清脆的你就歸納出聲音清脆的西瓜是好西瓜。但問題是這個規(guī)律不一定對——第101個西瓜可能聲音清脆但里面是壞的。機器學習走的就是歸納這條路。這意味著它天生帶有不確定性。你永遠不能說這個模型一定對只能說在這個數(shù)據(jù)集上它的表現(xiàn)是這樣的。理解這一點你才不會對模型的錯誤感到意外也不會盲目相信模型給出的每一個結果。提示很多人學機器學習時最大的思維障礙就是總想找一個絕對正確的模型。但歸納的本質決定了沒有絕對正確只有在當前數(shù)據(jù)下相對更好。接受這一點后面的評估、調參、集成學習才好理解。2.3 假設空間把所有可能的規(guī)律擺到桌面上緒論里最抽象、也最重要的概念之一就是假設空間。教材用西瓜的例子來講假設我們只考慮色澤和敲聲兩個屬性色澤有青綠、烏黑、淺白三種取值敲聲有清脆、沉悶、濁響三種取值那么所有可能的好瓜規(guī)則有多少種答案是每個屬性都可以取特定值通配符任意值空集不考慮三種狀態(tài)所以總共有 (31)×(31)1 17 種假設。這個1是加了一個根本沒有好瓜的極端情況。為什么要算這個因為假設空間就是模型搜索的范圍。學習的過程就是在假設空間里找到一個假設讓它和訓練數(shù)據(jù)盡可能一致。如果假設空間太小可能根本找不到能解釋數(shù)據(jù)的規(guī)律欠擬合如果假設空間太大可能找到很多個都符合訓練數(shù)據(jù)的假設但不知道選哪個過擬合風險。這里有個實操中很常見的誤區(qū)很多人以為假設空間越大越好因為選擇多。但實際上假設空間越大需要的訓練數(shù)據(jù)就越多否則很容易選到一個碰巧符合訓練集但完全錯誤的假設。這就是為什么深度學習需要海量數(shù)據(jù)——它的假設空間太大了。2.4 版本空間當多個假設都說得通時怎么辦假設空間里的假設并不是每一個都能解釋訓練數(shù)據(jù)。比如訓練集里有一個青綠、清脆的西瓜是好瓜那么色澤烏黑的假設就被排除了。把所有能解釋訓練數(shù)據(jù)的假設挑出來組成的集合就叫版本空間。版本空間這個概念的價值在于它告訴你僅憑當前數(shù)據(jù)你無法確定唯一正確的規(guī)律。版本空間里可能有多個假設它們在你見過的數(shù)據(jù)上表現(xiàn)完全一樣但在沒見過的數(shù)據(jù)上可能給出不同答案。這時候怎么辦這就引出了下一個核心概念——歸納偏好。我自己的經驗是版本空間這個概念在剛學的時候覺得沒什么用但當你開始做特征工程、選模型的時候會突然意識到你做的每一個選擇其實都是在版本空間里挑一個假設。比如你選了線性模型就等于假設規(guī)律是線性的你選了決策樹就等于假設規(guī)律可以用一系列if-else表達。這些選擇沒有絕對對錯只有適不適合當前問題。3. 歸納偏好沒有免費的午餐但有因地制宜的選擇3.1 奧卡姆剃刀為什么簡單的模型往往更受歡迎版本空間里有多個假設時學習算法必須做出選擇。這個選擇的依據(jù)就是歸納偏好。教材里提到一個最常用的原則奧卡姆剃刀——若有多個假設與觀察一致則選最簡單的那個。這句話聽起來像常識但它其實是一個信仰不是邏輯必然。為什么簡單的好因為簡單模型通常假設空間更小需要的訓練數(shù)據(jù)更少泛化風險更低。但簡單本身怎么定義是參數(shù)少是規(guī)則短還是計算復雜度低不同定義會導向不同算法。實際動手時你會發(fā)現(xiàn)簡單往往和可解釋掛鉤。一個線性回歸模型你能清楚說出每個特征的影響一個深度神經網絡你很難解釋它為什么做出某個判斷。所以在很多對可解釋性有要求的場景比如醫(yī)療、金融人們會傾向于選擇更簡單的模型哪怕它的準確率略低一點。3.2 沒有免費的午餐定理為什么不能盲目崇拜某個算法緒論里最反直覺的一個結論就是沒有免費的午餐定理NFL。它說的是在所有可能的問題上所有學習算法的期望性能是一樣的。換句話說沒有一個算法是萬能最優(yōu)的。這個定理剛看會覺得這不是廢話嗎但它其實在提醒你兩件事第一脫離具體問題談算法優(yōu)劣沒有意義。你在某個數(shù)據(jù)集上看到A算法比B算法好不代表換個數(shù)據(jù)集A還比B好。所以做項目時不要一上來就選最火的算法而是先分析數(shù)據(jù)特點。第二算法的優(yōu)勢來自于它對問題的假設。比如決策樹假設特征之間可以獨立判斷神經網絡假設規(guī)律可以通過多層非線性變換逼近這些假設在特定問題上成立時算法就表現(xiàn)好不成立時就表現(xiàn)差。我踩過的一個坑是早期做分類任務時看到別人用某個集成算法效果好就直接套用結果在自己的數(shù)據(jù)上效果平平。后來分析才發(fā)現(xiàn)我的數(shù)據(jù)特征維度低、樣本量小集成算法反而容易過擬合換成簡單的邏輯回歸效果更好。這就是NFL定理在實操中的體現(xiàn)。3.3 歸納偏好怎么影響你的模型選型把歸納偏好落到實操上其實就是一句話你選的模型代表了你對數(shù)據(jù)規(guī)律的假設。如果你認為規(guī)律是線性的選線性模型如果你認為規(guī)律是分段的、有明確閾值的選決策樹如果你認為規(guī)律是平滑的、非線性的選核方法或神經網絡如果你認為多個模型的判斷可以互補選集成方法。這些假設沒有對錯只有和當前問題匹配不匹配。所以一個成熟的從業(yè)者不會說XX算法最好而是會說在這個數(shù)據(jù)上XX算法的假設更合理。注意歸納偏好不是偏見而是必要的選擇。沒有偏好模型就無法從版本空間里挑出唯一假設。關鍵是你要清楚自己的偏好是什么以及它是否適合當前問題。4. 從緒論到實戰(zhàn)那些教材沒明說但你必須知道的細節(jié)4.1 數(shù)據(jù)集、特征、標簽術語背后的實操含義緒論里定義了一堆術語數(shù)據(jù)集、樣本、特征、標簽、訓練集、測試集。這些詞看起來簡單但實際用的時候很多人會混淆。樣本一條記錄比如一個西瓜的完整描述特征描述樣本的屬性比如色澤、敲聲、糖度標簽我們要預測的目標比如好瓜或壞瓜訓練集用來學的數(shù)據(jù)測試集用來考的數(shù)據(jù)模型沒見過。這里有個實操中很容易犯的錯誤用測試集調參。很多人訓練完模型在測試集上看效果效果不好就改參數(shù)再測反復幾次最后測試集上的效果很好但上線后一塌糊涂。原因是測試集已經被間接用于訓練了模型對它過擬合了。正確的做法是訓練集用來訓練驗證集用來調參測試集只在最后用一次。如果數(shù)據(jù)量小可以用交叉驗證來替代固定的驗證集。這個原則緒論里沒展開但它是后面所有評估方法的基礎。4.2 監(jiān)督 vs 無監(jiān)督分類和聚類的本質區(qū)別緒論把學習任務分成監(jiān)督學習和無監(jiān)督學習。監(jiān)督學習有標簽無監(jiān)督學習沒有標簽。這個區(qū)分看起來簡單但實際做項目時很多人會搞混分類和聚類。分類已知類別判斷新樣本屬于哪一類。比如已知好瓜和壞瓜的標準判斷一個新西瓜屬于哪類。聚類不知道類別把相似的樣本聚在一起。比如把一堆西瓜按相似度分成幾組但每組代表什么意義需要你自己解釋。關鍵區(qū)別在于分類的類別是預先定義的聚類的類別是算法生成的。所以分類可以用準確率評估聚類只能用輪廓系數(shù)、簇內距離等指標評估而且這些指標只能說明聚得好不好不能說明聚得對不對。我見過一個典型的誤用有人用聚類算法做客戶分群聚出5類后直接給每類貼標簽說這是高價值客戶這是流失客戶但實際上聚類結果和業(yè)務價值沒有必然聯(lián)系。聚類只是把相似的人放在一起至于這群人是不是高價值需要額外分析。4.3 訓練集和測試集怎么分比例、隨機性與數(shù)據(jù)泄漏數(shù)據(jù)劃分看起來是最簡單的步驟但坑最多。比例問題常見的是7:3或8:2。但如果數(shù)據(jù)量很小比如幾百條留出法會導致測試集太小評估結果不穩(wěn)定。這時候用交叉驗證更合適。隨機性問題劃分時要隨機打亂否則如果數(shù)據(jù)本身有順序比如按時間排列直接切分會導致訓練集和測試集分布不一致。比如用1月到10月的數(shù)據(jù)訓練11月到12月的數(shù)據(jù)測試如果業(yè)務在11月發(fā)生了重大變化模型效果會失真。數(shù)據(jù)泄漏這是最隱蔽的坑。比如你在劃分數(shù)據(jù)之前先對全體數(shù)據(jù)做了標準化用全體數(shù)據(jù)的均值和方差然后再劃分訓練集和測試集。這時候測試集的信息已經泄漏到訓練過程中了評估結果會偏樂觀。正確做法是先劃分再在訓練集上計算標準化參數(shù)然后應用到測試集。提示數(shù)據(jù)泄漏的形式很多除了標準化還有特征選擇、缺失值填充、過采樣等。原則是任何用到全體數(shù)據(jù)的操作都必須在劃分之后、只在訓練集上進行。4.4 評估指標準確率為什么常常騙人緒論里提到了錯誤率和精度但實際項目中準確率往往不是最好的指標。舉個例子如果99%的西瓜都是好瓜那么一個永遠預測好瓜的模型準確率是99%但它一個壞瓜都識別不出來。這時候你需要看查準率精確率和查全率召回率。查準率預測為好瓜的里面有多少真的是好瓜查全率真正的好瓜里面有多少被預測出來了。這兩個指標往往此消彼長。你如果把閾值調高只預測非常確定是好瓜的查準率會上升但查全率會下降反之亦然。所以實際中常用F1值兩者的調和平均來平衡。選擇哪個指標取決于業(yè)務場景。比如垃圾郵件過濾你更在意不要誤殺正常郵件查準率而疾病篩查你更在意不要漏掉病人查全率。這個選擇沒有標準答案但必須和業(yè)務目標對齊。5. 我讀緒論時踩過的坑和后來才懂的事5.1 第一遍讀不懂很正常別在符號上死磕我第一次讀緒論時被那些數(shù)學符號卡了很久。比如假設空間的公式、版本空間的表示當時覺得不搞懂這些符號就沒法往下讀。后來發(fā)現(xiàn)第一遍讀的時候重要的是理解概念在說什么而不是糾結符號的嚴格定義。符號是后面章節(jié)反復用的時候才需要精確掌握的。我的建議是第一遍讀緒論重點搞懂三件事——機器學習在解決什么問題、假設空間和版本空間是什么、歸納偏好為什么重要。其他的定義能記多少記多少后面用到再回頭查。5.2 沒有免費午餐不是讓你放棄選算法NFL定理容易被誤解成反正所有算法都一樣隨便選一個就行。這是完全錯誤的。NFL的前提是在所有可能的問題上但你的問題不是所有問題而是一個具體問題。在這個具體問題上一定有某些算法比其他算法更合適。所以NFL的真正啟示是不要脫離問題談算法也不要指望一個算法解決所有問題。做項目時先分析數(shù)據(jù)的特點維度、樣本量、分布、噪聲再根據(jù)這些特點選擇假設匹配的算法。5.3 歸納偏好是雙刃劍它幫你也限制你歸納偏好讓學習算法能在版本空間里做出選擇但它也可能讓你錯過更好的假設。比如你默認規(guī)律是線性的就可能忽略非線性關系你默認特征之間獨立就可能忽略特征交互。實操中的應對方法是多試幾種不同偏好的模型看哪個在驗證集上表現(xiàn)更好。這不是盲目試錯而是用實驗來檢驗你的假設是否合理。如果線性模型和樹模型效果差不多那可能說明數(shù)據(jù)里的規(guī)律確實比較簡單如果差距很大那說明你的假設選擇很關鍵。5.4 緒論里的簡單例子其實不簡單教材用西瓜例子貫穿全書很多人覺得太簡單了沒什么用。但實際上西瓜例子的價值在于它足夠小可以手動推導。比如假設空間有17種假設你可以一個個列出來看哪些符合訓練數(shù)據(jù)哪些不符合。這個過程能幫你真正理解版本空間是怎么來的。我后來在教別人的時候會讓他們真的動手列一遍這17種假設然后根據(jù)幾個訓練樣本篩出版本空間。做過一遍之后對假設空間版本空間歸納偏好的理解會完全不一樣。這比看十遍定義都管用。6. 把緒論當成地圖而不是門檻回頭看緒論這一章最大的價值不是教會你某個具體算法而是給你一套語言和框架。后面講決策樹時你會用到假設空間的概念講神經網絡時你會用到泛化和過擬合的討論講集成學習時你會用到歸納偏好和沒有免費午餐的思想。如果緒論沒讀透后面每一章都會覺得突然冒出來一個新概念但如果緒論讀透了你會發(fā)現(xiàn)后面所有內容都在回應緒論里提出的問題。我自己的習慣是每學完一個算法就回頭翻一次緒論看看這個算法在假設空間里處于什么位置它的歸納偏好是什么它解決了緒論的哪個問題。這樣反復幾次整本書的邏輯就串起來了。最后分享一個小心得讀緒論時不要追求一遍全懂。把它當成一張地圖第一遍只需要知道大概有哪些地方后面每去一個地方再回來看地圖理解會越來越深。這比在第一頁就死磕到底要高效得多。