器學(xué)習(xí)入門指南:核心算法、復(fù)雜度與落地場(chǎng)景全解析)
如果你點(diǎn)進(jìn)這篇文章大概率和我當(dāng)年一樣被“機(jī)器學(xué)習(xí)”這四個(gè)字嚇住過(guò)。我做了好幾年機(jī)器學(xué)習(xí)相關(guān)的工作帶過(guò)不少零基礎(chǔ)的朋友甚至真有一位“太奶”級(jí)別的長(zhǎng)輩問(wèn)我這玩意兒是不是跟算命差不多所以今天這篇就是要把機(jī)器學(xué)習(xí)的全知識(shí)點(diǎn)、常用算法、復(fù)雜度判斷、落地場(chǎng)景一次性講明白。不管你是完全沒(méi)基礎(chǔ)的小白還是剛?cè)腴T想搭體系的同學(xué)都可以把這篇文章當(dāng)成一本不需要背的參考手冊(cè)從頭翻到尾挑自己需要的部分反復(fù)看。我不會(huì)上來(lái)丟一堆公式和術(shù)語(yǔ)也不會(huì)搞那種“先背會(huì)十本書再動(dòng)手”的勸退路線。我打算按一個(gè)真實(shí)項(xiàng)目的推進(jìn)順序來(lái)講先搞清楚機(jī)器學(xué)習(xí)解決什么問(wèn)題再走一遍完整流程然后把常用算法掰開(kāi)揉碎最后補(bǔ)上復(fù)雜度和場(chǎng)景選型這些實(shí)戰(zhàn)中真正值錢的東西。中間會(huì)穿插大量類比、表格和踩坑記錄都是我實(shí)際做項(xiàng)目時(shí)反復(fù)用過(guò)的經(jīng)驗(yàn)。1. 先搞清楚機(jī)器學(xué)習(xí)到底在學(xué)什么1.1 一個(gè)連“太奶”都能聽(tīng)懂的說(shuō)法機(jī)器學(xué)習(xí)說(shuō)白了就是讓計(jì)算機(jī)從數(shù)據(jù)里自己找規(guī)律再用這個(gè)規(guī)律去做預(yù)測(cè)或決策。傳統(tǒng)寫程序是什么樣你告訴電腦“如果溫度高于30度就開(kāi)空調(diào)”這是人把規(guī)則寫死。機(jī)器學(xué)習(xí)不一樣你給電腦一堆歷史數(shù)據(jù)比如過(guò)去一個(gè)月每天的溫度、濕度、是不是節(jié)假日、空調(diào)用沒(méi)開(kāi)它自己總結(jié)出一套規(guī)律以后再輸入一個(gè)新的日子它就能預(yù)測(cè)那天要不要開(kāi)空調(diào)。我給我家那位“太奶”長(zhǎng)輩講的時(shí)候用的是學(xué)做飯的例子。她說(shuō)她做紅燒肉靠“嘗”嘗一口就知道要不要加糖。機(jī)器學(xué)習(xí)也一樣給模型幾千道“菜”、對(duì)應(yīng)幾千個(gè)“調(diào)味方案”它反復(fù)“嘗”算誤差、調(diào)整參數(shù)最后練出一個(gè)“廚藝模型”。新來(lái)一道菜它不用從頭學(xué)直接“嘗”一下就能給出調(diào)味建議。這個(gè)例子里有機(jī)器學(xué)習(xí)最核心的三樣?xùn)|西數(shù)據(jù)就是那些“菜”和“調(diào)味方案”。沒(méi)有數(shù)據(jù)機(jī)器學(xué)習(xí)無(wú)從談起。模型就是從數(shù)據(jù)里學(xué)出來(lái)的“規(guī)律”。它是個(gè)數(shù)學(xué)結(jié)構(gòu)里面有一堆待確定的參數(shù)。訓(xùn)練就是讓模型不斷看數(shù)據(jù)、不斷修正自己參數(shù)的過(guò)程。相當(dāng)于反復(fù)試菜、調(diào)味。理解了這三樣后面所有算法都是在回答同一個(gè)問(wèn)題用什么樣的數(shù)學(xué)結(jié)構(gòu)、什么樣的訓(xùn)練方式能最好地從數(shù)據(jù)里挖出規(guī)律。1.2 機(jī)器學(xué)習(xí)到底能解決哪幾類問(wèn)題很多新手上來(lái)就背算法卻不知道每個(gè)算法是給什么“題型”準(zhǔn)備的。我建議先把問(wèn)題分類搞清楚因?yàn)檫x算法本質(zhì)上就是根據(jù)“題目的形狀”來(lái)選工具。絕大多數(shù)機(jī)器學(xué)習(xí)落地任務(wù)逃不出這四大類第一類是分類。輸出是一個(gè)離散的類別標(biāo)簽。比如判斷一封郵件是垃圾郵件還是正常郵件判斷圖片里是貓還是狗判斷一筆交易是不是欺詐。這類問(wèn)題里模型給的結(jié)果就是“哪一類”最多附帶一個(gè)“屬于這個(gè)類別的概率”。分類又分二分類和多分類二分類比如“是/否”多分類比如“蘋果/香蕉/橘子”。第二類是回歸。輸出是一個(gè)連續(xù)數(shù)值。比如預(yù)測(cè)明天的氣溫是27.3度預(yù)測(cè)一套房子的價(jià)格是280萬(wàn)預(yù)測(cè)一個(gè)用戶下個(gè)月會(huì)在這個(gè)平臺(tái)消費(fèi)多少錢。回歸和分類的本質(zhì)區(qū)別是分類的答案是有限的選項(xiàng)回歸的答案是數(shù)軸上的任意一點(diǎn)。第三類是聚類。它和分類最大的不同是沒(méi)有預(yù)先給定的標(biāo)簽。給一堆數(shù)據(jù)讓算法自己發(fā)現(xiàn)哪些樣本“長(zhǎng)得像”自動(dòng)分成一堆一堆。比如給一群用戶的行為數(shù)據(jù)讓模型自動(dòng)劃出“高活躍”“中等活躍”“沉睡用戶”這些群體不需要人事先告訴它有幾類、類名是什么。聚類常用于用戶畫像、異常檢測(cè)、數(shù)據(jù)壓縮。第四類是降維。它的目的是把高維數(shù)據(jù)壓到低維同時(shí)盡量保留信息。為什么需要降維舉個(gè)直觀例子一張圖片有100×100個(gè)像素點(diǎn)相當(dāng)于10000個(gè)維度。直接扔給模型計(jì)算量大、還容易學(xué)到噪聲。降維可以把它壓成幾十個(gè)維度讓數(shù)據(jù)更容易可視化、更容易訓(xùn)練。還有兩類比較“高級(jí)”的問(wèn)題但落地也很多。一類是推薦排序預(yù)測(cè)用戶可能喜歡哪個(gè)商品、哪條視頻然后排個(gè)序一類是生成根據(jù)條件生成新的文本、圖像、語(yǔ)音。生成類問(wèn)題這幾年特別火背后大多是神經(jīng)網(wǎng)絡(luò)模型帶著生成式對(duì)抗網(wǎng)絡(luò)或擴(kuò)散模型那套思路。1.3 三種主流學(xué)習(xí)范式監(jiān)督、無(wú)監(jiān)督、強(qiáng)化任務(wù)分類是“考什么題”學(xué)習(xí)范式是“怎么學(xué)”。市面上幾乎所有算法都能歸進(jìn)三大范式里。監(jiān)督學(xué)習(xí)訓(xùn)練數(shù)據(jù)里既有輸入又有標(biāo)準(zhǔn)答案標(biāo)簽。模型的目標(biāo)是學(xué)會(huì)從輸入映射到答案以后看見(jiàn)沒(méi)見(jiàn)過(guò)的輸入也能給出預(yù)測(cè)。分類、回歸都屬于監(jiān)督學(xué)習(xí)。比如給一批房屋面積、地段、房齡輸入再給對(duì)應(yīng)的成交價(jià)標(biāo)簽?zāi)P途蛯W(xué)到“價(jià)格怎么從這些因素里算出來(lái)”。這是落地最廣、最符合直覺(jué)的一種新手入門建議從監(jiān)督學(xué)習(xí)開(kāi)始。無(wú)監(jiān)督學(xué)習(xí)只有輸入沒(méi)有標(biāo)簽。算法自己探索數(shù)據(jù)內(nèi)部的隱藏結(jié)構(gòu)。聚類、降維、異常檢測(cè)都屬于這個(gè)范疇。無(wú)監(jiān)督學(xué)習(xí)適合數(shù)據(jù)多、標(biāo)簽貴、或者你也不知道該分幾類的場(chǎng)景。比如新做一款產(chǎn)品、還沒(méi)有任何用戶打標(biāo)數(shù)據(jù)只能用聚類先看看用戶大概分成幾種行為模式。強(qiáng)化學(xué)習(xí)沒(méi)有標(biāo)準(zhǔn)答案但有一個(gè)“獎(jiǎng)勵(lì)信號(hào)”。算法智能體通過(guò)不斷嘗試動(dòng)作、觀察環(huán)境反饋、最大化長(zhǎng)期收益來(lái)學(xué)習(xí)。下棋打敗人類頂尖選手、機(jī)器人走路、廣告出價(jià)策略都是強(qiáng)化學(xué)習(xí)的典型場(chǎng)景。它是個(gè)很有魅力的方向但難度和資源消耗都比前兩類高新手不建議一上來(lái)就猛磕。一句話總結(jié)有標(biāo)簽找映射用監(jiān)督?jīng)]標(biāo)簽找結(jié)構(gòu)用無(wú)監(jiān)督要靠反饋試錯(cuò)用強(qiáng)化。后面講的所有算法你都能對(duì)號(hào)入座。2. 一個(gè)機(jī)器學(xué)習(xí)項(xiàng)目的完整流程很多零基礎(chǔ)同學(xué)以為機(jī)器學(xué)習(xí)就是“跑個(gè)模型出個(gè)結(jié)果”其實(shí)模型訓(xùn)練只是整條流水線的中間一段。我見(jiàn)過(guò)太多剛?cè)腴T的朋友在真實(shí)項(xiàng)目里栽跟頭不是因?yàn)椴粫?huì)調(diào)模型而是前面數(shù)據(jù)沒(méi)處理好、后面效果沒(méi)法驗(yàn)證。所以我用完整流程把這件事串起來(lái)順序如下問(wèn)題定義、數(shù)據(jù)獲取與清洗、特征工程、模型選擇、訓(xùn)練驗(yàn)證、部署監(jiān)控。2.1 問(wèn)題定義先把“做什么”說(shuō)清楚這一步最不起眼也最容易翻車。我見(jiàn)過(guò)有人拿一堆用戶行為數(shù)據(jù)上來(lái)就要“做一個(gè)智能的系統(tǒng)”我問(wèn)他想解決什么業(yè)務(wù)問(wèn)題他說(shuō)不清楚。沒(méi)有清晰的問(wèn)題定義后面全是在做無(wú)用功。問(wèn)題定義要做三件事明確預(yù)測(cè)目標(biāo)。到底要預(yù)測(cè)什么是一個(gè)數(shù)值下月銷量還是一個(gè)類別用戶會(huì)不會(huì)流失還是一個(gè)排序給用戶推薦什么明確輸入范圍。哪些數(shù)據(jù)能拿到、能用哪些數(shù)據(jù)是“未來(lái)才有”的絕對(duì)不能混進(jìn)訓(xùn)練里明確效果標(biāo)準(zhǔn)。什么叫“好”準(zhǔn)確率、召回率、還是收益這個(gè)必須跟業(yè)務(wù)方一起拍板。舉個(gè)例子某電商平臺(tái)要做一個(gè)“用戶流失預(yù)警”看起來(lái)很簡(jiǎn)單但一細(xì)究就發(fā)現(xiàn)問(wèn)題什么叫“流失”是30天沒(méi)登錄還是60天沒(méi)下單預(yù)測(cè)窗口是多長(zhǎng)是預(yù)測(cè)未來(lái)7天會(huì)不會(huì)流失還是30天這些不定義清楚連標(biāo)簽都不知道怎么打后面全是糊涂賬。2.2 數(shù)據(jù)獲取與清洗臟數(shù)據(jù)是最大敵人真實(shí)世界里數(shù)據(jù)永遠(yuǎn)是臟的。我在項(xiàng)目里總結(jié)過(guò)一句糙話數(shù)據(jù)清洗不是流程的開(kāi)胃菜而是主菜。常見(jiàn)問(wèn)題有這幾類缺失值某列大量為空。處理方式要么刪掉該列或?qū)?yīng)樣本要么用均值、中位數(shù)、眾數(shù)填充要么用模型預(yù)測(cè)缺失值。取舍標(biāo)準(zhǔn)是缺失比例太高比如超過(guò)70%且業(yè)務(wù)意義不大就刪缺失比例低就填充。重復(fù)值同一個(gè)樣本出現(xiàn)好幾次。如果不做去重模型會(huì)“重復(fù)學(xué)習(xí)”相當(dāng)于讓某些樣本在訓(xùn)練里權(quán)重變大導(dǎo)致偏科。異常值某個(gè)用戶的“年齡”寫成200歲或者某次實(shí)驗(yàn)數(shù)據(jù)明顯是傳感器故障。先用箱線圖、直方圖、Z-Score這些辦法把異常點(diǎn)找出來(lái)再判斷是數(shù)據(jù)錄入錯(cuò)誤、還是真實(shí)但罕見(jiàn)的極端情況。數(shù)據(jù)格式問(wèn)題日期字段是字符串、數(shù)值列里混著字母、中文名和英文名混用。這類問(wèn)題最煩處理起來(lái)很耗費(fèi)時(shí)間但沒(méi)有捷徑只能一批批人工核查。清洗環(huán)節(jié)我建議做一份“數(shù)據(jù)質(zhì)量報(bào)告”記錄每個(gè)字段的缺失率、取值范圍、異常比例。這份報(bào)告不只是給自己看更是給業(yè)務(wù)方確認(rèn)“數(shù)據(jù)到底能不能用”的憑據(jù)。2.3 特征工程決定模型上限的關(guān)鍵環(huán)節(jié)行業(yè)內(nèi)有一句話特征決定了模型的上限模型只是逼近這個(gè)上限。特征工程就是把你手頭的原始數(shù)據(jù)加工成模型更容易理解的“特征”。特征工程的核心操作包括特征提取從原始數(shù)據(jù)里提煉更有意義的代表。比如從“下單時(shí)間”這個(gè)時(shí)間戳里提出“星期幾”“是否周末”“幾點(diǎn)鐘”這些特征。特征構(gòu)造把兩個(gè)或多個(gè)特征組合成新特征。比如“購(gòu)買金額”除以“瀏覽時(shí)長(zhǎng)”構(gòu)造出“消費(fèi)速度”“距離”除以“送達(dá)時(shí)間”構(gòu)造出“配送效率”。特征編碼讓算法能“吃”這些數(shù)據(jù)。類別型特征要做獨(dú)熱編碼把一個(gè)“顏色”拆成“是紅/是藍(lán)/是綠”三個(gè)布爾變量數(shù)值型特征有時(shí)要做標(biāo)準(zhǔn)化、歸一化把不同量綱拉到一個(gè)尺度上。新手最容易犯的錯(cuò)有兩個(gè)一是把ID類的字段直接塞給模型比如用戶編號(hào)這不是特征只是個(gè)名字二是特征過(guò)多導(dǎo)致維數(shù)災(zāi)難。特征工程需要大量業(yè)務(wù)理解這也是機(jī)器學(xué)習(xí)崗位里最考驗(yàn)經(jīng)驗(yàn)的部分。2.4 模型選擇先選對(duì)方向再談?wù){(diào)參模型選擇不是拍腦袋選最火的。我一般按三個(gè)層次來(lái)判斷第一層問(wèn)題類型。分類選分類模型回歸選回歸模型聚類選聚類模型。這層錯(cuò)了后面全錯(cuò)。第二層數(shù)據(jù)規(guī)模與質(zhì)量。數(shù)據(jù)量小、特征少用線性模型或這樹(shù)模型足夠數(shù)據(jù)量巨大、是圖像語(yǔ)音這類非結(jié)構(gòu)化數(shù)據(jù)直接考慮深度學(xué)習(xí)方法。第三層業(yè)務(wù)約束。需要解釋性強(qiáng)的優(yōu)先決策樹(shù)、線性回歸、邏輯回歸只追求效果、不要求解釋的可以上隨機(jī)森林、XGBoost甚至神經(jīng)網(wǎng)絡(luò)。還需要考慮訓(xùn)練時(shí)間、上線成本、團(tuán)隊(duì)維護(hù)能力。在工業(yè)界能用簡(jiǎn)單模型解決就絕不上復(fù)雜模型。上線一個(gè)邏輯回歸可能只需要一臺(tái)機(jī)器上線一個(gè)深度模型可能要搞GPU集群和運(yùn)維人力成本差出兩個(gè)量級(jí)。2.5 訓(xùn)練、驗(yàn)證與測(cè)試別把測(cè)試集當(dāng)練習(xí)題模型訓(xùn)練不是“一次跑完就完事”。標(biāo)準(zhǔn)做法是把數(shù)據(jù)分成三份訓(xùn)練集用來(lái)學(xué)參數(shù)、驗(yàn)證集用來(lái)調(diào)超參數(shù)、做模型選擇、測(cè)試集用來(lái)最終評(píng)估模型泛化能力。為什么不能只用訓(xùn)練集做評(píng)估因?yàn)槟P屯耆赡堋氨诚隆庇?xùn)練集到了新數(shù)據(jù)上就露餡。這就像學(xué)生平時(shí)刷題把答案背下來(lái)遇到新題就不會(huì)做。訓(xùn)練集是課本驗(yàn)證集是模擬考測(cè)試集才是最終高考。建模過(guò)程中你可以反復(fù)用驗(yàn)證集調(diào)整策略但測(cè)試集只能碰一次碰多了測(cè)試集也變成訓(xùn)練的一部分了就失去了“檢測(cè)泛化能力”的意義。訓(xùn)練環(huán)節(jié)最關(guān)鍵的是超參數(shù)。超參數(shù)是訓(xùn)練前由人設(shè)定的參數(shù)比如學(xué)習(xí)率、樹(shù)的最大深度、正則化強(qiáng)度。超參數(shù)怎么調(diào)樸素做法是網(wǎng)格搜索把所有可能組合跑一遍高效做法是隨機(jī)搜索或貝葉斯優(yōu)化。新手一定要配合驗(yàn)證集去調(diào)不要用測(cè)試集去調(diào)。2.6 部署與監(jiān)控模型上線只是開(kāi)始模型訓(xùn)練完還得上線給業(yè)務(wù)用。部署方式有幾種離線批量預(yù)測(cè)每天定時(shí)跑一次把預(yù)測(cè)結(jié)果寫進(jìn)數(shù)據(jù)庫(kù)。適合做用戶畫像、周度流失預(yù)警。在線API服務(wù)把模型封裝成接口用戶請(qǐng)求進(jìn)來(lái)實(shí)時(shí)返回預(yù)測(cè)結(jié)果。適合風(fēng)控實(shí)時(shí)攔截、推薦實(shí)時(shí)響應(yīng)。邊緣端部署把模型壓小裝進(jìn)手機(jī)、攝像頭、智能音箱里沒(méi)有網(wǎng)絡(luò)也能跑。適合端側(cè)智能場(chǎng)景。上線之后最容易被忽視的是監(jiān)控。模型在真實(shí)環(huán)境下效果會(huì)漂移用戶行為變了、市場(chǎng)環(huán)境變了半年前訓(xùn)練效果很好的模型今天可能就變蠢了。所以必須監(jiān)控預(yù)測(cè)分布、關(guān)鍵指標(biāo)變化定期重新訓(xùn)練。模型不是一錘子買賣而是一個(gè)需要持續(xù)運(yùn)維的系統(tǒng)。這條經(jīng)驗(yàn)我是真金白銀換來(lái)的。3. 常用算法逐個(gè)吃透這一章是文章的硬核主菜。我會(huì)把機(jī)器學(xué)習(xí)里最常用的算法逐個(gè)拆開(kāi)每個(gè)都講三樣?xùn)|西核心思想、適用場(chǎng)景、優(yōu)缺點(diǎn)復(fù)雜度單獨(dú)放到下一章統(tǒng)一講。這些算法扎扎實(shí)實(shí)吃透了日常工作足夠用。3.1 線性回歸線性回歸是回歸問(wèn)題里最基礎(chǔ)、最經(jīng)典的算法。它的核心假設(shè)是預(yù)測(cè)目標(biāo)由一個(gè)或多個(gè)特征線性組合而成。數(shù)學(xué)形式就是y w1×x1 w2×x2 ... wn×xn b其中x是特征w是權(quán)重b是偏置。訓(xùn)練的目標(biāo)就是找到一組權(quán)重讓預(yù)測(cè)值跟真實(shí)值盡可能接近。那“多接近”該怎么定義最常見(jiàn)的是均方誤差MSE就是把每個(gè)樣本預(yù)測(cè)誤差的平方求平均。為什么用平方而不是絕對(duì)值因?yàn)槠椒秸`差函數(shù)是光滑的方便求導(dǎo)、方便用梯度下降這種優(yōu)化方法一步步逼近最優(yōu)權(quán)重。求導(dǎo)后能得到一個(gè)閉式解也就是我們常說(shuō)的最小二乘法如果特征特別多、樣本量特別大就用梯度下降法迭代求解。線性回歸的優(yōu)點(diǎn)極其突出簡(jiǎn)單、可解釋、訓(xùn)練快。它的缺點(diǎn)也明顯只能表達(dá)線性關(guān)系。真實(shí)世界里房?jī)r(jià)和面積并不是完美線性如果強(qiáng)行用直線去擬合效果就不好。所以線性回歸經(jīng)常要做特征變換比如把面積取平方、取對(duì)數(shù)把非線性關(guān)系“掰”成近似線性再擬合這就是多項(xiàng)式回歸的思想。生活類比線性回歸就像給人“定工資”。你假設(shè)一個(gè)人的工資由工齡、學(xué)歷、城市系數(shù)這三個(gè)數(shù)直接加權(quán)求和工齡每多一年工資漲多少學(xué)歷每高一級(jí)工資漲多少城市系數(shù)乘多少。訓(xùn)練就是根據(jù)歷史數(shù)據(jù)把這些“漲多少”定下來(lái)。3.2 邏輯回歸名不副實(shí)的分類王者邏輯回歸名字里帶“回歸”但它是個(gè)分類算法專攻二分類。它的做法是先像線性回歸那樣算出一個(gè)分?jǐn)?shù)然后把這個(gè)分?jǐn)?shù)扔進(jìn)一個(gè)叫Sigmoid的函數(shù)里壓到0到1之間解釋為“屬于正類的概率”。Sigmoid函數(shù)長(zhǎng)這樣值域(0,1)中間陡峭、兩頭平滑特別適合做概率輸出。為啥不直接在線性回歸輸出值上設(shè)個(gè)閾值比如50來(lái)分類因?yàn)榫€性回歸的輸出可能是0到1之外的任意數(shù)比如500、-300解釋成概率完全不合理。邏輯回歸通過(guò)Sigmoid把分?jǐn)?shù)硬壓到0~1概率意義立刻清晰了。邏輯回歸的核心優(yōu)勢(shì)有三個(gè)可解釋性極強(qiáng)每個(gè)特征的系數(shù)w直接告訴你這個(gè)特征每增加一個(gè)單位概率的對(duì)數(shù)值變化多少。在需要向業(yè)務(wù)方解釋的場(chǎng)景比如風(fēng)控規(guī)則、醫(yī)療輔助這個(gè)優(yōu)勢(shì)無(wú)可替代。訓(xùn)練快、資源省樣本量幾百萬(wàn)也能輕輕松松跑完。概率輸出友好風(fēng)控場(chǎng)景不僅要判斷“是不是欺詐”還希望輸出“欺詐概率”用來(lái)設(shè)定不同處置策略。邏輯回歸天然就能給。它的缺點(diǎn)是無(wú)法自動(dòng)處理復(fù)雜非線性關(guān)系所以實(shí)戰(zhàn)里人們往往給它配上大量的特征工程靠“喂飽特征”來(lái)彌補(bǔ)模型本身的簡(jiǎn)單。3.3 K近鄰KNN最樸素的“人以群分”K近鄰是我覺(jué)得最有直覺(jué)感的算法。它的邏輯特別簡(jiǎn)單給定一個(gè)新樣本找到訓(xùn)練集里離它最近的K個(gè)樣本讓這K個(gè)樣本投票決定它的類別分類或者取平均值回歸。比如判斷一只新水果是蘋果還是橘子就看它和訓(xùn)練集里哪個(gè)水果“長(zhǎng)得最像”如果最近的3個(gè)樣本里有兩個(gè)蘋果那新水果大概率也是蘋果。KNN幾乎沒(méi)有“訓(xùn)練”過(guò)程它只是把訓(xùn)練數(shù)據(jù)存起來(lái)預(yù)測(cè)時(shí)才現(xiàn)算距離。所以它也叫“懶惰學(xué)習(xí)”。正因如此它的預(yù)測(cè)計(jì)算量很大每個(gè)新樣本都要跟所有存量樣本算一遍距離。當(dāng)訓(xùn)練集有100萬(wàn)條時(shí)預(yù)測(cè)一次就要算100萬(wàn)次距離在線場(chǎng)景容易扛不住。KNN對(duì)K的選擇特別敏感。K太小模型容易受單個(gè)噪聲點(diǎn)影響K太大會(huì)把離得遠(yuǎn)的類別也拉進(jìn)來(lái)投票。我常用的經(jīng)驗(yàn)是先用交叉驗(yàn)證跑K1到20選效果最好的那個(gè)同時(shí)把距離度量歐氏距離、曼哈頓距離也一起對(duì)比。KNN還有一個(gè)隱藏前提數(shù)據(jù)必須標(biāo)準(zhǔn)化。因?yàn)榫嚯x計(jì)算對(duì)量綱極其敏感如果“收入”以“元”為單位幾千到幾萬(wàn)和“年齡”以“歲”為單位幾十距離幾乎會(huì)被收入完全主導(dǎo)年齡特征就白瞎了。3.4 樸素貝葉斯靠條件概率吃飯的聰明人樸素貝葉斯基于貝葉斯定理P(類別|特征) P(特征|類別) × P(類別) / P(特征)。翻譯成人話我要根據(jù)看到的一些特征反推這個(gè)東西屬于每個(gè)類別的概率取概率最大的那個(gè)作為預(yù)測(cè)結(jié)果?!皹闼亍倍种傅氖撬隽艘粋€(gè)非常強(qiáng)甚至有點(diǎn)不合理的假設(shè)所有特征之間相互獨(dú)立。就像判斷一封郵件是不是垃圾郵件它假設(shè)“出現(xiàn)‘發(fā)票’”和“出現(xiàn)‘點(diǎn)擊鏈接’”這兩個(gè)事件互不影響?,F(xiàn)實(shí)中它們很可能關(guān)聯(lián)但樸素貝葉斯說(shuō)哪怕不完全成立我也按獨(dú)立來(lái)算工程上照樣夠用。說(shuō)得有點(diǎn)抽象舉個(gè)實(shí)際例子。垃圾郵件檢測(cè)先統(tǒng)計(jì)訓(xùn)練郵件里垃圾郵件占比、正常郵件占比。再分別統(tǒng)計(jì)“發(fā)票”這個(gè)詞在垃圾郵件中出現(xiàn)概率、在正常郵件中出現(xiàn)概率。新來(lái)一封郵件同時(shí)包含“發(fā)票”“點(diǎn)擊鏈接”就用貝葉斯公式把兩個(gè)詞的概率乘起來(lái)算出它是垃圾郵件的后驗(yàn)概率。樸素貝葉斯的優(yōu)點(diǎn)是訓(xùn)練和預(yù)測(cè)都極快、對(duì)高維稀疏文本數(shù)據(jù)表現(xiàn)很好、需要樣本少。缺點(diǎn)是特征獨(dú)立性假設(shè)在復(fù)雜場(chǎng)景下不成立效果上限受限。實(shí)戰(zhàn)里它常作為文本分類、垃圾過(guò)濾的baseline基準(zhǔn)模型很多時(shí)候大家拿它跑一個(gè)效果作為后續(xù)復(fù)雜模型的對(duì)比錨點(diǎn)。3.5 決策樹(shù)長(zhǎng)著樹(shù)形結(jié)構(gòu)的“規(guī)則大師”決策樹(shù)的原理和“二十個(gè)問(wèn)題”游戲一模一樣。根節(jié)點(diǎn)上問(wèn)一個(gè)問(wèn)題根據(jù)答案分到不同分支再問(wèn)下一個(gè)問(wèn)題一路問(wèn)到葉子節(jié)點(diǎn)得到最終判斷。比如判斷“要不要給用戶發(fā)優(yōu)惠券”決策樹(shù)可能先問(wèn)“這個(gè)用戶最近30天購(gòu)買次數(shù)是否大于3次”是的話再問(wèn)“客單價(jià)是否超過(guò)200元”否則走“大于500元”那條層層下鉆最后樹(shù)到葉子給出“發(fā)”或“不發(fā)”。決策樹(shù)的訓(xùn)練過(guò)程核心是特征選擇每一層選哪個(gè)特征來(lái)切分?jǐn)?shù)據(jù)才能讓數(shù)據(jù)“分得最純”。衡量“純不純”的常見(jiàn)指標(biāo)是信息增益基于熵和基尼指數(shù)。熵可以理解為數(shù)據(jù)的混亂程度。切分后子節(jié)點(diǎn)的混亂程度都比切分前低說(shuō)明這次切分有價(jià)值。信息增益就是切分前后混亂程度的下降量。我喜歡把決策樹(shù)形容成“能自動(dòng)寫規(guī)則但容易走火入魔”的模型。它有幾個(gè)突出優(yōu)點(diǎn)可解釋性極強(qiáng)生成的樹(shù)可以直接畫出來(lái)業(yè)務(wù)方一眼能看懂。能處理非線性關(guān)系不需要對(duì)特征做復(fù)雜變換。能處理數(shù)值型和類別型特征混合的數(shù)據(jù)還自動(dòng)處理特征交互。缺點(diǎn)是容易過(guò)擬合。樹(shù)長(zhǎng)得越深越會(huì)拼命記住訓(xùn)練集里的細(xì)節(jié)泛化能力反而下降。所以實(shí)際工程里很少直接用單棵決策樹(shù)而是把它當(dāng)成集成算法的“零件”來(lái)用。3.6 隨機(jī)森林一群決策樹(shù)的合奏隨機(jī)森林的道理說(shuō)起來(lái)特別樸素一棵樹(shù)容易瞎想那就種幾百棵樹(shù)每棵樹(shù)都給出一個(gè)判斷最后大家投票。這叫做集成學(xué)習(xí)里的Bagging思想。但它不是簡(jiǎn)單地用同一份數(shù)據(jù)訓(xùn)練多棵樹(shù)那樣幾百棵樹(shù)其實(shí)都一樣沒(méi)意義。隨機(jī)森林做了兩件關(guān)鍵的事隨機(jī)采樣樣本每棵樹(shù)的訓(xùn)練集是從原始數(shù)據(jù)里隨機(jī)抽出的一個(gè)子集有放回抽樣保證每棵樹(shù)看到的數(shù)據(jù)不太一樣。隨機(jī)采樣特征每棵樹(shù)找最優(yōu)切分時(shí)不是看全部特征而是隨機(jī)抽一部分特征來(lái)挑。這樣每棵樹(shù)的分叉風(fēng)格不同樹(shù)與樹(shù)之間的差異性大了集成后效果才穩(wěn)。隨機(jī)森林實(shí)戰(zhàn)中表現(xiàn)非常穩(wěn)抗過(guò)擬合能力強(qiáng)還能輸出特征重要性排序。我經(jīng)常用它做“基線模型”和特征篩選工具先跑一版隨機(jī)森林看它給的特征重要性排個(gè)序把不重要的特征丟掉再往復(fù)雜模型上走。缺點(diǎn)是不如單棵決策樹(shù)那么直觀幾百棵樹(shù)不可能一個(gè)個(gè)展示給業(yè)務(wù)看另外在處理超高維稀疏數(shù)據(jù)比如文本詞向量時(shí)效果不如線性模型。3.7 支持向量機(jī)SVM追求“邊界最寬”的幾何派SVM的核心思想是在兩類樣本之間找一條“分界線”而且要找到離兩邊樣本點(diǎn)距離都最遠(yuǎn)的那條線。這條距離最遠(yuǎn)的線讓模型對(duì)新的樣本有最大的容忍度泛化能力更強(qiáng)。把這條思路向高處拓展一步如果數(shù)據(jù)在當(dāng)前維度根本沒(méi)法用直線分開(kāi)呢SVM使用了核函數(shù)把數(shù)據(jù)映射到更高維的空間里在升維后的空間里找到那條分隔超平面。比如二維平面上兩個(gè)圓套在一起本身沒(méi)法用直線分開(kāi)但映射到三維后加一個(gè)“半徑”維度兩個(gè)圓就變成可分的了。這就是“線性不可分升維可分”的直觀解釋。SVM的優(yōu)點(diǎn)在小樣本、高維數(shù)據(jù)上表現(xiàn)通常很棒邊界理論讓它泛化能力有保障。缺點(diǎn)訓(xùn)練時(shí)間長(zhǎng)樣本規(guī)模大了以后計(jì)算開(kāi)銷極大核函數(shù)選擇對(duì)效果影響大調(diào)參比較考驗(yàn)經(jīng)驗(yàn)?zāi)P徒忉屝云?。我記得早期做某圖像識(shí)別Demo時(shí)樣本只有幾千張傳統(tǒng)神經(jīng)網(wǎng)絡(luò)效果一般SVM配上合適的核反而表現(xiàn)更穩(wěn)健。后來(lái)數(shù)據(jù)量上來(lái)了才把主力切到神經(jīng)網(wǎng)絡(luò)。SVM適合中小規(guī)模數(shù)據(jù)尤其在樣本數(shù)量不多但特征維度很高的時(shí)候堪稱利器。3.8 K-Means聚類自動(dòng)分堆的無(wú)監(jiān)督主力K-Means是聚類算法里最常用、最好上手的。它要解決的問(wèn)題是給一堆沒(méi)有標(biāo)簽的數(shù)據(jù)點(diǎn)自動(dòng)分成K堆。名字里的“K”就是你想分成幾堆“Means”指每一堆的中心點(diǎn)是這堆樣本的平均位置。算法過(guò)程很簡(jiǎn)單隨機(jī)挑K個(gè)點(diǎn)作為初始中心。把每個(gè)樣本點(diǎn)分配給離它最近的中心形成K簇。重新計(jì)算每個(gè)簇的均值將簇的中心移動(dòng)到均值位置。重復(fù)第2、3步直到中心不再變化或變化很小。一開(kāi)始的隨機(jī)中心選點(diǎn)很影響最終結(jié)果所以實(shí)際跑K-Means經(jīng)常要初始化多次選目標(biāo)函數(shù)各點(diǎn)到各自中心的總距離最小的那一次。K怎么定一個(gè)常用方法是肘部法則畫一條“簇?cái)?shù)K vs 樣本到中心總距離”的曲線曲線下降速度由快變慢的拐點(diǎn)就是推薦K值。還有一個(gè)辦法是結(jié)合業(yè)務(wù)來(lái)定比如你就是想把用戶分成高、中、低三檔那K3即可。K-Means的優(yōu)點(diǎn)簡(jiǎn)單、快速、容易理解適合大規(guī)模數(shù)據(jù)的粗粒度分群。缺點(diǎn)對(duì)初始中心敏感、對(duì)離群點(diǎn)敏感、只能發(fā)現(xiàn)“球形”簇很難搞定形狀不規(guī)則或者密度不均的分布。它跟KNN名字很像但完全是兩回事——KNN是監(jiān)督學(xué)習(xí)的分類/回歸K-Means是無(wú)監(jiān)督學(xué)習(xí)的聚類。3.9 神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)入門嚴(yán)格說(shuō)神經(jīng)網(wǎng)絡(luò)不是“一個(gè)算法”而是一整套模型家族。它的基本單元是“神經(jīng)元”每個(gè)神經(jīng)元把輸入加權(quán)求和再經(jīng)過(guò)一個(gè)激活函數(shù)輸出。大量神經(jīng)元按層連接起來(lái)就組成了神經(jīng)網(wǎng)絡(luò)。最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)長(zhǎng)這樣輸入層→若干個(gè)隱藏層→輸出層。訓(xùn)練時(shí)用反向傳播算法先讓數(shù)據(jù)正向流過(guò)網(wǎng)絡(luò)得到預(yù)測(cè)算損失再把損失從輸出層逐層往回傳用梯度下降更新每一層的權(quán)重反復(fù)迭代直到損失下降。神經(jīng)網(wǎng)絡(luò)最強(qiáng)大的能力在于自動(dòng)學(xué)習(xí)特征表示。傳統(tǒng)機(jī)器學(xué)習(xí)需要花大量時(shí)間做特征工程而深度神經(jīng)網(wǎng)絡(luò)可以在原始數(shù)據(jù)圖片像素、語(yǔ)音波形、文本序列上直接端到端學(xué)習(xí)內(nèi)部自動(dòng)逐層提取低級(jí)到高級(jí)的特征。這也是為什么圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理這幾大類任務(wù)被深度學(xué)習(xí)全面統(tǒng)治的原因。但神經(jīng)網(wǎng)絡(luò)的“自由”是有代價(jià)的它需要大量數(shù)據(jù)、大量計(jì)算資源、大量超參數(shù)調(diào)節(jié)。遠(yuǎn)不是隨便堆幾層就能出效果設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)、調(diào)學(xué)習(xí)率、處理梯度爆炸或梯度消失都是功課。零基礎(chǔ)讀者如果只是做普通表格型數(shù)據(jù)任務(wù)不要一上來(lái)就上深度學(xué)習(xí)用隨機(jī)森林或XGBoost這類梯度提升樹(shù)模型往往又穩(wěn)又好用。神經(jīng)網(wǎng)絡(luò)是重武器適合數(shù)據(jù)規(guī)模大、數(shù)據(jù)形態(tài)復(fù)雜的場(chǎng)景。3.10 常用算法對(duì)比速查表我做過(guò)一張算法速查卡每次開(kāi)新項(xiàng)目都會(huì)先對(duì)著它過(guò)一遍幫助很大。整理如下算法問(wèn)題類型核心思想優(yōu)點(diǎn)缺點(diǎn)典型場(chǎng)景線性回歸回歸特征線性加權(quán)簡(jiǎn)單可解釋、訓(xùn)練快擬合非線性弱銷售額預(yù)測(cè)、價(jià)格預(yù)估邏輯回歸二分類分?jǐn)?shù)經(jīng)Sigmoid轉(zhuǎn)概率概率輸出、強(qiáng)可解釋非線性表達(dá)弱風(fēng)控評(píng)分、流失預(yù)警KNN分類/回歸附近樣本投票無(wú)需訓(xùn)練、直覺(jué)易懂預(yù)測(cè)慢、受量綱影響小樣本分類、推薦召回樸素貝葉斯分類貝葉斯公式獨(dú)立性假設(shè)極快、小樣本可用獨(dú)立性假設(shè)強(qiáng)文本分類、垃圾過(guò)濾決策樹(shù)分類/回歸逐層特征切分可解釋、混用類型易過(guò)擬合、不穩(wěn)規(guī)則提取、可解釋建模隨機(jī)森林分類/回歸多棵樹(shù)投票/平均穩(wěn)、抗過(guò)擬合解釋弱、超大維度一般用戶畫像、工業(yè)異常檢測(cè)SVM分類/回歸最大間隔核升維小樣本高維很強(qiáng)大樣本訓(xùn)練慢文本分類、小樣本圖像K-Means聚類中心點(diǎn)迭代歸堆簡(jiǎn)單快球形簇假設(shè)、要定K用戶分群、圖像壓縮神經(jīng)網(wǎng)絡(luò)分類/回歸/生成多層神經(jīng)元擬合自動(dòng)特征學(xué)習(xí)、能建模復(fù)雜模式數(shù)據(jù)大、資源多、解釋差圖像、語(yǔ)音、NLP、生成式AI4. 復(fù)雜度選型時(shí)真正要看的東西標(biāo)題里特別提了“復(fù)雜度”說(shuō)明這絕不是冷門考點(diǎn)而是工程實(shí)戰(zhàn)中決定模型能不能用的關(guān)鍵。我見(jiàn)過(guò)很多新手調(diào)通了一個(gè)模型效果也不錯(cuò)結(jié)果一上生產(chǎn)環(huán)境就傻眼延遲太高、內(nèi)存爆掉、天價(jià)計(jì)算賬單。問(wèn)題就出在沒(méi)提前算復(fù)雜度這筆賬。4.1 時(shí)間復(fù)雜度和空間復(fù)雜度究竟在說(shuō)什么先別被“復(fù)雜度”三個(gè)字嚇到。它只是用一種數(shù)學(xué)化的方式告訴咱們當(dāng)數(shù)據(jù)量變大時(shí)時(shí)間和空間需求會(huì)怎么膨脹。時(shí)間復(fù)雜度回答“這算法跑得多快”??吹氖沁\(yùn)算次數(shù)隨數(shù)據(jù)規(guī)模n怎么增長(zhǎng)。常見(jiàn)幾種O(1)常數(shù)時(shí)間。不管數(shù)據(jù)多大跑的步驟都差不多。比如從數(shù)組里按位置取值。O(n)線性時(shí)間。數(shù)據(jù)翻倍時(shí)間也翻倍。比如從頭到尾掃一遍數(shù)據(jù)。O(n2)平方時(shí)間。數(shù)據(jù)翻倍時(shí)間變四倍。數(shù)據(jù)量大時(shí)很容易爆炸。O(log n)對(duì)數(shù)時(shí)間。數(shù)據(jù)翻倍時(shí)間只增加一點(diǎn)點(diǎn)。比如二分查找非常優(yōu)秀。O(n log n)常見(jiàn)于高效排序比O(n2)友好得多??臻g復(fù)雜度回答“這算法占多少內(nèi)存”??吹氖穷~外內(nèi)存隨數(shù)據(jù)規(guī)模怎么增長(zhǎng)。比如KNN訓(xùn)練時(shí)不建模型只把原始數(shù)據(jù)存著空間復(fù)雜度就是O(n)百萬(wàn)樣本就是百萬(wàn)條數(shù)據(jù)量級(jí)的內(nèi)存占用這個(gè)很容易預(yù)估。4.2 各常用算法的復(fù)雜度對(duì)照表關(guān)鍵干貨這是我根據(jù)多年實(shí)戰(zhàn)整理的一份參考用來(lái)估算不同算法在大型數(shù)據(jù)上的可行性非常有用。注意這里的n是樣本數(shù)d是特征數(shù)p是支持向量機(jī)里的支持向量個(gè)數(shù)。算法訓(xùn)練時(shí)間復(fù)雜度參考預(yù)測(cè)時(shí)間復(fù)雜度空間復(fù)雜度數(shù)據(jù)規(guī)模敏感點(diǎn)線性回歸閉式解O(n×d2)O(d)O(d2)特征數(shù)d影響大邏輯回歸梯度下降O(n×d×迭代輪數(shù))O(d)O(d)大樣本多輪迭代偏慢KNN基本為0存數(shù)據(jù)O(n×d)O(n×d)預(yù)測(cè)時(shí)n爆炸樸素貝葉斯O(n×d)O(d)O(d)文本場(chǎng)景性能也穩(wěn)決策樹(shù)O(n×d×log n)O(樹(shù)深度)O(樹(shù)節(jié)點(diǎn)數(shù))樹(shù)深不可控時(shí)風(fēng)險(xiǎn)大隨機(jī)森林O(樹(shù)數(shù)×n×d×log n)O(樹(shù)數(shù)×樹(shù)深度)O(樹(shù)數(shù)×節(jié)點(diǎn)數(shù))樹(shù)數(shù)多了成本線性漲SVMO(n2)到O(n3)之間O(支持向量數(shù)×d)O(支持向量數(shù)×d)n上萬(wàn)后訓(xùn)練急劇變慢K-MeansO(迭代輪數(shù)×n×d×K)O(K×d)O(K×d)K增大、維度增大會(huì)拖慢神經(jīng)網(wǎng)絡(luò)O(樣本數(shù)×網(wǎng)絡(luò)規(guī)?!恋啍?shù)×d)O(網(wǎng)絡(luò)規(guī)模)O(網(wǎng)絡(luò)規(guī)模)參數(shù)規(guī)模是主要瓶頸這里有幾個(gè)實(shí)戰(zhàn)心得先說(shuō)KNN的預(yù)測(cè)復(fù)雜度最容易讓人低估。訓(xùn)練不花時(shí)間預(yù)測(cè)才花時(shí)間。用戶請(qǐng)求一來(lái)得遍歷全部歷史樣本百萬(wàn)級(jí)樣本每秒可能要承受幾十毫秒甚至上百毫秒延遲。很多團(tuán)隊(duì)拿KNN做實(shí)時(shí)推薦最后被延遲卡吐。如果非要用KNN建議配合數(shù)據(jù)剪枝、索引結(jié)構(gòu)或者干脆只在小數(shù)據(jù)集上用它做離線計(jì)算。SVM在大數(shù)據(jù)集上是真的會(huì)“卡死”。在我參與的一個(gè)某交易平臺(tái)的欺詐識(shí)別項(xiàng)目里早期樣本量只有幾萬(wàn)SVM跑得很舒服后來(lái)樣本漲到百萬(wàn)級(jí)SVM一次訓(xùn)練要跑兩三個(gè)小時(shí)迭代一次團(tuán)隊(duì)都等得慌。后來(lái)我們把方案切到了邏輯回歸和梯度提升樹(shù)訓(xùn)練時(shí)間從小時(shí)級(jí)降到了分鐘級(jí)。SVM再好規(guī)模上去了就得果斷換。4.3 樣本量、特征維度與模型復(fù)雜度的三角關(guān)系同一個(gè)算法在不同的數(shù)據(jù)規(guī)模下表現(xiàn)可能天差地別。選型時(shí)要綜合考慮三個(gè)角樣本量n、特征維度d、模型復(fù)雜度C。模型復(fù)雜度過(guò)高 樣本量不足 過(guò)擬合。比如你只有1000個(gè)樣本卻去訓(xùn)練一個(gè)上億參數(shù)的深度神經(jīng)網(wǎng)絡(luò)結(jié)果一定是模型把訓(xùn)練集“背”得滾瓜爛熟測(cè)試集上慘不忍睹。這時(shí)應(yīng)該降低模型復(fù)雜度換小模型、加正則化或增加樣本量。特征維度超高 但樣本量一般 容易維數(shù)災(zāi)難。比如用戶行為特征有10萬(wàn)維樣本只有2萬(wàn)條。很多算法在高維稀疏空間里會(huì)失去統(tǒng)計(jì)意義樹(shù)模型切分時(shí)找不到有效特征距離類算法KNN的距離計(jì)算變得沒(méi)有區(qū)分度。此時(shí)優(yōu)先做特征選擇、降維而不是硬上復(fù)雜模型。樣本量巨大 模型復(fù)雜度一般 可能欠擬合。當(dāng)你手持幾億條數(shù)據(jù)卻還用一個(gè)簡(jiǎn)單線性模型可能學(xué)不動(dòng)數(shù)據(jù)里的復(fù)雜模式效果上不去。這時(shí)要么增加特征、要么換表達(dá)能力更強(qiáng)的模型比如梯度提升樹(shù)或深度模型。一句話選型法則小樣本小模型大樣本大模型特征爆炸先降維在線服務(wù)優(yōu)先看預(yù)測(cè)延遲。4.4 復(fù)雜度與業(yè)務(wù)場(chǎng)景的匹配思路復(fù)雜度不只是理論直接對(duì)應(yīng)錢和用戶體驗(yàn)。我舉個(gè)實(shí)際估算的例子。你有一個(gè)在線推薦接口模型用KNN訓(xùn)練集50萬(wàn)條特征50維每條請(qǐng)求平均要算50萬(wàn)次50維向量的距離。假設(shè)一次距離計(jì)算約0.5微秒那一次請(qǐng)求光算距離就要約12.5毫秒再加上排序、IO、網(wǎng)絡(luò)開(kāi)銷總延遲大概率接近100毫秒。對(duì)推薦接口來(lái)說(shuō)100毫秒也許還能忍但如果QPS是500單機(jī)CPU就會(huì)被吃滿必須上多機(jī)負(fù)載均衡。如果換成邏輯回歸預(yù)測(cè)只需要做一次50維特征和系數(shù)向量的內(nèi)積大約幾十微秒同樣的QPS單機(jī)輕松扛下。再舉一個(gè)空間復(fù)雜度的例子。公司日志系統(tǒng)每天產(chǎn)生1億條記錄你想直接喂給SVM做異常檢測(cè)。SVM的空間復(fù)雜度和支持向量數(shù)量相關(guān)在1億樣本下支持向量數(shù)量可能輕松到幾十萬(wàn)甚至上百萬(wàn)光存儲(chǔ)模型就要幾個(gè)GB訓(xùn)練時(shí)間更是不可接受。合理做法是先做數(shù)據(jù)采樣或者用流式聚類先把異常候選篩出來(lái)再用小模型精判。沒(méi)事別用重模型硬剛海量數(shù)據(jù)先想辦法把數(shù)據(jù)變小、把問(wèn)題變簡(jiǎn)單。5. 機(jī)器學(xué)習(xí)典型應(yīng)用場(chǎng)景全拆解學(xué)完算法和復(fù)雜度大家最該有認(rèn)知的是場(chǎng)景匹配。我按實(shí)戰(zhàn)中比較常見(jiàn)的行業(yè)挑了七個(gè)場(chǎng)景挨個(gè)拆希望能幫你建立“看到業(yè)務(wù)問(wèn)題→聯(lián)想到合適算法”的反射弧。5.1 場(chǎng)景一某金融服務(wù)平臺(tái)的交易風(fēng)控風(fēng)控是我接觸最多的落地場(chǎng)景之一。核心任務(wù)是用戶每筆交易進(jìn)來(lái)判斷是正常交易還是欺詐交易要不要攔截。這類問(wèn)題天然是二分類而且對(duì)可解釋性要求很高——風(fēng)控人員必須知道模型為什么攔截這筆交易否則無(wú)法向用戶解釋。落地技術(shù)棧通常是邏輯回歸作為主力因?yàn)樗敵龈怕省⒖山忉屌浜弦?guī)則引擎一起用復(fù)雜場(chǎng)景會(huì)用梯度提升樹(shù)如XGBoost、LightGBM進(jìn)一步提升效果最后所有被模型攔截的交易都要進(jìn)人工復(fù)核驗(yàn)證模型效果并持續(xù)收集樣本再訓(xùn)練。風(fēng)控場(chǎng)景有兩個(gè)關(guān)鍵點(diǎn)樣本極度不平衡一萬(wàn)筆交易里可能只有幾筆是欺詐直接訓(xùn)練會(huì)模型“全猜正常”也能得到很高準(zhǔn)確率。必須用下采樣、過(guò)采樣、代價(jià)敏感學(xué)習(xí)等方法處理。特征時(shí)效性欺詐手法一直在變半年前的特征權(quán)重現(xiàn)在可能完全失效。所以風(fēng)控模型必須高頻迭代通常每周甚至每天重訓(xùn)一次。5.2 場(chǎng)景二某電商平臺(tái)的商品推薦推薦系統(tǒng)是機(jī)器學(xué)習(xí)商業(yè)價(jià)值體現(xiàn)得最直觀的場(chǎng)景。它不只是一個(gè)算法而是一套組合拳召回階段從幾百萬(wàn)商品里快速粗篩出幾百個(gè)候選。這里常用協(xié)同過(guò)濾找相似用戶或相似商品、雙塔模型用戶向量和商品向量做相似度匹配以及前述的KNN思想算用戶和商品的距離。精排階段對(duì)候選商品精細(xì)打分排序后展示給用戶。這里常用邏輯回歸、梯度提升樹(shù)、深度排序模型。輸入特征除了用戶基本屬性還有大量行為序列特征比如點(diǎn)擊歷史、瀏覽時(shí)長(zhǎng)、加購(gòu)行為。重排階段為了避免推薦結(jié)果太“單一”連著推一堆同款還會(huì)做多樣性打散、規(guī)則干預(yù)。新手入行推薦方向建議從“召回側(cè)”的邏輯回歸或協(xié)同過(guò)濾入手因?yàn)楹?jiǎn)單可解釋效果也容易量化。做推薦必須深刻理解一個(gè)指標(biāo)點(diǎn)擊率和轉(zhuǎn)化率不是一回事用戶點(diǎn)了不代表會(huì)買排序目標(biāo)用哪個(gè)、怎么加權(quán)需要業(yè)務(wù)一起來(lái)拍板。5.3 場(chǎng)景三內(nèi)容社區(qū)的信息流排序某內(nèi)容社區(qū)的信息流本質(zhì)上也是推薦但它的“物品”是內(nèi)容不是商品。挑戰(zhàn)在于內(nèi)容生命周期極短一篇文章的熱度可能幾小時(shí)就過(guò)去了。這就要求模型必須能夠理解內(nèi)容特征標(biāo)題、標(biāo)簽、作者、正文主題還要快速適應(yīng)新內(nèi)容冷啟動(dòng)。常用的做法是用文本分類打標(biāo)簽樸素貝葉斯或文本深度模型用點(diǎn)擊率預(yù)估模型做排序配合熱度衰減和時(shí)間衰減因子實(shí)現(xiàn)“既把好東西推給合適的人又給新內(nèi)容公平展示機(jī)會(huì)”。5.4 場(chǎng)景四某醫(yī)院系統(tǒng)的醫(yī)療影像輔助讀片這個(gè)場(chǎng)景我雖然沒(méi)直接參與開(kāi)發(fā)但在不少醫(yī)學(xué)影像AI項(xiàng)目里看到過(guò)完整打法。核心任務(wù)是從CT、X光等影像中自動(dòng)檢測(cè)病灶區(qū)域輔助醫(yī)生提高閱片效率。技術(shù)選型幾乎清一色是深度學(xué)習(xí)尤其是卷積神經(jīng)網(wǎng)絡(luò)CNN和它的各種變體如檢測(cè)網(wǎng)絡(luò)、分割網(wǎng)絡(luò)。為什么不用傳統(tǒng)機(jī)器學(xué)習(xí)因?yàn)橛跋駭?shù)據(jù)是像素級(jí)的高維非結(jié)構(gòu)化數(shù)據(jù)特征極其復(fù)雜手工設(shè)計(jì)特征根本做不過(guò)來(lái)。這個(gè)場(chǎng)景有幾個(gè)現(xiàn)實(shí)約束數(shù)據(jù)標(biāo)注成本極高必須由專業(yè)醫(yī)生逐張標(biāo)注所以樣本量通常不大必須靠數(shù)據(jù)增強(qiáng)旋轉(zhuǎn)、翻轉(zhuǎn)、裁剪來(lái)擴(kuò)充訓(xùn)練集。泛化能力要求極高不同醫(yī)院的設(shè)備型號(hào)、成像參數(shù)差異很大在一個(gè)醫(yī)院數(shù)據(jù)上訓(xùn)練的模型到了另一家醫(yī)院可能效果大跌做跨院適配是核心難點(diǎn)。倫理和監(jiān)管約束AI只能做“輔助”不能做“診斷”最終決定權(quán)必須在醫(yī)生手上。模型性能評(píng)估要格外重視召回率寧可誤報(bào)不能漏報(bào)病灶。醫(yī)療場(chǎng)景是AI領(lǐng)域價(jià)值最大的方向之一但我建議入行者在沒(méi)有醫(yī)生深度參與的情況下謹(jǐn)慎進(jìn)入因?yàn)閿?shù)據(jù)、業(yè)務(wù)、合規(guī)三道門檻都不低。5.5 場(chǎng)景五某制造工廠的工業(yè)質(zhì)檢工業(yè)質(zhì)檢是機(jī)器學(xué)習(xí)在傳統(tǒng)行業(yè)里落地很成功的場(chǎng)景。典型任務(wù)產(chǎn)線上拍攝產(chǎn)品圖片自動(dòng)判斷表面有沒(méi)有劃痕、污點(diǎn)、缺料等缺陷。它的本質(zhì)是圖像分類或目標(biāo)檢測(cè)。和醫(yī)療影像相比工業(yè)質(zhì)檢的痛點(diǎn)是缺陷樣本極少——合格品占絕大多數(shù)不良品可能只有千分之一。解決辦法包括先用少量缺陷樣本做數(shù)據(jù)增強(qiáng)擴(kuò)充正樣本缺陷樣本。使用異常檢測(cè)思路只在合格品上訓(xùn)練模型當(dāng)模型遇到“沒(méi)見(jiàn)過(guò)的異常形態(tài)”時(shí)通過(guò)重構(gòu)誤差或置信度來(lái)判斷這是不是缺陷。這屬于無(wú)監(jiān)督或半監(jiān)督思路工業(yè)場(chǎng)景非常好用。在線部署通常在邊緣設(shè)備工控機(jī)或端側(cè)攝像頭完成要求模型輕量、推理快這又回到復(fù)雜度那章的內(nèi)容了。工業(yè)質(zhì)檢項(xiàng)目的坑在“背景多樣性”??蛻艄S的傳送帶、光線、相機(jī)角度一旦有變化模型的精度馬上波動(dòng)。項(xiàng)目交付時(shí)必須預(yù)留這項(xiàng)調(diào)優(yōu)成本絕對(duì)不是一次性模型部署完就完事。5.6 場(chǎng)景六某客服公司的智能問(wèn)答機(jī)器人智能客服是自然語(yǔ)言處理NLP最普及的落地場(chǎng)景。常見(jiàn)的架構(gòu)是先做意圖識(shí)別把用戶輸入分類成“查訂單”“退換貨”“問(wèn)物流”“轉(zhuǎn)人工”等意圖。這個(gè)環(huán)節(jié)相當(dāng)于文本分類可以用樸素貝葉斯做快速基線也可以用預(yù)訓(xùn)練語(yǔ)言模型如BERT的輕量版本提升效果。再做槽位抽取從話語(yǔ)里提取關(guān)鍵信息比如訂單號(hào)、收貨地址、商品類型。最后檢索答案或生成回復(fù)有標(biāo)準(zhǔn)答案庫(kù)就走檢索匹配沒(méi)有就用生成模型。新手做客服機(jī)器人最容易踩的坑是同義詞、錯(cuò)別字和口語(yǔ)表達(dá)。用戶不會(huì)規(guī)規(guī)矩矩說(shuō)“我想查詢我的訂單”他可能說(shuō)“我前天買的那個(gè)東西到哪了”還有錯(cuò)別字“到哪拉”。不做文本歸一化模型效果再好也白搭。5.7 場(chǎng)景七某自動(dòng)駕駛項(xiàng)目中的感知模塊自動(dòng)駕駛涉及感知、預(yù)測(cè)、規(guī)劃、控制多個(gè)環(huán)節(jié)其中感知是機(jī)器學(xué)習(xí)應(yīng)用最重的部分。感知任務(wù)包括檢測(cè)路上的車輛、行人、交通標(biāo)志給每個(gè)目標(biāo)畫框把每個(gè)像素分類成道路、天空、車輛、行人等語(yǔ)義分割估計(jì)目標(biāo)的速度和運(yùn)動(dòng)軌跡。這些統(tǒng)統(tǒng)交給深度學(xué)習(xí)模型尤其是目標(biāo)檢測(cè)系列網(wǎng)絡(luò)。落地時(shí)核心矛盾是安全性和計(jì)算資源車上的計(jì)算平臺(tái)功耗和散熱受限但模型又必須在幾十毫秒內(nèi)完成關(guān)鍵目標(biāo)識(shí)別。所以自動(dòng)駕駛團(tuán)隊(duì)大量使用模型剪枝、量化和知識(shí)蒸餾把大模型壓縮成能在車載芯片上實(shí)時(shí)運(yùn)行的小模型。這也是我前面強(qiáng)調(diào)復(fù)雜度和資源限制的原因——理論模型再漂亮跑不動(dòng)就沒(méi)有意義。5.8 各場(chǎng)景與算法的匹配速查應(yīng)用場(chǎng)景主要問(wèn)題類型常用算法關(guān)鍵挑戰(zhàn)金融風(fēng)控二分類邏輯回歸、梯度提升樹(shù)樣本不平衡、可解釋性電商推薦排序/召回協(xié)同過(guò)濾、邏輯回歸、深度排序冷啟動(dòng)、實(shí)時(shí)性內(nèi)容社區(qū)信息流排序/分類文本分類、點(diǎn)擊率預(yù)估模型內(nèi)容生命周期短醫(yī)療影像輔助圖像分類/檢測(cè)/分割CNN系列標(biāo)注成本高、跨院泛化工業(yè)質(zhì)檢圖像分類/異常檢測(cè)CNN、異常檢測(cè)方法缺陷樣本稀少智能客服文本分類/序列標(biāo)注樸素貝葉斯、預(yù)訓(xùn)練語(yǔ)言模型口語(yǔ)多樣性自動(dòng)駕駛感知目標(biāo)檢測(cè)/分割目標(biāo)檢測(cè)網(wǎng)絡(luò)、分割網(wǎng)絡(luò)安全要求極高、算力受限6. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄這一章我打算把新手最容易踩的五個(gè)深坑挨個(gè)講透全是實(shí)戰(zhàn)里反復(fù)出現(xiàn)的價(jià)值不亞于前面任何一章。6.1 過(guò)擬合和欠擬合怎么判斷、怎么治過(guò)擬合的表現(xiàn)是訓(xùn)練集指標(biāo)很漂亮比如準(zhǔn)確率98%測(cè)試集指標(biāo)拉胯比如70%。原因基本是模型把訓(xùn)練數(shù)據(jù)里的噪聲和細(xì)節(jié)也當(dāng)成了規(guī)律。欠擬合的表現(xiàn)是訓(xùn)練集和測(cè)試集指標(biāo)都不行模型太簡(jiǎn)單沒(méi)學(xué)到數(shù)據(jù)里的有效模式。我一般用“學(xué)習(xí)曲線”來(lái)判斷畫兩條曲線橫軸是訓(xùn)練樣本量縱軸是誤差。如果訓(xùn)練誤差和驗(yàn)證誤差差距很大是過(guò)擬合如果兩條誤差都很高是欠擬合如果兩條曲線收斂在同一條低誤差線上說(shuō)明狀態(tài)健康。治理過(guò)擬合的辦法優(yōu)先級(jí)如下增加更多訓(xùn)練數(shù)據(jù)。這是最可靠的辦法。降低模型復(fù)雜度。減少樹(shù)的深度、減少神經(jīng)網(wǎng)絡(luò)層數(shù)、縮小SVM的核寬度。加正則化。L1讓權(quán)重稀疏L2讓權(quán)重整體變小。早停。訓(xùn)練過(guò)程中驗(yàn)證集誤差開(kāi)始回升時(shí)立刻停止不要戀戰(zhàn)。做數(shù)據(jù)增強(qiáng)。圖像旋轉(zhuǎn)翻轉(zhuǎn)、文本同義詞替換等于人造出更多訓(xùn)練樣本。治理欠擬合的辦法則相反換更強(qiáng)的模型、增加特征、減少正則化強(qiáng)度、把特征工程做得更細(xì)。6.2 數(shù)據(jù)泄漏看似玄學(xué)、實(shí)則陷阱數(shù)據(jù)泄漏指的是訓(xùn)練時(shí)用了“未來(lái)才應(yīng)該知道”的信息。這個(gè)詞很抽象舉三個(gè)真實(shí)案例案例一預(yù)測(cè)用戶明天會(huì)不會(huì)下單結(jié)果把“用戶今天是否已經(jīng)下單”這個(gè)字段放進(jìn)了特征里。明天要預(yù)測(cè)的事情和今天的下單行為有時(shí)間重疊模型自然“開(kāi)卷考試”線上效果崩掉。案例二做數(shù)據(jù)清洗時(shí)把全量數(shù)據(jù)一起做了標(biāo)準(zhǔn)化包括測(cè)試集。標(biāo)準(zhǔn)化會(huì)用到整個(gè)數(shù)據(jù)集的均值和方差等于把測(cè)試集的信息透漏給了訓(xùn)練過(guò)程測(cè)試評(píng)估結(jié)果偏樂(lè)觀。案例三將用戶ID直接作為特征。有些ID的取值和標(biāo)簽存在偶然相關(guān)性模型記住了ID到標(biāo)簽的映射換了一批新用戶立刻失效。數(shù)據(jù)泄漏是隱蔽性最強(qiáng)的問(wèn)題因?yàn)樗粫?huì)報(bào)錯(cuò)指標(biāo)反而特別好讓人誤以為模型神了。排查辦法是仔細(xì)檢查每個(gè)特征的時(shí)間戳確認(rèn)它是否在預(yù)測(cè)時(shí)間點(diǎn)之前就能拿到每次做特征變換都先f(wàn)it訓(xùn)練集、再transform驗(yàn)證集和測(cè)試集絕對(duì)不混合在一起處理。6.3 類別不平衡正樣本太少怎么辦在風(fēng)控、故障檢測(cè)、醫(yī)療篩查這些場(chǎng)景正樣本異常、疾病往往遠(yuǎn)遠(yuǎn)少于負(fù)樣本。如果直接訓(xùn)練模型會(huì)學(xué)成“永遠(yuǎn)預(yù)測(cè)正?!币?yàn)檫@樣整體損失最小。處理類別不平衡實(shí)操中按順序試調(diào)整評(píng)估指標(biāo)別用準(zhǔn)確率改用精準(zhǔn)率、召回率、F1、AUC這些更適合不平衡場(chǎng)景的指標(biāo)。加類別權(quán)重訓(xùn)練時(shí)給少數(shù)類樣本更大損失權(quán)重強(qiáng)行讓模型重視它們。上采樣少數(shù)類或用SMOTE這類方法合成少數(shù)類樣本。注意只在訓(xùn)練集上做千萬(wàn)不要?jiǎng)訙y(cè)試集。下采樣多數(shù)類讓正負(fù)樣本比例拉到1:2到1:5之間防止信息浪費(fèi)太多。把問(wèn)題從分類轉(zhuǎn)化成異常檢測(cè)只用多數(shù)類樣本訓(xùn)練模型去學(xué)“正常長(zhǎng)什么樣”新樣本太不像正常就被判定為異常。6.4 評(píng)估指標(biāo)選錯(cuò)最貴的一個(gè)坑新手最愛(ài)問(wèn)“準(zhǔn)確率90%模型是不是很好”如果樣本極不平衡準(zhǔn)確率完全可能騙人。一萬(wàn)筆交易里有五筆欺詐模型全判正常準(zhǔn)確率是99.95%但它一個(gè)欺詐都攔不住完全沒(méi)用。所以評(píng)估指標(biāo)選擇本身就是方法論。二分類里最常用四個(gè)準(zhǔn)確率所有預(yù)測(cè)里預(yù)測(cè)對(duì)的比例。適合類別均勻的簡(jiǎn)單場(chǎng)景。精準(zhǔn)率預(yù)測(cè)為正的樣本里真正的比例。寧缺毋濫適合垃圾郵件攔截、內(nèi)容審核這種“誤殺成本高”的場(chǎng)景。召回率真實(shí)為正的樣本里被預(yù)測(cè)為正的比例。寧濫毋缺適合醫(yī)療篩查、欺詐攔截這種“漏掉成本高”的場(chǎng)景。F1精準(zhǔn)率和召回率的調(diào)和平均兩者都要保時(shí)用。AUC也是個(gè)高頻指標(biāo)它衡量的是模型隨機(jī)抽一個(gè)正樣本、一個(gè)負(fù)樣本正樣本得分高于負(fù)樣本的概率。AUC的好處是不受分類閾值影響適合早期模型選型但AUC高不代表實(shí)際業(yè)務(wù)效果好因?yàn)樗豢紤]閾值下的具體精準(zhǔn)率和召回率。6.5 調(diào)參和驗(yàn)證策略的常見(jiàn)誤區(qū)調(diào)參是新手最著迷也最容易失控的環(huán)節(jié)。我見(jiàn)過(guò)有人用網(wǎng)格搜索跑了幾天幾夜換來(lái)0.001個(gè)百分點(diǎn)的提升純屬浪費(fèi)算力。我的建議是優(yōu)先調(diào)對(duì)效果影響最大的幾個(gè)參數(shù)。對(duì)隨機(jī)森林是樹(shù)數(shù)量和最大深度對(duì)梯度提升樹(shù)是學(xué)習(xí)率、樹(shù)數(shù)量和最大深度對(duì)神經(jīng)網(wǎng)絡(luò)是學(xué)習(xí)率、批大小、層寬。其他參數(shù)用默認(rèn)值就行大部分默認(rèn)值都是經(jīng)過(guò)大量項(xiàng)目驗(yàn)證的合理起點(diǎn)。用學(xué)習(xí)率調(diào)度器或自適應(yīng)優(yōu)化器別手調(diào)每一輪的學(xué)習(xí)率。驗(yàn)證策略和數(shù)據(jù)劃分直接影響調(diào)參判斷。時(shí)間序列數(shù)據(jù)必須按時(shí)間切分隨機(jī)打亂會(huì)讓模型提前看到“未來(lái)”。不要反復(fù)用測(cè)試集調(diào)參。每調(diào)一次參數(shù)都去測(cè)一下測(cè)試集測(cè)試集就廢了你會(huì)陷入“測(cè)試集上越調(diào)越好、線上越來(lái)越差”的自嗨循環(huán)。7. 零基礎(chǔ)學(xué)習(xí)路線與工具建議最后這部分寫給想真正入門的朋友。我不推薦那種“先啃三年數(shù)學(xué)再看書”的路線那是給自己找借口。最好的策略是“帶著問(wèn)題學(xué)跑通一個(gè)全流程項(xiàng)目再回頭補(bǔ)理論”。7.1 學(xué)習(xí)路線先跑通再深入我建議零基礎(chǔ)按這個(gè)順序推進(jìn)用幾天時(shí)間掌握Python基礎(chǔ)。重點(diǎn)學(xué)列表、字典、循環(huán)、函數(shù)、讀取文件不要去啃所有語(yǔ)法夠用就行。接觸核心庫(kù)。NumPy處理數(shù)組、Pandas處理表格數(shù)據(jù)、Matplotlib畫圖。這三樣是機(jī)器學(xué)習(xí)的地基。學(xué)一個(gè)機(jī)器學(xué)習(xí)框架。首推Scikit-learn它封裝好、文檔全、模型覆蓋廣非常適合第一次完整跑通流程。做一個(gè)小項(xiàng)目比如預(yù)測(cè)房?jī)r(jià)。這個(gè)項(xiàng)目麻雀雖小五臟俱全包含數(shù)據(jù)讀取、清洗、特征構(gòu)建、模型訓(xùn)練、評(píng)估、可視化全過(guò)程?;仡^看理論。跑通項(xiàng)目后你會(huì)發(fā)現(xiàn)線性回歸、評(píng)估指標(biāo)、過(guò)擬合這些概念突然變得很具體這時(shí)候再補(bǔ)數(shù)學(xué)基礎(chǔ)微積分、線性代數(shù)、概率統(tǒng)計(jì)效率高得多。7.2 工具鏈選擇別當(dāng)工具控工具遍地開(kāi)花但入門期不需要多一套就夠開(kāi)發(fā)環(huán)境Python環(huán)境加上Jupyter Notebook或VS Code。Jupyter適合探索實(shí)驗(yàn)VS Code適合寫工程化代碼。核心庫(kù)NumPy、Pandas、Matplotlib、Scikit-learn。進(jìn)階庫(kù)做梯度提升樹(shù)上手LightGBM或XGBoost做深度學(xué)習(xí)用PyTorch或TensorFlow兩者選一個(gè)深入學(xué)即可。環(huán)境管理建議用虛擬環(huán)境venv或conda把項(xiàng)目依賴隔離干凈。我見(jiàn)過(guò)太多人把包裝亂最后花一整天修環(huán)境。我不推薦一開(kāi)始就沉迷學(xué)各種“高級(jí)工具”比如分布式訓(xùn)練框架、模型部署平臺(tái)。這些等真正遇到性能瓶頸再學(xué)那時(shí)候你才能理解它們解決的是什么問(wèn)題。7.3 學(xué)習(xí)節(jié)奏與練習(xí)項(xiàng)目推薦學(xué)習(xí)機(jī)器學(xué)習(xí)像學(xué)游泳光看視頻永遠(yuǎn)學(xué)不會(huì)。我的個(gè)人習(xí)慣是每學(xué)一個(gè)算法就立刻拿一個(gè)小數(shù)據(jù)集跑一遍把代碼寫出來(lái)把預(yù)測(cè)結(jié)果和訓(xùn)練過(guò)程打印出來(lái)親眼看到它在工作。讓“跑通代碼”和“理解原理”交替進(jìn)行互相加深印象。練習(xí)項(xiàng)目可以分三個(gè)梯度入門級(jí)房?jī)r(jià)預(yù)測(cè)回歸、鳶尾花分類多分類、用戶性別預(yù)測(cè)二分類。進(jìn)階級(jí)銀行信用卡違約預(yù)測(cè)不平衡分類、零售用戶聚類無(wú)監(jiān)督、電影評(píng)論情感分析文本分類。項(xiàng)目級(jí)做一個(gè)完整的推薦系統(tǒng)Demo、做一個(gè)工業(yè)缺陷檢測(cè)Demo、做一個(gè)端到端模型API服務(wù)并部署到云上。強(qiáng)烈建議每完成一個(gè)項(xiàng)目都寫一篇記錄包括問(wèn)題定義、數(shù)據(jù)處理、模型選擇、調(diào)參過(guò)程、踩坑經(jīng)驗(yàn)?!澳軐懬宄焙汀罢鏁?huì)了”之間隔著很長(zhǎng)的距離寫作恰好能幫你把這距離走完。最后分享幾點(diǎn)個(gè)人體會(huì)文章寫到這兒已經(jīng)有足夠的厚度了。我把這些年做機(jī)器學(xué)習(xí)項(xiàng)目最深的幾點(diǎn)體會(huì)放在最后算是一份非正式的總結(jié)。第一不要神化機(jī)器學(xué)習(xí)。它本質(zhì)上就是一個(gè)從歷史數(shù)據(jù)找規(guī)律的工具規(guī)律背后是相關(guān)關(guān)系不是因果關(guān)系。模型效果好可能是因?yàn)閿?shù)據(jù)里隱藏著某種真實(shí)的業(yè)務(wù)規(guī)律也可能是因?yàn)閿?shù)據(jù)泄漏或者特征選擇踩了坑永遠(yuǎn)是有一分證據(jù)說(shuō)一分話。第二數(shù)據(jù)質(zhì)量和業(yè)務(wù)理解永遠(yuǎn)比算法重要。同一個(gè)模型給你正確標(biāo)注的10萬(wàn)條數(shù)據(jù)和錯(cuò)誤標(biāo)注的100萬(wàn)條數(shù)據(jù)前者的效果大概率更好。我做了這么多項(xiàng)目真正提升效果的往往不是換個(gè)更復(fù)雜的模型而是多花幾天時(shí)間把特征工程做扎實(shí)、把數(shù)據(jù)清洗干凈。第三工程兜底能力很關(guān)鍵。模型效果只是項(xiàng)目的一部分上線后要能扛住流量、要能持續(xù)監(jiān)控、要能快速回滾。建議大家在學(xué)習(xí)算法之余多少補(bǔ)一點(diǎn)工程能力比如寫整潔代碼、做日志監(jiān)控、搞性能優(yōu)化這些會(huì)讓你的機(jī)器學(xué)習(xí)方案真正變成一個(gè)能“跑起來(lái)”的系統(tǒng)。第四保持好奇心比猛刷資料更重要。機(jī)器學(xué)習(xí)領(lǐng)域更新很快今天的熱門模型明天可能就被替代但底層的思路是相通的比如“用損失函數(shù)衡量好壞”“用梯度下降更新參數(shù)”“用驗(yàn)證集判斷泛化”。把根基打牢后面遇到什么新模型都只是換個(gè)皮囊的舊原理。最后再分享一個(gè)小技巧每次拿到一個(gè)數(shù)據(jù)集先別急著建模花10分鐘畫圖、看分布、找缺失、看相關(guān)性把數(shù)據(jù)“看熟”再動(dòng)手。這個(gè)小習(xí)慣幫我避開(kāi)了數(shù)不清的坑也推薦給你們。祝你們都能在這條路上跑起來(lái)哪怕是從“太奶”這樣的零基礎(chǔ)開(kāi)始也沒(méi)關(guān)系一步一步學(xué)反而最扎實(shí)。