1. 程式人生 > >機器學習專案流程清單

機器學習專案流程清單

翻譯自 《Hands On Machine Learning with Scikit Learn and TensorFlow》的APPENDIX B: Machine Learning Project Checklist
翻譯過程根據筆者的習慣進行了文字的調整,如果不當歡迎指出

這份列表可以知道你部署自己的機器學習專案。總共有八個步驟:

  1. 首先你要有一個要解決的問題
  2. 獲取解決問題需要的資料
  3. 探索資料,對資料有一個清楚的理解
  4. 預處理資料以便更好地輸入給機器學習演算法
  5. 探索不同的模型並且找到最好的那個
  6. 調整你的模型引數,並將這些引數組合成一個更好的解決方案
  7. 展示你的結果
  8. 對你的系統進行上線、監控和維護

1 規範化問題:Frame the Problem and Look at the Big Picture

  1. 用商業術語來定義你的目標
  2. 您的解決方案將如何使用?
  3. 如果有的話,目前的解決方案/方法是什麼?
  4. 你如何規範化這個問題(有監督/無監督,線上/離線)?
  5. 模型的效果如何測量?
  6. 模型測量的指標是否與業務目標(原文為business objective)保持一致?
  7. 達到業務目標所需的最低模型效能是多少?
  8. 類似的問題有哪些? 你可以重複使用他們的經驗或工具嗎?
  9. 是不是人類專長的問題?
  10. 你如何人工手動解決這個問題?
  11. 列出目前為止,你或其他人所做出的假設
  12. 如果可能的話,驗證假設

2 獲取資料:Get the Data

  1. 列出你需要的資料和你需要的資料量
  2. 查詢並記錄可以獲取該資料的位置
  3. 檢查這些資料需要多少空間
  4. 檢查法律義務,並在必要時獲得授權
  5. 獲取訪問許可權
  6. 建立一個有足夠的儲存空間的工作區(可以簡單理解為計算機上的資料夾)
  7. 獲取資料
  8. 將資料轉換為您可以輕鬆操作的格式(不要更改資料本身)
  9. 確保刪除或保護敏感資訊(例如:使用匿名)
  10. 檢查資料的大小和型別(時間序列,樣本,地理資訊等)
  11. 抽樣出一個測試集,放在一邊,不要管它

注意:儘可能自動化獲取資料,這樣您可以輕鬆獲取最新的資料

3 探索資料:Explore the Data

  1. 為探索資料建立一份資料副本(如果需要,可將其抽樣為可管理的大小)
  2. 在Jupyter notebook上以記錄您的資料探索過程
  3. 研究每個屬性及其特徵
    • 名字
    • 型別:分類,int / float,有界/無界,文字,結構化等
    • 丟失資料的百分比
    • 噪音和噪音型別(隨機,異常值,舍入誤差等)
    • 對任務的有用性
    • 資料分佈的型別(高斯分佈,均勻分佈,對數分佈等)
  4. 對於有監督學習任務,確定標籤值
  5. 視覺化資料
  6. 研究樣本屬性之間的關係
  7. 思考如何手動解決這個問題
  8. 確定您可能想要應用的資料轉換
  9. 確認可能有用的額外資料
  10. 將你學到的東西記錄下來

注意:嘗試從領域專家那裡獲取這些步驟的見解

4 資料預處理:Prepare the Data

  1. 資料清理
    • 根據需要,修復或刪除異常值
    • 補全異常值(利用零、均值、中位數等)或者刪掉此行(或者列)
  2. 特徵選擇
    • 刪除對任務無用的屬性
  3. 適當的特徵工程
    • 對連續特徵離散化處理
    • 分解特徵(例如,分類,日期/時間等)
    • 新增有希望的特徵轉換(例如,log(x),sqrt(x),x ^ 2等)
    • 將特徵聚合成新的特徵
  4. 特徵縮放:對特徵進行歸一化或標準化處理

注意:

  • 在資料副本上進行處理(保持原始資料集的完整)
  • 對所有資料轉換的函式編寫程式碼,原因有五:
    • 可以在下次獲取新資料集時輕鬆處理資料
    • 可以在未來的專案中應用這些轉換
    • 對測試集進行預處理
    • 在解決方案生效後清理並準備新的資料例項
    • 輕鬆地將預處理選擇作為超引數來處理

5 列出可能的模型:Short-List Promising Models

  1. 使用標準引數訓練不同類別的快速模型(例如,線性,樸素貝葉斯,SVM,隨機森林,神經網路等)
  2. 測量並比較他們的效能
    • 對於每個模型,使用N折交叉驗證並計算N折效能的均值和標準差
  3. 分析每種演算法的重要變數
  4. 分析模型產生的錯誤型別
    • 人們用什麼資料來避免這些錯誤?
  5. 快速進行特徵選擇和特徵工程
  6. 對前面五個步驟進行一兩次更快的迭代
  7. 簡短列出前三到五個最有希望的模型,特別是不同型別的錯誤的模型

注意:

  • 如果資料很大,您可能需要抽取較小的訓練集,以便在合理的時間內訓練不同的模型(在複雜模型中要特別注意,如大型神經網路或隨機森林)
  • 再次嘗試,儘可能自動執行這些步驟

6 模型調整:Fine-Tune the System

  1. 使用交叉驗證對超引數進行微調
    • 將資料轉換選擇視為超引數,特別是當您不確定轉換是否合適時(例如,是否應該用零或中位數替換缺失的值?或者只是刪除指定行?)
  2. 嘗試整合方法。 結合你最好的幾個模型往往會比單獨更好
  3. 一旦你對你的最終模型充滿信心,在測試集上執行以檢測泛化誤差

注意:

在此步驟,您需要使用盡可能多的資料,特別是在您微調結束的時候
一如既往地自動化你所能做的事

7 展示你的方案:Present Your Solution

  1. 記錄下你所做的事情
  2. 建立一個不錯的演示
    • 確保首先突出重點。
  3. 解釋您的解決方案為何能夠達到業務目標
  4. 不要忘記提出你一路注意到的有趣觀點
    • 描述什麼工作是有效的,什麼沒效
    • 列出您的假設和模型系統的侷限性
  5. 確保您關鍵的研究結果通過美觀的視覺化或易於記憶的陳述進行傳達(例如,“收入中位數是房價的頭號預測指標”)

8 上線:Launch!

  1. 準備好生產環境下的解決方案(插入資料輸入,編寫單元測試等)
  2. 編寫監控程式碼,定期檢查系統的實時效能,並在效能下降時時觸發警報
    • 小心模型緩慢的退化:隨著資料的發展,模型往往會“腐爛”。
    • 衡量吸能可能需要人工流程(例如,通過眾包服務)。
    • 同時監控您輸入的資料質量(例如傳送隨機值的故障感測器,或其他團隊的輸出過時)。 這對於線上學習系統尤為重要。
  3. 定期在新的資料上模型重新訓練(儘可能自動化)