1. 程式人生 > >機器學習專案主要步驟詳細清單(精)

機器學習專案主要步驟詳細清單(精)

對於機器學習專案來說,你開始獲得之後有一個總體思路很重要,也需要一些預設遵守的原則.
個人記錄翻譯
Hands-On Machine Learning with Scikit-Learn and TensorFlow 附錄B

指導你完成你機器學習專案的清單列表

主要是有8個主要步驟:

  1. 從整體上思考觀察所需要解決的問題.
  2. 獲得資料.
  3. 仔細觀察你的資料得到對這些資料的思路與想法.
  4. 將資料處理成符合機器學習演算法所需要求.
  5. 找不同演算法模型, 並尋找效果最好一個.
  6. 微調模型並將它們組合成一個很好的解決方案.
  7. 提出解決方法.
  8. 啟動,監控和維護.

<1>從整體上思考所需要解決的問題

  1. 定義業務目標的解決方案.
  2. 解決方案如何使用?
  3. 目前的解決方案是什麼(如果之前存在的話)?
  4. 如何去構建解決方案(監督學習/無監督學習, 線上/線下)?
  5. 如何衡量效能效果(例誤差率這些)?
  6. 效能效果的提升與否是否與業務目標一致?
  7. 業務目標所需的最低效能標準是多少?
  8. 是否存在類似的專案, 是否存在可以重用的工具或者經驗?
  9. 是否有人類專業知識?
  10. 你將會如何手動解決問題?
  11. 列出至今為止做出的假設.
  12. 如果可能驗證假設.

<2>獲得資料

Note: 儘可能地自動化,以便輕鬆地獲取資料

  1. 列出需要的資料列表與資料量大小.
  2. 尋找資料並且記錄找到這些資料的方法.
  3. 檢查這需要多少空間.
  4. 檢查法律義務,必要時申請授權.
  5. 獲得訪問許可權授權.
  6. 建立工作空間.
  7. 取得資料.
  8. 將資料成方便你操作的型別(無需改變資料本身).
  9. 確保刪除或者刪除隱私資訊.
  10. 檢查資料的大小和型別(時間序列,樣本,地理位置等).
  11. 抽取一部分資料集作為測試集,放到一邊不要看.

<3>探索你的資料

Note: 跟領域專家探討下列這些步驟

  1. 複製資料(如果需要, 抽樣成一個可管理的大小).
  2. 建立一個 Jupyter notebook 記錄探索資料過程.
  3. 研究每個特徵和屬性:
      – 名稱
      – 型別(明確,有界/無界,文字,結構化的,等等)
      – 資料缺失率
      – 噪聲與噪聲型別(隨機,異常值,舍入誤差等)
      – 可能對專案有用嘛?
      – 資料分佈情況(高斯分佈,均勻,對數).

<4>準備資料

Notes:

  • 在複製資料上工作(保證源資料的完整性)
  • 為所有資料的轉換編寫函式,為下列5個理由:
    • 為了更容易地準備資料當你獲取得新資料
    • 可以應用這些轉換在未來的專案
    • 清洗和準備測試集
    • 清洗和準備新資料一旦解決方案是實時的
    • 便於選擇超引數
  1. 資料清洗
    –修復或者移除離群值(可選).
    –填充缺失值(0,平均值,中位數等等)或者刪除這一行或列
  2. 特徵選擇(可選)
    –刪除不提供任務有用資訊的屬性
  3. 特徵工程,恰當時
    – 分離連續特徵
    – 分解特徵(例如:分類,日期/時間等)
    – 新增可能有用的特徵轉換(log(x), sqrt(x), x^2 等)
    – 聚合特徵去形成可能有效果的新特徵
  4. 特徵縮放,標準化特徵

<5>列出可能有效的模型列表

Notes:
  – 如果你有大資料集,你可能想要抽樣小資料集便於在可能的時間內多次試用不同的模型(但要記得小資料集會懲罰複雜的模型,如隨機森林,大型神經網路等)
  – 一再強調,儘可能地自動化這些步驟:

  1. 訓練來自不同類別的許多快速的模型(例如,線性,樸素
    貝葉斯,SVM,隨機森林,神經網路等)使用標準引數。
  2. 測量和比較他們的表現
     – 對於每個模型,使用N折交叉驗證,測試每個模型效能的平均值與標準差.

  3. 分析每個模型的最重要屬性.

  4. 分析每個模型出現誤差的原因.
     – 人們一般如何解決這些誤差

  5. 快速進行功能選擇和工程設計.

  6. 對上述5個步驟進行一次或兩次快速迭代.
  7. 找出最可能表現得最好的3到5個模型, 更傾向於那些誤差原因不同的模型.

<6>微調模型

Notes:
 – 儘可能地準備更多的資料以用於模型微調.
 – 儘可能自動化

  1. 使用驗證微調你的超引數.
     – 將資料選擇轉換視為超引數,特別當你不確定時(例如缺失值是否用平均值,中位數填充,或者乾脆刪除)
     – 除非要探索的超引數值非常少,否則更喜歡隨機
    搜尋網格搜尋。 如果訓練時間很長,您可能更喜歡貝葉斯訓練
    優化方法.

  2. 嘗試合併的方法.組合表現最好的模型往往比你單獨使用他們表現來得好.

  3. 一旦決定你的最終模型,測量它在測試集上的效能表現,用於評價模型誤差.

ps:測量泛化誤差後,請勿調整模型,你只是開始過度擬合測試集.(不明白)

<7>提出你的解決方案

  1. 記錄你完成的事情.
  2. 建立一個漂亮的簡報
  3. 解釋解決方案實現業務目標的原因.
  4. 不要忘記提出一些有趣的點.
     – 如哪一些有效,哪一些無效,列出你的假設與系統的限制

  5. 確保通過視覺化一些精美的圖表與容易記住的陳述來傳達您的主要發現.

<8>啟動

  1. 準備好生產解決方案(插入生產資料輸入,寫入
    單元測試等)。
  2. 編寫監控程式碼,以定期檢查系統的實時效能。
    vals並在它下降時觸發警報。
  3. 謹防緩慢退化:隨著資料的發展,模型往往會“腐爛”。
  4. 測量效能可能需要人工管道(例如,通過人群 -
    服務)。
  5. 還監控輸入的質量(例如,傳送故障的感測器 -
    dom值,或其他團隊的輸出變得陳舊)。 這尤其如此
    對線上學習系統很重要。
  6. 定期在新資料上重新訓練模型(儘可能自動化)
    BLE)