[譯] 機器學習專案清單

qiwihui發表於2019-02-18

原文來自於《Hands-On Machine Learning with Scikit-Learn and TensorFlow》,這是一本系統學習機器學習和深度學習非常不錯的入門書籍,理論和實踐兼而有之。

此清單可以指導你完成機器學習專案。主要有八個步驟:

  1. 將問題框架化並且關注重點。
  2. 獲取資料。
  3. 探索資料以洞悉資料。
  4. 準備資料以更好地將基礎資料模式暴露給機器學習演算法。
  5. 探索多種不同的模型並列出最好的那些。
  6. 微調模型並將它們組合成一個很好的解決方案。
  7. 展示你的解決方案。
  8. 啟動,監督並維護你的系統。

顯然,你應該根據你的需求調整此清單。

將問題框架化並且關注重點

  1. 用業務術語定義目標。
  2. 你的解決方案將如何使用?
  3. 目前的解決方案/解決方法(如果有的話)是什麼?
  4. 你應該如何解決這個問題(監督/非監督,線上/離線等)?
  5. 如何度量模型的表現?
  6. 模型的表現是否和業務目標一致?
  7. 達到業務目標所需的最低效能是多少?
  8. 類似的問題如何解決?是否可以複用經驗或工具?
  9. 人員是否專業?
  10. 你如何動手解決問題?
  11. 列出目前你(或者其他人)所做的假設。
  12. 如果可能,驗證假設。

獲取資料

注意:儘可能自動化,以便你輕鬆獲取新資料。

  1. 列出你需要的資料和資料量。
  2. 查詢並記錄你可以獲取該資料的位置。
  3. 檢查它將佔用多少儲存空間。
  4. 檢查法律義務並在必要時獲取授權。
  5. 獲取訪問許可權。
  6. 建立工作目錄(擁有足夠的儲存空間)。
  7. 獲取資料。
  8. 將資料轉換為你可以輕鬆操作的格式(不更改資料本身)。
  9. 確保刪除或保護敏感資訊(比如,匿名)。
  10. 檢查資料的大小和型別(時間序列,樣本,地理資訊等)。
  11. 抽樣出測試集,將它放在一邊,以後不需要關注它(沒有資料窺探!)。

探索資料

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

  1. 建立用於探索的資料副本(如有必要,將其取樣為可管理的大小)。
  2. 建立一個 Jupyter 筆記本來記錄你的資料探索。
  3. 研究每個屬性及其特徵:
  • 名稱;
  • 型別(分類,整數/浮點數,有界/無界,文字,結構化資料等);
  • 缺失資料的百分比;
  • 噪聲點和它的型別(隨機點,異常點,舍入誤差等);
  • 對任務可能有用嗎?
  • 分佈型別(高斯分佈,均勻分佈,對數分佈等)。
  1. 對於監督學習任務,確定目標屬性。
  2. 視覺化資料。
  3. 研究屬性間的相關性。
  4. 研究怎如何手動解決問題。
  5. 確定你想要應用的有效的轉換。
  6. 確定有用的額外資料。
  7. 記錄你所學到的知識。

準備資料

注意:

  • 處理資料副本(保持原始資料集完整)。
  • 為你應用的所有資料轉換編寫函式,原因有五:
    • 你可以在下次獲得新資料集時輕鬆準備資料
    • 你可以在未來的專案中應用這些轉換
    • 用來清洗和準備測試資料集
    • 一旦專案上線你可以用來清洗和準備新的資料集
    • 為了便於將你的準備選擇視為超引數
  1. 資料清洗:
  • 修正或移除異常值(可選)。
  • 填補缺失值(比如用零,平均值,中位數等)或者刪除所在行(或者列)。
  1. 特徵提取(可選):
  • 丟棄不提供有用資訊的屬性;
  1. 適當的特徵工程:
  • 連續特徵離散化。
  • 分解特徵(比如分類,日期/時間等)。
  • 對特徵新增有益的轉換(比如 log(x),sqrt(x),x^2 等)
  • Aggregate features into promising new features. 將一些特徵融合為有益的新特徵
  1. 特徵縮放:標準化或者正規化特徵。

列出有用模型

注意:

  • 如果資料量巨大,你可能需要取樣出較小的訓練集,以便在合理的時間內訓練許多不同的模型(請注意,這會對諸如大型神經網路或隨機森林等複雜模型進行處罰)。
  • 再次嘗試儘可能自動化這些步驟。
  1. 使用標準引數訓練許多快速、粗糙的模型(比如線性模型,樸素貝葉斯模型,支援向量機模型,隨機森林模型,神經網路等)。
  2. 衡量並比較他們的表現。
  • 對於每個模型,使用 N 折交叉驗證法,並且計算基於 N 折交叉驗證的均值與方差。
  1. 分析每種演算法的最重要變數。
  2. 分析模型產生的錯誤型別。
  • 人們用什麼資料來避免這些錯誤?
  1. 進行一輪快速的特徵提取和特徵工程。
  2. 對之前的五個步驟進行一兩次的快速迭代。
  3. 列出前三到五名最有用的模型,由其是產生不同型別錯誤的模型。

微調系統

注意:

  • 這一步你將會使用盡可能多的資料,特別是當你微調結束時。
  • 像之前一樣儘可能自動化。
  1. 使用交叉驗證方法調節超引數
  • 要像調節超引數那樣對待資料轉換的過程,特別是當你不知如何下手的時候(比如,我應該是用零或中值替換缺失值嗎?或者直接丟棄它們?)
  • 除非要探索的超引數值非常少,否則最好使用隨機搜尋而非網格搜尋。如果訓練的時間很長,你應該使用貝葉斯優化方法(比如,使用在 Jasper Snoek,Hugo Larochelle 和 Ryan Adams 的論文中描述的,用高斯處理先驗)
  1. 嘗試整合方法,結合最佳模型通常比單獨執行它們更好。
  2. 一旦你對最終的模型有自信,請在測試集上測量其效能以估計泛化誤差。

在測量泛化誤差後不要調整模型:你會開始過度擬合測試集的。

展示你的解決方案

  1. 將你做的工作整理成文件。
  2. 製作精美的演示。
  • 確保你首先突出重點。
  1. 解釋你的解決方案實現業務目標的原因。
  2. 不要忘記展示在這過程中你注意到的有趣的點。
  • 描述哪些有效,哪些無效。 -列出你的假設和系統的限制。
  1. 確保通過精美的視覺化或易於記憶的陳述來傳達你的主要發現(例如,“收入中位數是房價的第一預測因子”)。

啟動

  1. 準備好生產解決方案(插入生產資料輸入,編寫單元測試等)。
  2. 編寫監控程式碼以定期檢查系統的實時效能,並在訊號丟失時觸發警報。
  • 謹防模型退化:隨著資料的進入,模型往往會“腐爛”。
  • 評估模型可能需要大量的人力(比如,通過眾包服務可以解決這個問題)
  • 同時監控輸入資料的質量(例如,一個有故障的感測器傳送隨機資料,或者另外一個團隊的輸出變得陳舊),這對於線上學習系統尤其重要。
  1. 定期在新資料上重新訓練模型(儘可能自動化)。

相關文章