器學(xué)習(xí)概述:從核心概念到完整項(xiàng)目流程與算法地圖)
先講個(gè)我常對(duì)新人說(shuō)的比喻機(jī)器學(xué)習(xí)不是魔法它更像是讓你的程序?qū)W會(huì)“從例子里找規(guī)律”。你不需要手寫(xiě)一條規(guī)則說(shuō)“如果郵件里有‘中獎(jiǎng)’就標(biāo)記為垃圾郵件”而是喂給它幾千封已經(jīng)標(biāo)好的郵件讓它自己發(fā)現(xiàn)“中獎(jiǎng)”“點(diǎn)擊鏈接”“轉(zhuǎn)賬”這些詞頻繁出現(xiàn)時(shí)大概率就是垃圾郵件。第2章作為整門(mén)課的“總覽章”目的就是讓你在動(dòng)手寫(xiě)第一行代碼之前先在腦子里搭起一張地圖機(jī)器學(xué)習(xí)解決什么問(wèn)題、有哪幾類(lèi)方法、一個(gè)完整項(xiàng)目要走哪些流程、又有哪些經(jīng)典算法等著你去認(rèn)識(shí)。這一章適合三類(lèi)人剛接觸機(jī)器學(xué)習(xí)、想建立全局認(rèn)知的初學(xué)者期末要考機(jī)器學(xué)習(xí)、需要快速梳理知識(shí)脈絡(luò)的學(xué)生以及已經(jīng)會(huì)調(diào)用幾個(gè)庫(kù)、但總覺(jué)得自己“只會(huì)用、不會(huì)講”的從業(yè)者??赐赀@一章你應(yīng)該能回答三個(gè)問(wèn)題機(jī)器學(xué)習(xí)的本質(zhì)是什么拿到一個(gè)業(yè)務(wù)問(wèn)題該怎么思考后續(xù)每一章講的算法各自站在地圖的哪個(gè)位置。1. 為什么要先從“概述”學(xué)起搞清楚機(jī)器學(xué)習(xí)到底解決什么問(wèn)題1.1 從兩個(gè)小例子理解機(jī)器學(xué)習(xí)的本質(zhì)很多初學(xué)者一上來(lái)就啃SVM、神經(jīng)網(wǎng)絡(luò)結(jié)果越學(xué)越亂原因就在于沒(méi)搞明白機(jī)器學(xué)習(xí)到底在干嘛。我用兩個(gè)例子把這件事說(shuō)透。第一個(gè)例子是“判斷房?jī)r(jià)”。傳統(tǒng)編程的思路是你分析影響房?jī)r(jià)的因素寫(xiě)出公式——面積乘以單價(jià)、樓層加系數(shù)、朝向加系數(shù)然后讓程序按公式計(jì)算。問(wèn)題在于現(xiàn)實(shí)世界的規(guī)律很難用手寫(xiě)規(guī)則窮盡比如學(xué)區(qū)、地鐵距離、裝修程度、交易時(shí)間這些因素怎么組合、權(quán)重多少靠人拍腦袋根本拍不準(zhǔn)。機(jī)器學(xué)習(xí)換了一種思路你收集一萬(wàn)條歷史成交記錄每條記錄里有面積、樓層、朝向、建成年代、成交價(jià)然后對(duì)算法說(shuō)“你自己去琢磨這些因素和價(jià)格之間是什么關(guān)系”。算法經(jīng)過(guò)訓(xùn)練會(huì)得到一個(gè)內(nèi)部函數(shù)以后輸入一套新房子的特征它就能輸出一個(gè)預(yù)測(cè)價(jià)格。你看差別不在于“有沒(méi)有公式”而在于公式是誰(shuí)找出來(lái)的——前者是程序員寫(xiě)的后者是算法從數(shù)據(jù)里學(xué)出來(lái)的。第二個(gè)例子是“識(shí)別貓的圖片”。手寫(xiě)規(guī)則在這里幾乎行不通你怎么用代碼描述“什么是貓”毛茸茸有耳朵有胡子每條規(guī)則都有無(wú)數(shù)例外。機(jī)器學(xué)習(xí)的方式是準(zhǔn)備幾萬(wàn)張標(biāo)好“貓/不是貓”的圖片讓模型自己發(fā)現(xiàn)像素層面的規(guī)律。這個(gè)過(guò)程沒(méi)法用幾行規(guī)則描述但效果遠(yuǎn)超任何手工方案。把兩個(gè)例子放在一起機(jī)器學(xué)習(xí)的本質(zhì)就浮出水面了利用數(shù)據(jù)通過(guò)算法自動(dòng)發(fā)現(xiàn)規(guī)律并用學(xué)到的規(guī)律對(duì)未知樣本進(jìn)行預(yù)測(cè)或決策。核心三要素是數(shù)據(jù)、模型和算力其中數(shù)據(jù)是燃料模型是引擎算力是讓引擎跑起來(lái)的條件。第2章的一大任務(wù)就是把你對(duì)“機(jī)器學(xué)習(xí)就是調(diào)庫(kù)”的錯(cuò)覺(jué)糾正過(guò)來(lái)讓你意識(shí)到建模前的數(shù)據(jù)理解、問(wèn)題定義往往比調(diào)參更決定項(xiàng)目成敗。1.2 一套必須記牢的核心術(shù)語(yǔ)表概述章最容易被忽略、卻最值得花時(shí)間的地方是那些反復(fù)出現(xiàn)的名詞。別看它們簡(jiǎn)單后面每章都會(huì)用到理解不透后面全是坑。我把最核心的一批術(shù)語(yǔ)整理成了一張對(duì)照表。訓(xùn)練樣本與數(shù)據(jù)集模型用來(lái)學(xué)習(xí)的每一條數(shù)據(jù)叫一個(gè)樣本比如一條房屋成交記錄、一封標(biāo)注過(guò)的郵件。所有樣本組成的集合叫數(shù)據(jù)集。數(shù)據(jù)集通常會(huì)劃分成訓(xùn)練集、驗(yàn)證集和測(cè)試集訓(xùn)練集用來(lái)學(xué)參數(shù)驗(yàn)證集用來(lái)調(diào)超參數(shù)測(cè)試集用來(lái)做最終評(píng)估。三者的邊界必須清楚很多人后面犯過(guò)擬合的錯(cuò)誤根源就是混淆了它們。特征與標(biāo)簽特征是描述樣本的維度比如房?jī)r(jià)預(yù)測(cè)里的面積、樓層標(biāo)簽是你想預(yù)測(cè)的目標(biāo)值比如成交價(jià)。有標(biāo)簽的數(shù)據(jù)叫監(jiān)督信號(hào)沒(méi)有標(biāo)簽的數(shù)據(jù)只能做無(wú)監(jiān)督學(xué)習(xí)。特征工程是機(jī)器學(xué)習(xí)里最“吃功夫”的環(huán)節(jié)——同樣的算法喂不同的特征效果能差出一大截。模型與參數(shù)模型是算法的具體形態(tài)可以理解為一個(gè)帶未知系數(shù)的函數(shù)。比如線(xiàn)性回歸假設(shè)目標(biāo)值是特征的線(xiàn)性組合訓(xùn)練過(guò)程就是找到最合適的系數(shù)參數(shù)讓預(yù)測(cè)值和真實(shí)值的差距最小。模型的表現(xiàn)上限很大程度上由模型結(jié)構(gòu)假設(shè)空間決定。訓(xùn)練與推理訓(xùn)練是讓模型在數(shù)據(jù)上調(diào)整參數(shù)的過(guò)程耗時(shí)通常較長(zhǎng)推理是訓(xùn)練完成后用模型對(duì)新數(shù)據(jù)做預(yù)測(cè)的過(guò)程要求速度快、延遲低。在面試?yán)镞@兩個(gè)詞經(jīng)常被拿來(lái)確認(rèn)候選人是否真的做過(guò)端到端項(xiàng)目。欠擬合與過(guò)擬合欠擬合是模型太簡(jiǎn)單訓(xùn)練數(shù)據(jù)上的表現(xiàn)都很差過(guò)擬合是模型把訓(xùn)練數(shù)據(jù)背下來(lái)了新數(shù)據(jù)上一塌糊涂。第2章建立這個(gè)直覺(jué)非常重要后面幾乎所有調(diào)參技巧本質(zhì)上都是在欠擬合和過(guò)擬合之間找平衡。術(shù)語(yǔ)一句話(huà)理解常見(jiàn)誤區(qū)特征樣本的可觀(guān)測(cè)屬性特征越多越好錯(cuò)誤標(biāo)簽要預(yù)測(cè)的目標(biāo)值無(wú)標(biāo)簽也能做監(jiān)督學(xué)習(xí)錯(cuò)誤訓(xùn)練集用來(lái)學(xué)參數(shù)的樣本訓(xùn)練集可參與調(diào)參錯(cuò)誤驗(yàn)證集用來(lái)選超參數(shù)的樣本驗(yàn)證集與測(cè)試集可混用錯(cuò)誤測(cè)試集用來(lái)最終評(píng)估的樣本重復(fù)用測(cè)試集調(diào)整模型錯(cuò)誤過(guò)擬合記住噪聲而非學(xué)規(guī)律訓(xùn)練誤差低就代表模型好錯(cuò)誤提示學(xué)概述章別急著記憶算法細(xì)節(jié)先確保上面這些術(shù)語(yǔ)你都能用自己的話(huà)說(shuō)清楚。我在帶新人時(shí)發(fā)現(xiàn)凡是項(xiàng)目做不下去的八成能在術(shù)語(yǔ)理解上找到漏洞。2. 三大學(xué)習(xí)范式監(jiān)督、無(wú)監(jiān)督與強(qiáng)化學(xué)習(xí)怎么選2.1 監(jiān)督學(xué)習(xí)有答案的題海戰(zhàn)術(shù)監(jiān)督學(xué)習(xí)是最常見(jiàn)、也最好理解的一類(lèi)范式。它的訓(xùn)練數(shù)據(jù)帶有“標(biāo)準(zhǔn)答案”——也就是標(biāo)簽。模型的任務(wù)是找到從特征到標(biāo)簽的映射關(guān)系。你可以把它類(lèi)比成做習(xí)題集題目是特征參考答案是標(biāo)簽?zāi)阕龆嗔司湍芸偨Y(jié)出解題套路。監(jiān)督學(xué)習(xí)再往下分根據(jù)標(biāo)簽類(lèi)型不同又分為分類(lèi)和回歸。分類(lèi)的標(biāo)簽是離散的類(lèi)別比如“垃圾郵件/正常郵件”“圖片里是貓/狗”回歸的標(biāo)簽是連續(xù)數(shù)值比如房?jī)r(jià)、氣溫、銷(xiāo)售額。判斷一個(gè)任務(wù)屬于分類(lèi)還是回歸就看你要預(yù)測(cè)的東西是“哪一種”還是“多少”。入門(mén)階段你需要熟悉的監(jiān)督學(xué)習(xí)算法包括線(xiàn)性回歸、邏輯回歸、決策樹(shù)、支持向量機(jī)SVM、樸素貝葉斯、k近鄰KNN。這些算法各有脾氣有的適合高維稀疏數(shù)據(jù)有的適合特征間關(guān)系復(fù)雜的數(shù)據(jù)有的天生就能輸出概率。第2章不要求你掌握每個(gè)算法的數(shù)學(xué)推導(dǎo)但至少要能做到看到任務(wù)描述能判斷“這是分類(lèi)還是回歸”并且能說(shuō)出兩到三個(gè)候選算法。監(jiān)督學(xué)習(xí)在工業(yè)界的應(yīng)用最廣泛信貸風(fēng)控判斷客戶(hù)是否違約、推薦系統(tǒng)預(yù)測(cè)用戶(hù)點(diǎn)擊率、醫(yī)療診斷輔助判斷影像是否有病灶、自然語(yǔ)言處理中的情感分析。可以說(shuō)目前商業(yè)價(jià)值最直接、落地案例最多的基本都集中在監(jiān)督學(xué)習(xí)領(lǐng)域。這也是為什么絕大多數(shù)機(jī)器學(xué)習(xí)課程會(huì)把前中期篇幅都留給監(jiān)督學(xué)習(xí)。2.2 無(wú)監(jiān)督學(xué)習(xí)沒(méi)有標(biāo)準(zhǔn)答案的數(shù)據(jù)透視與監(jiān)督學(xué)習(xí)相對(duì)無(wú)監(jiān)督學(xué)習(xí)的數(shù)據(jù)沒(méi)有標(biāo)簽。沒(méi)有“參考答案”算法要從數(shù)據(jù)自身的分布中發(fā)現(xiàn)結(jié)構(gòu)。典型任務(wù)有兩類(lèi)聚類(lèi)和降維。聚類(lèi)是把相似的樣本自動(dòng)歸為一組。舉個(gè)例子一家電商公司有一千萬(wàn)用戶(hù)的行為數(shù)據(jù)但不知道用戶(hù)能分成幾類(lèi)。用聚類(lèi)算法可能分出“價(jià)格敏感型”“品質(zhì)優(yōu)先型”“高頻低價(jià)型”等群體后續(xù)運(yùn)營(yíng)就能針對(duì)不同群體做差異化策略。常見(jiàn)的聚類(lèi)算法有K-Means、層次聚類(lèi)、DBSCAN。DBSCAN是密度聚類(lèi)它的優(yōu)勢(shì)是不需要預(yù)先指定類(lèi)別數(shù)還能識(shí)別噪聲點(diǎn)這在處理帶有離群值的數(shù)據(jù)時(shí)非常實(shí)用。降維則是把高維數(shù)據(jù)壓縮到低維空間同時(shí)盡量保留原始信息。最經(jīng)典的PCA主成分分析在數(shù)據(jù)可視化、特征壓縮、去相關(guān)場(chǎng)景里出場(chǎng)率極高。高維數(shù)據(jù)不僅存儲(chǔ)和計(jì)算開(kāi)銷(xiāo)大還會(huì)帶來(lái)“維度災(zāi)難”——維度越高數(shù)據(jù)越稀疏模型越難學(xué)。降維可以緩解這個(gè)問(wèn)題還能幫我們發(fā)現(xiàn)數(shù)據(jù)內(nèi)部的潛在結(jié)構(gòu)。無(wú)監(jiān)督學(xué)習(xí)在實(shí)際項(xiàng)目中的角色往往不是直接產(chǎn)出最終模型而是作為前置步驟。比如先用聚類(lèi)做用戶(hù)分群再對(duì)每個(gè)群分別建監(jiān)督模型或者先用降維做數(shù)據(jù)探索再?zèng)Q定特征如何構(gòu)造。第2章把無(wú)監(jiān)督和監(jiān)督放在一起講目的就是讓你有一個(gè)全局視角不是所有問(wèn)題都有標(biāo)簽可用的無(wú)監(jiān)督方法往往是挖掘數(shù)據(jù)價(jià)值的第一步。2.3 強(qiáng)化學(xué)習(xí)與半監(jiān)督特殊場(chǎng)景下的補(bǔ)充方案強(qiáng)化學(xué)習(xí)是另一種完全不同的范式它不靠靜態(tài)數(shù)據(jù)集而是讓智能體在環(huán)境中不斷試錯(cuò)通過(guò)環(huán)境給出的獎(jiǎng)勵(lì)信號(hào)來(lái)調(diào)整策略。下圍棋的AlphaGo、游戲AI、機(jī)器人控制都是強(qiáng)化學(xué)習(xí)的典型場(chǎng)景。它的訓(xùn)練過(guò)程和監(jiān)督、無(wú)監(jiān)督差別很大涉及“狀態(tài)、動(dòng)作、獎(jiǎng)勵(lì)、策略”等一套完全不同的概念。半監(jiān)督學(xué)習(xí)則介于監(jiān)督與無(wú)監(jiān)督之間數(shù)據(jù)中只有少量樣本有標(biāo)簽大量樣本沒(méi)有標(biāo)簽?,F(xiàn)實(shí)場(chǎng)景里標(biāo)注成本往往很高比如醫(yī)療影像需要專(zhuān)家標(biāo)注而無(wú)標(biāo)注數(shù)據(jù)卻很容易獲得。半監(jiān)督學(xué)習(xí)想解決的問(wèn)題就是如何利用海量無(wú)標(biāo)注數(shù)據(jù)輔助少量有標(biāo)注數(shù)據(jù)訓(xùn)練出更好的模型。這在工業(yè)項(xiàng)目中是非常實(shí)用的思路。對(duì)初學(xué)者來(lái)說(shuō)第2章接觸到強(qiáng)化學(xué)習(xí)和半監(jiān)督不需要深入細(xì)節(jié)但要建立概念機(jī)器學(xué)習(xí)不是只有“有標(biāo)簽學(xué)”“沒(méi)標(biāo)簽自己玩”兩個(gè)極端中間還有大量交叉地帶不同的數(shù)據(jù)條件、任務(wù)場(chǎng)景決定了你應(yīng)該選擇哪條技術(shù)路線(xiàn)。這幾條路線(xiàn)在后續(xù)章節(jié)會(huì)分別展開(kāi)概述章的作用是先把版圖鋪開(kāi)。3. 機(jī)器學(xué)習(xí)的完整應(yīng)用流程從業(yè)務(wù)問(wèn)題到模型上線(xiàn)的七個(gè)環(huán)節(jié)3.1 定義問(wèn)題與評(píng)估指標(biāo)別急著跑模型我把這個(gè)環(huán)節(jié)放在第一位因?yàn)檫@是新手最容易跳過(guò)的。很多人拿到數(shù)據(jù)第一反應(yīng)是“先跑個(gè)模型看看”結(jié)果跑完發(fā)現(xiàn)業(yè)務(wù)上根本沒(méi)法用。正確的做法是先回答幾個(gè)問(wèn)題這個(gè)任務(wù)到底要預(yù)測(cè)什么預(yù)測(cè)結(jié)果給誰(shuí)用預(yù)測(cè)錯(cuò)了代價(jià)有多大舉例說(shuō)明。假設(shè)業(yè)務(wù)方說(shuō)“我們想預(yù)測(cè)用戶(hù)會(huì)不會(huì)流失”。你需要繼續(xù)追問(wèn)“流失”怎么定義是30天沒(méi)登錄還是連續(xù)兩個(gè)月不消費(fèi)預(yù)測(cè)的時(shí)間窗口是多久模型輸出的結(jié)果是用來(lái)做短信召回還是用來(lái)調(diào)整產(chǎn)品策略這些問(wèn)題的答案直接決定標(biāo)簽怎么定、特征怎么選、評(píng)估指標(biāo)怎么選。評(píng)估指標(biāo)的選擇也是個(gè)大學(xué)問(wèn)。分類(lèi)問(wèn)題常用準(zhǔn)確率、精確率、召回率、F1值回歸問(wèn)題常用均方誤差MSE、平均絕對(duì)誤差MAE排序問(wèn)題還會(huì)用AUC。指標(biāo)選錯(cuò)模型就帶偏方向。比如在癌癥篩查場(chǎng)景漏診一個(gè)病人的代價(jià)非常高所以召回率比準(zhǔn)確率重要得多在垃圾郵件過(guò)濾場(chǎng)景誤殺一封正常郵件的代價(jià)可能比漏放一封垃圾郵件更高指標(biāo)權(quán)衡就不同。我把機(jī)器學(xué)習(xí)的標(biāo)準(zhǔn)流程拆成七個(gè)環(huán)節(jié)它們之間可能有反復(fù)迭代但大順序是穩(wěn)定的業(yè)務(wù)問(wèn)題拆解為機(jī)器學(xué)習(xí)問(wèn)題明確輸入輸出數(shù)據(jù)采集從數(shù)據(jù)庫(kù)、日志、第三方API等處獲取數(shù)據(jù)數(shù)據(jù)清洗處理缺失值、重復(fù)值、異常值特征工程構(gòu)造、篩選、轉(zhuǎn)換特征模型選擇與訓(xùn)練劃分訓(xùn)練集、驗(yàn)證集、測(cè)試集模型評(píng)估與調(diào)優(yōu)用驗(yàn)證集調(diào)參用測(cè)試集做最終評(píng)估部署上線(xiàn)與監(jiān)控接入線(xiàn)上流量持續(xù)跟蹤效果。對(duì)初學(xué)者環(huán)節(jié)1和2最容易被輕視但真實(shí)項(xiàng)目中它們往往占用最多時(shí)間。有句話(huà)在業(yè)內(nèi)流傳已久數(shù)據(jù)和特征決定了模型效果的上限算法只是在逼近這個(gè)上限。概述章之所以要講整條流程就是希望你從一開(kāi)始就建立“工程思維”而不是只盯著算法本身。3.2 數(shù)據(jù)清洗與特征工程決定模型上限的隱形戰(zhàn)場(chǎng)數(shù)據(jù)清洗聽(tīng)起來(lái)樸素但做起來(lái)全是細(xì)節(jié)。真實(shí)數(shù)據(jù)很少是干干凈凈的表格常常存在缺失值、格式不統(tǒng)一、單位混亂、重復(fù)記錄甚至人為錄入錯(cuò)誤。清洗本身不是目的目的是讓數(shù)據(jù)能真實(shí)反映業(yè)務(wù)規(guī)律。常見(jiàn)的處理手段包括用均值/中位數(shù)/眾數(shù)填充缺失值或者干脆刪除缺失比例過(guò)高的字段用3σ原則或IQR方法識(shí)別異常值對(duì)重復(fù)樣本去重把時(shí)間戳統(tǒng)一成同一時(shí)區(qū)格式。特征工程就更考驗(yàn)功力了。特征構(gòu)造是從原始數(shù)據(jù)中生成新的、更有表達(dá)力的維度比如把“注冊(cè)時(shí)間”和“最近登錄時(shí)間”合并成“活躍天數(shù)”特征選擇是去掉無(wú)關(guān)、冗余的特征降低噪聲和計(jì)算開(kāi)銷(xiāo)特征變換包括歸一化、標(biāo)準(zhǔn)化、分箱、對(duì)數(shù)變換目的是讓特征尺度一致或者讓偏態(tài)分布更接近正態(tài)。這里特別想強(qiáng)調(diào)特征工程的“為什么”同樣的數(shù)據(jù)為什么別人能做到90分你只能做到70分差距往往不在模型選擇而在特征工程。比如預(yù)測(cè)房?jī)r(jià)單獨(dú)用“面積”和“房齡”兩個(gè)特征線(xiàn)性模型可能表現(xiàn)平平但你構(gòu)造出“單價(jià)”和“剩余產(chǎn)權(quán)年限”這樣的特征后模型的理解能力會(huì)大幅提升。第2章會(huì)對(duì)特征工程有一個(gè)初步介紹后面會(huì)有專(zhuān)門(mén)章節(jié)深入但請(qǐng)你從第一天起就養(yǎng)成習(xí)慣拿到數(shù)據(jù)先玩特征再碰模型。3.3 模型訓(xùn)練、評(píng)估與調(diào)參在偏差和方差之間走鋼絲完成數(shù)據(jù)準(zhǔn)備后才輪到訓(xùn)練模型。訓(xùn)練的第一步是切分?jǐn)?shù)據(jù)常見(jiàn)做法是按7:2:1或6:2:2劃分訓(xùn)練集、驗(yàn)證集、測(cè)試集。劃分時(shí)要注意隨機(jī)性和分層性分類(lèi)問(wèn)題里最好保持各類(lèi)別比例在訓(xùn)練集和測(cè)試集中一致這叫分層采樣。訓(xùn)練完成后要在驗(yàn)證集上評(píng)估表現(xiàn)然后調(diào)整超參數(shù)比如決策樹(shù)的最大深度、隨機(jī)森林的樹(shù)數(shù)量、SVM的懲罰系數(shù)C。調(diào)參的方法從手動(dòng)試錯(cuò)到網(wǎng)格搜索Grid Search、隨機(jī)搜索Random Search再到貝葉斯優(yōu)化復(fù)雜度遞增。初學(xué)者最容易犯的錯(cuò)誤是拿測(cè)試集反復(fù)調(diào)參——這相當(dāng)于把測(cè)試集的答案泄露給了模型最終評(píng)估結(jié)果會(huì)虛高上線(xiàn)后馬上現(xiàn)原形。評(píng)估階段還要關(guān)注模型是欠擬合還是過(guò)擬合通??梢酝瑫r(shí)看訓(xùn)練集和驗(yàn)證集的誤差。訓(xùn)練誤差高、驗(yàn)證誤差也高大概率是欠擬合可以增加模型復(fù)雜度、增加特征、減少正則化訓(xùn)練誤差低、驗(yàn)證誤差高大概率是過(guò)擬合可以增加數(shù)據(jù)量、簡(jiǎn)化模型、強(qiáng)化正則化、做特征選擇。這背后的道理用一個(gè)通俗的類(lèi)比說(shuō)欠擬合是學(xué)習(xí)不夠見(jiàn)啥都陌生過(guò)擬合是死記硬背換一道題就露餡。第2章只要把這種“病征—病因—對(duì)策”的對(duì)應(yīng)關(guān)系建立起來(lái)后面學(xué)調(diào)參就會(huì)輕松很多。3.4 部署、監(jiān)控與迭代建模只是開(kāi)始學(xué)校作業(yè)往往到模型評(píng)估就結(jié)束了但真實(shí)項(xiàng)目里建模之后的環(huán)節(jié)才是真正的考驗(yàn)。模型要部署到生產(chǎn)環(huán)境接受線(xiàn)上真實(shí)數(shù)據(jù)的檢驗(yàn)。部署方式常見(jiàn)的有嵌入到應(yīng)用后端作為服務(wù)接口或者做成獨(dú)立的模型服務(wù)通過(guò)HTTP/RPC接口被調(diào)用。部署之后監(jiān)控和迭代不可少。模型在訓(xùn)練數(shù)據(jù)上學(xué)到的是歷史規(guī)律但現(xiàn)實(shí)世界一直在變用戶(hù)行為、市場(chǎng)環(huán)境都會(huì)漂移。如果監(jiān)測(cè)到模型指標(biāo)下降比如準(zhǔn)確率下滑、線(xiàn)上分布和訓(xùn)練分布偏差過(guò)大就需要重新訓(xùn)練或微調(diào)。這個(gè)機(jī)制叫模型生命周期管理是機(jī)器學(xué)習(xí)工程化的核心話(huà)題。我在一線(xiàn)做過(guò)不少項(xiàng)目最深的體會(huì)是一個(gè)模型從開(kāi)始到真正產(chǎn)生業(yè)務(wù)價(jià)值建模只占三成工作量另外七成都在數(shù)據(jù)、工程和迭代上。第2章把全流程鋪開(kāi)給你看不是為了勸退而是讓你提前知道“未來(lái)要學(xué)的東西有哪些”后面每個(gè)環(huán)節(jié)都會(huì)有專(zhuān)門(mén)的章節(jié)來(lái)補(bǔ)。現(xiàn)在你只需要知道大框架然后按部就班往下走。4. 算法地圖入門(mén)階段必須認(rèn)識(shí)的那些名字4.1 分類(lèi)與回歸最常用的監(jiān)督算法入門(mén)機(jī)器學(xué)習(xí)繞不開(kāi)下面這些算法名字。這里我不做數(shù)學(xué)推導(dǎo)只給它們“畫(huà)像”幫你建立第一印象。線(xiàn)性回歸是最簡(jiǎn)單的回歸算法假設(shè)特征和目標(biāo)之間是線(xiàn)性關(guān)系可解釋性強(qiáng)適合作為 baseline。邏輯回歸雖然名字帶“回歸”實(shí)際是分類(lèi)算法它在線(xiàn)性回歸的基礎(chǔ)上套了一個(gè)Sigmoid函數(shù)輸出的是樣本屬于某個(gè)類(lèi)別的概率。因?yàn)榭山忉屝院?、?xùn)練快工業(yè)界風(fēng)控模型里邏輯回歸極其常見(jiàn)。決策樹(shù)則是一連串“如果—那么”規(guī)則的組合它會(huì)把特征空間劃分成若干區(qū)域每個(gè)區(qū)域給出一個(gè)預(yù)測(cè)值。決策樹(shù)最大的優(yōu)點(diǎn)是直觀(guān)畫(huà)出來(lái)人人都看得懂缺點(diǎn)是單棵樹(shù)容易過(guò)擬合。SVM擅長(zhǎng)處理高維數(shù)據(jù)核心思想是找一個(gè)“分類(lèi)間隔最大”的超平面配合核技巧還能處理非線(xiàn)性問(wèn)題。k近鄰KNN則是典型的“懶惰學(xué)習(xí)”它不訓(xùn)練模型預(yù)測(cè)時(shí)直接找距離最近的k個(gè)樣本投票。每個(gè)算法都有自己的假設(shè)和適用場(chǎng)景。線(xiàn)性模型適合特征與目標(biāo)關(guān)系比較規(guī)則的任務(wù)樹(shù)模型適合特征之間交互復(fù)雜、甚至存在非線(xiàn)性關(guān)系的任務(wù)SVM在小樣本、高維場(chǎng)景有優(yōu)勢(shì)神經(jīng)網(wǎng)絡(luò)則在海量數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)圖像、文本、音頻上表現(xiàn)突出。不存在一種算法在所有場(chǎng)景通吃這也是為什么要掌握多種算法的選型思路。特征維度高且數(shù)據(jù)稀疏時(shí)線(xiàn)性模型配合正則化往往比復(fù)雜模型效果更好特征之間關(guān)系復(fù)雜且數(shù)據(jù)量中等時(shí)決策樹(shù)和隨機(jī)森林是不錯(cuò)的選擇數(shù)據(jù)規(guī)模極大時(shí)梯度提升樹(shù)GBDT和神經(jīng)網(wǎng)絡(luò)成為主流。GBDT在各類(lèi)數(shù)據(jù)競(jìng)賽和工業(yè)搜索、推薦、廣告系統(tǒng)里長(zhǎng)期霸榜單純樹(shù)模型的表達(dá)能力有限但通過(guò)多棵樹(shù)“串行提升”的方式可以把預(yù)測(cè)誤差一步步壓下去。學(xué)習(xí)到這個(gè)層次你就能理解為什么熱詞榜上總能看到這些算法名字了。4.2 聚類(lèi)與降維無(wú)監(jiān)督的兩大支柱無(wú)監(jiān)督學(xué)習(xí)里聚類(lèi)和降維是兩大主題。聚類(lèi)算法中K-Means 是最經(jīng)典的劃分式聚類(lèi)思路是隨機(jī)初始化k個(gè)中心點(diǎn)然后迭代“分配樣本—更新中心”直到收斂。它簡(jiǎn)單高效但需要預(yù)先指定k值且對(duì)初始中心點(diǎn)敏感。為解決后一個(gè)問(wèn)題K-Means 等改進(jìn)版本被提出讓初始中心盡量分散。層次聚類(lèi)如AGNES不預(yù)先指定簇?cái)?shù)量它通過(guò)不斷合并最相似的兩個(gè)簇生成一棵樹(shù)狀圖你可以從樹(shù)的任意高度“切一刀”得到想要的簇?cái)?shù)。這種方法的優(yōu)點(diǎn)是不需要提前知道k但計(jì)算復(fù)雜度較高不適合大規(guī)模數(shù)據(jù)。DBSCAN 則基于密度把樣本聚集在密度高的區(qū)域能識(shí)別任意形狀的簇還能把稀疏區(qū)域的點(diǎn)標(biāo)記為噪聲對(duì)離群點(diǎn)非常魯棒。降維方面PCA 是最常用的線(xiàn)性降維方法它找到數(shù)據(jù)方差最大的若干方向把數(shù)據(jù)投影到這些方向上。PCA 的數(shù)學(xué)本質(zhì)是特征值分解但它有一個(gè)好處不需要標(biāo)簽純無(wú)監(jiān)督就能完成因此在數(shù)據(jù)探索和預(yù)處理階段非常實(shí)用。t-SNE 和 UMAP 則是流形學(xué)習(xí)方法擅長(zhǎng)將高維數(shù)據(jù)映射到二維或三維空間用于可視化讓你能“看見(jiàn)”數(shù)據(jù)的分布結(jié)構(gòu)。很多人第一次用 t-SNE 畫(huà)圖時(shí)才發(fā)現(xiàn)原來(lái)自己的高維數(shù)據(jù)分成了一團(tuán)一團(tuán)的這種直觀(guān)感受極其震撼。4.3 集成學(xué)習(xí)為什么隨機(jī)森林和GBDT總出現(xiàn)在榜首集成學(xué)習(xí)的思想用一句話(huà)概括三個(gè)臭皮匠頂個(gè)諸葛亮。它不追求單個(gè)模型的極致表現(xiàn)而是訓(xùn)練多個(gè)模型把它們的預(yù)測(cè)結(jié)果組合起來(lái)。集成方式主要分為 Bagging 和 Boosting 兩條路子。Bagging 的代表是隨機(jī)森林。它的做法是從訓(xùn)練集中有放回地抽樣訓(xùn)練多棵決策樹(shù)每棵樹(shù)在隨機(jī)選出的特征子集上做分裂預(yù)測(cè)時(shí)所有樹(shù)投票決定結(jié)果。因?yàn)槊靠脴?shù)都在不同的數(shù)據(jù)子集、特征子集上訓(xùn)練樹(shù)與樹(shù)之間的相關(guān)性低組合起來(lái)方差大幅降低。隨機(jī)森林對(duì)異常值和噪聲比較穩(wěn)健幾乎不用太多調(diào)參就能獲得不錯(cuò)的效果因此非常適合作為很多項(xiàng)目的 baseline 模型。Boosting 的代表是 AdaBoost 和 GBDT。Boosting 的思路是“串行式糾錯(cuò)”先訓(xùn)練一棵弱樹(shù)重點(diǎn)關(guān)注被前一棵樹(shù)預(yù)測(cè)錯(cuò)的樣本再訓(xùn)練下一棵樹(shù)去彌補(bǔ)誤差重復(fù)多輪最終把所有樹(shù)加權(quán)求和。GBDT 在近十年大量數(shù)據(jù)競(jìng)賽中表現(xiàn)驚人XGBoost、LightGBM 都是它在工程上的優(yōu)秀實(shí)現(xiàn)速度快、精度高、支持自定義目標(biāo)函數(shù)成為 Kaggle 競(jìng)賽的“屠龍刀”。集成學(xué)習(xí)還解釋了“為什么樹(shù)模型組合后更強(qiáng)”背后的道理單個(gè)模型可能只看到了數(shù)據(jù)的某個(gè)側(cè)面多個(gè)模型從不同角度觀(guān)察組合起來(lái)就能更全面。實(shí)際上這個(gè)“多樣性組合”的思想在機(jī)器學(xué)習(xí)里非常通用后面你會(huì)見(jiàn)到更多體現(xiàn)這一思想的方法。第2章只要先記住 Bagging 和 Boosting 的區(qū)別——前者并行降方差、后者串行降偏差——就已經(jīng)達(dá)到大綱要求了。5. 新手學(xué)這一章最容易踩的坑與復(fù)習(xí)方向5.1 五個(gè)常見(jiàn)認(rèn)知誤區(qū)我見(jiàn)過(guò)太多初學(xué)者在“機(jī)器學(xué)習(xí)概述”階段就走偏整理出五個(gè)高頻誤區(qū)你在學(xué)習(xí)過(guò)程中可以時(shí)不時(shí)對(duì)照檢查。第一個(gè)誤區(qū)是“機(jī)器學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)”。神經(jīng)網(wǎng)絡(luò)只是眾多模型中的一類(lèi)很多任務(wù)用線(xiàn)性模型或者樹(shù)模型已經(jīng)能解決得很好沒(méi)必要一上來(lái)就上深度模型。理解這一點(diǎn)能幫你建立務(wù)實(shí)的選型觀(guān)。第二個(gè)誤區(qū)是“數(shù)據(jù)越多越好”。數(shù)據(jù)數(shù)量重要但質(zhì)量和相關(guān)性更關(guān)鍵。如果數(shù)據(jù)里噪聲很多、特征和標(biāo)簽關(guān)系微弱數(shù)據(jù)再多也只是放大錯(cuò)誤。第三個(gè)誤區(qū)是“準(zhǔn)確率越高模型越好”。準(zhǔn)確率高可能只是因?yàn)轭?lèi)別不平衡——比如99%的樣本是“不流失”那模型全部預(yù)測(cè)“不流失”也有99%的準(zhǔn)確率但實(shí)際上毫無(wú)用處要看精確率、召回率、F1、AUC等更細(xì)顆粒度的指標(biāo)。第四個(gè)誤區(qū)是“調(diào)參就能解決一切”。參數(shù)調(diào)優(yōu)只能在模型和特征的框架內(nèi)做微調(diào)如果特征一塌糊涂、數(shù)據(jù)泄漏嚴(yán)重再怎么調(diào)參都是徒勞。第五個(gè)誤區(qū)是“不用理解數(shù)學(xué)也能做好機(jī)器學(xué)習(xí)”。只調(diào)庫(kù)不做理解短期能跑通 demo但一旦遇到數(shù)據(jù)分布變化、模型效果異常、需要改進(jìn)設(shè)計(jì)時(shí)沒(méi)有理論基礎(chǔ)就沒(méi)法定位問(wèn)題。第2章不需要你啃公式但你至少要能看懂損失函數(shù)在做什么、梯度下降在做什么。5.2 期末復(fù)習(xí)與實(shí)戰(zhàn)練習(xí)的側(cè)重點(diǎn)如果你是為了期末考試復(fù)習(xí)第2章通常是重災(zāi)區(qū)因?yàn)楦拍疃?、考點(diǎn)散背起來(lái)很痛苦。我的建議是不要死記定義而是圍繞“為什么”來(lái)復(fù)習(xí)。比如為什么要把數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集、測(cè)試集為什么過(guò)擬合時(shí)增加正則化有效為什么無(wú)監(jiān)督學(xué)習(xí)里沒(méi)有標(biāo)簽也能建模把這些因果關(guān)系串起來(lái)比背三十條名詞解釋有效得多。??嫉念}型包括判斷一個(gè)場(chǎng)景應(yīng)該用分類(lèi)還是回歸給出一個(gè)數(shù)據(jù)集情境判斷應(yīng)該用監(jiān)督還是無(wú)監(jiān)督比較過(guò)擬合和欠擬合的現(xiàn)象與對(duì)策簡(jiǎn)述機(jī)器學(xué)習(xí)的應(yīng)用流程。此外還有一類(lèi)“概念辨析”題比如 Bagging 和 Boosting 的異同、K-Means 和 DBSCAN 的異同。復(fù)習(xí)時(shí)可以拿這些題目當(dāng)自測(cè)題每道題都能講清楚概念部分就過(guò)關(guān)了。實(shí)戰(zhàn)練習(xí)方面我建議找一個(gè)公開(kāi)數(shù)據(jù)集完整走一遍“定義問(wèn)題—探索數(shù)據(jù)—清洗—特征工程—選模型—評(píng)估—改進(jìn)”的流程。公開(kāi)數(shù)據(jù)集可以去 UCI、Kaggle、天池找經(jīng)典的入門(mén)數(shù)據(jù)集比如泰坦尼克號(hào)生存預(yù)測(cè)、波士頓房?jī)r(jià)教育用途、鳶尾花分類(lèi)。不需要多復(fù)雜關(guān)鍵是完整體驗(yàn)一次流程而不是只跑一個(gè)模型看準(zhǔn)確率。你甚至可以對(duì)自己提問(wèn)“如果這段時(shí)間線(xiàn)上模型效果下降了我該怎么排查”把流程思考寫(xiě)下來(lái)這筆賬會(huì)越算越清楚。5.3 學(xué)習(xí)資源與環(huán)境搭建的個(gè)人建議關(guān)于學(xué)習(xí)資料周志華老師的《機(jī)器學(xué)習(xí)》西瓜書(shū)和李航老師的《統(tǒng)計(jì)學(xué)習(xí)方法》被提及最多。西瓜書(shū)對(duì)初學(xué)者相對(duì)友好有大量直觀(guān)例子和圖示公式推導(dǎo)相對(duì)克制李航老師的書(shū)更偏理論和推導(dǎo)適合有一定基礎(chǔ)后作為工具書(shū)精讀。我的建議是第一遍以理解概念為主選西瓜書(shū)或網(wǎng)課比如公開(kāi)的機(jī)器學(xué)習(xí)課程打底第二遍刷李航的書(shū)配合公式推導(dǎo)會(huì)有一個(gè)質(zhì)的提升。入門(mén)課程方面中文環(huán)境下有很多優(yōu)秀資源臺(tái)大李宏毅老師的課程以生動(dòng)、貼近應(yīng)用著稱(chēng)很適合建立直覺(jué)吳恩達(dá)老師的課程是國(guó)外經(jīng)典作業(yè)設(shè)計(jì)循序漸進(jìn)代碼量不大但概念扎實(shí)。環(huán)境搭建我強(qiáng)烈建議從 Anaconda 開(kāi)始原因是它把 Python 解釋器、常用庫(kù)NumPy、Pandas、Scikit-learn、Matplotlib 等都整合好了省去大量配置時(shí)間。隔離環(huán)境用 conda 創(chuàng)建虛擬環(huán)境每個(gè)項(xiàng)目獨(dú)立一套依賴(lài)避免包版本沖突。在線(xiàn)實(shí)訓(xùn)對(duì)鞏固動(dòng)手能力很有幫助很多教學(xué)平臺(tái)提供了按章節(jié)拆解的編程題比如用 Scikit-learn 實(shí)現(xiàn)線(xiàn)性回歸、決策樹(shù)、SVM、K-Means、DBSCAN 等。這類(lèi)平臺(tái)的特點(diǎn)是給好數(shù)據(jù)和題目框架你只需要把算法補(bǔ)全并調(diào)參適合學(xué)完一章馬上練。我自己帶人學(xué)習(xí)時(shí)始終堅(jiān)持一個(gè)原則學(xué)一個(gè)概念配一次手寫(xiě)代碼驗(yàn)證。代碼不需要多漂亮跑通、能解釋結(jié)果就行。這比只看書(shū)有效十倍。寫(xiě)在最后的學(xué)習(xí)體會(huì)大概每次帶新人學(xué)到第2章我都會(huì)反復(fù)叮囑同一句話(huà)學(xué)完概述你不必記住所有算法的細(xì)節(jié)但一定要閉上眼睛能畫(huà)出整張地圖——機(jī)器學(xué)習(xí)解決什么問(wèn)題、有哪幾條技術(shù)路線(xiàn)、一個(gè)項(xiàng)目走哪幾步、常用算法各自站在地圖的哪個(gè)位置。做到了這一點(diǎn)后面每一章對(duì)你來(lái)說(shuō)都是在已有地圖上添加新地點(diǎn)而不是每次都在迷宮里重新找路。最后再分享一個(gè)小技巧。我學(xué)習(xí)時(shí)會(huì)自己動(dòng)手畫(huà)一張“一頁(yè)紙流程圖”把機(jī)器學(xué)習(xí)流程的七個(gè)環(huán)節(jié)寫(xiě)在紙上每學(xué)完一個(gè)章節(jié)就在對(duì)應(yīng)環(huán)節(jié)旁邊補(bǔ)充新學(xué)的算法、技巧、踩過(guò)的坑。到了期末復(fù)習(xí)或者項(xiàng)目實(shí)戰(zhàn)時(shí)這張紙就是我的“作弊小抄”信息密度極高比翻半年筆記都高效。現(xiàn)在這個(gè)習(xí)慣我保持了很多年也推薦你試試。