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