機(jī)器學(xué)習(xí)項(xiàng)目必備:端到端機(jī)器學(xué)習(xí)項(xiàng)目開發(fā)過程的任務(wù)表
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)。
在創(chuàng)建具有重大意義的項(xiàng)目時(shí),我會(huì)記錄所有在其他人身上學(xué)到的以及自己在工作中領(lǐng)悟到的東西。這對我來說是必須的,因?yàn)樾枰幚硪粋€(gè)項(xiàng)目中的許多內(nèi)容(爭論、準(zhǔn)備、問題、模型、微調(diào)等等),這容易讓人忘記一些事情。
任務(wù)列表能指導(dǎo)開發(fā)人員完成下一步,促使你檢查每個(gè)任務(wù)是否已成功執(zhí)行。有時(shí)候,我們很難找到出發(fā)點(diǎn),任務(wù)表也可幫助開發(fā)人員從正確的來源中獲取正確的信息(數(shù)據(jù)),以便建立關(guān)系并揭示相關(guān)的見解。
最好的做法是讓項(xiàng)目的每一部分都經(jīng)過檢查。正如阿圖·葛文德在其《清單革命》(The Checklist Manifesto)中所說:“我們所知事物的數(shù)量和其復(fù)雜性已經(jīng)超過了我們能正確、安全、可靠地傳達(dá)其優(yōu)點(diǎn)的能力范疇。”
所以,看看這個(gè)簡潔明了的項(xiàng)目任務(wù)表,它將幫你減少工作量,提高產(chǎn)出!
機(jī)器學(xué)習(xí)項(xiàng)目清單
在幾乎每個(gè)機(jī)器學(xué)習(xí)項(xiàng)目中都必須執(zhí)行8-10個(gè)步驟,其中一些步驟可以按順序交替執(zhí)行。
1. 從高層次的角度定義問題
為了理解和闡明問題的業(yè)務(wù)邏輯,任務(wù)表應(yīng)該告知:
- 問題的性質(zhì)(有監(jiān)督/無監(jiān)督、分類/回歸)。
 - 可開發(fā)的解決方案類型。
 - 應(yīng)該使用哪些指標(biāo)來衡量性能?
 - 機(jī)器學(xué)習(xí)是解決這個(gè)問題的正確方法嗎?
 - 人工解決問題的方法。
 - 問題的固有假設(shè)。
 
2. 識(shí)別數(shù)據(jù)源并獲取數(shù)據(jù)
在大多數(shù)情況下,如果擁有數(shù)據(jù),并且希望定義相關(guān)問題以更好地利用傳入的數(shù)據(jù),可以在第一步之前執(zhí)行此步驟。
基于問題的定義,我們需要確定數(shù)據(jù)的來源,可以是數(shù)據(jù)庫、數(shù)據(jù)存儲(chǔ)庫、傳感器等。對于要在生產(chǎn)中部署的應(yīng)用程序,需通過開發(fā)數(shù)據(jù)管道來自動(dòng)執(zhí)行此步驟,以保持傳入數(shù)據(jù)流入系統(tǒng)。
- 列出所需數(shù)據(jù)的來源和數(shù)量。
 - 檢查空間是否會(huì)成為一個(gè)問題。
 - 檢查你在使用數(shù)據(jù)上是否被授權(quán)。
 - 獲取數(shù)據(jù)并將其轉(zhuǎn)換為可行的格式。
 - 檢查數(shù)據(jù)類型(文本、分類、數(shù)字、時(shí)間序列、圖像)。
 - 取一個(gè)樣本用于最終測試。
 
圖源:unsplash
3. 數(shù)據(jù)的初步探索
在這一步驟中會(huì)發(fā)現(xiàn)所有對研究結(jié)果、預(yù)測以及目標(biāo)有影響的數(shù)據(jù)特征。如果你有一個(gè)巨大的數(shù)據(jù)塊,在該步驟中對其進(jìn)行抽樣,使分析更易于管理。應(yīng)遵循以下步驟:
- 使用jupyter notebook,因?yàn)樗鼈優(yōu)檠芯繑?shù)據(jù)提供了一個(gè)簡單直觀的界面。
 - 確定目標(biāo)變量。
 - 識(shí)別特征類型(分類、數(shù)字、文本等)。
 - 分析特征之間的相關(guān)性。
 - 添加一些數(shù)據(jù)可視化,以便于解釋每個(gè)特征對目標(biāo)變量的影響。
 - 記錄發(fā)現(xiàn)。
 
