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