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