4. 探索性數(shù)據(jù)分析,以準(zhǔn)備數(shù)據(jù)
是時(shí)候通過定義用于數(shù)據(jù)轉(zhuǎn)換、清理、特征選擇/設(shè)計(jì)和縮放的函數(shù)來執(zhí)行前一步的發(fā)現(xiàn)了。
- 編寫函數(shù),以轉(zhuǎn)換數(shù)據(jù),自動(dòng)化處理即將出現(xiàn)的大批量數(shù)據(jù)。
 - 編寫函數(shù),以清理數(shù)據(jù)(輸入缺失值和處理異常值)。
 - 編寫函數(shù),以選擇并設(shè)計(jì)特征——刪除冗余的特征、特征的格式轉(zhuǎn)換以及和其他數(shù)學(xué)轉(zhuǎn)換。
 - 特征縮放——標(biāo)準(zhǔn)化特征。
 
5. 開發(fā)一個(gè)基準(zhǔn)模型并探索其他模型以篩選最佳模型
創(chuàng)建一個(gè)非?;A(chǔ)的模型,作為所有其他復(fù)雜機(jī)器學(xué)習(xí)模型的基線。按照以下步驟:
- 使用默認(rèn)參數(shù),訓(xùn)練一些常用的機(jī)器學(xué)習(xí)模型,如樸素貝葉斯、線性回歸、支持向量機(jī)(SVM)等。
 - 利用基線和其他模型,測量并比較每個(gè)模型的性能。
 - 每個(gè)模型部署N折交叉驗(yàn)證(N-fold cross-validation),并計(jì)算N個(gè)折疊上性能指標(biāo)的平均值和標(biāo)準(zhǔn)差。
 - 研究對目標(biāo)影響最大的特征。
 - 分析模型在預(yù)測時(shí)出錯(cuò)的類型。
 - 以不同的方式設(shè)計(jì)特征。
 - 多次重復(fù)上述步驟(反復(fù)試驗(yàn)),確保以正確的格式使用正確的特征。
 - 基于性能衡量標(biāo)準(zhǔn)列出最佳模型。
 
6. 微調(diào)入圍模型,檢查集成方法
這是關(guān)鍵步驟之一,在此步驟中將更接近最終解決方案。主要步驟應(yīng)包括:
- 使用交叉驗(yàn)證進(jìn)行超參數(shù)調(diào)整。
 - 使用自動(dòng)調(diào)整方法,如隨機(jī)搜索或網(wǎng)格搜索,為最佳模型找到最佳配置。
 - 測試集成方法,如投票分類器等。
 - 用盡可能多的數(shù)據(jù)測試模型。
 - 完成后,使用一開始拋之一側(cè)的測試樣本,來檢查是否過擬合或欠擬合。
 
7. 記錄代碼并傳達(dá)解決方案
溝通的過程是多方面的,請時(shí)刻牢記所有現(xiàn)有的和潛在的利益相關(guān)者。主要步驟包括:
- 記錄代碼以及整個(gè)項(xiàng)目的完成方法和過程。
 - 創(chuàng)建一個(gè)簡明的儀板或一個(gè)具有深刻見解的演示文稿,其應(yīng)具有接近自我解釋的可視化效果。
 - 撰寫博客/報(bào)告,記錄如何分析特征、測試不同的轉(zhuǎn)換等,記錄學(xué)習(xí)成果(失敗和有效的技巧)。
 - 總結(jié)主要成果和未來藍(lán)圖(如有)。
 
8. 在生產(chǎn)中部署模型和監(jiān)視器
如果項(xiàng)目需要在實(shí)時(shí)數(shù)據(jù)上測試部署,應(yīng)該創(chuàng)建一個(gè)web應(yīng)用程序或REST API,以便在所有平臺(tái)(web、android、iOS)上使用。主要步驟(因項(xiàng)目而異)包括:
- 將最終訓(xùn)練的模型保存到h5或pickle文件中。
 - 使用web服務(wù)為模型服務(wù),可以使用Flask開發(fā)這些web服務(wù)。
 - 連接輸入數(shù)據(jù)源并設(shè)置ETL管道。
 - 使用pipenv、docker/Kubernetes(基于擴(kuò)展需求)管理依賴關(guān)系。
 - 可以使用AWS、Azure或Google云平臺(tái)來部署服務(wù)。
 - 監(jiān)控實(shí)時(shí)數(shù)據(jù)的性能,或讓人們將你的模型與他們的數(shù)據(jù)一起使用。
 
不要照本宣科,你的檢查表可以根據(jù)項(xiàng)目的復(fù)雜性進(jìn)行調(diào)整。以此為基礎(chǔ),一個(gè)完美的機(jī)器學(xué)習(xí)項(xiàng)目正向你招手。

















 
 
 







 
 
 
 