機器學習項目清單

總共有八個步驟:算法

  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. 特徵縮放:對特徵進行歸一化或標準化處理

注意:app

  • 在數據副本上進行處理(保持原始數據集的完整)
  • 對全部數據轉換的函數編寫代碼,緣由有五:
    • 能夠在下次獲取新數據集時輕鬆處理數據
    • 能夠在將來的項目中應用這些轉換
    • 對測試集進行預處理
    • 在解決方案生效後清理並準備新的數據實例
    • 輕鬆地將預處理選擇做爲超參數來處理

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

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

注意:機器學習

  • 若是數據很大,您可能須要抽取較小的訓練集,以便在合理的時間內訓練不一樣的模型(在複雜模型中要特別注意,如大型神經網絡或隨機森林)
  • 再次嘗試,儘量自動執行這些步驟

6 模型調整:Fine-Tune the System

  1. 使用交叉驗證對超參數進行微調
    • 將數據轉換選擇視爲超參數,特別是當您不肯定轉換是否合適時(例如,是否應該用零或中位數替換缺失的值?或者只是刪除指定行?)
    • 當探索的超參數值不多,首選利用網格搜索上進行隨機搜索。 若是訓練時間很長,您可能更喜歡貝葉斯優化方法(例如,使用高斯過程先驗,請參考[Practical Bayesian optimization of machine learning algorithms)。
  2. 嘗試集成方法。 結合你最好的幾個模型每每會比單獨更好
  3. 一旦你對你的最終模型充滿信心,在測試集上運行以檢測泛化偏差

注意:函數

在此步驟,您須要使用盡量多的數據,特別是在您微調結束的時候
一如既往地自動化你所能作的事工具


7 展現你的方案:Present Your Solution

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

8 上線:Launch!

    1. 準備好生產環境下的解決方案(插入數據輸入,編寫單元測試等)
    2. 編寫監控代碼,按期檢查系統的實時性能,並在性能降低時時觸發警報
      • 當心模型緩慢的退化:隨着數據的發展,模型每每會「腐爛」。
      • 衡量吸能可能須要人工流程(例如,經過衆包服務)。
      • 同時監控您輸入的數據質量(例如發送隨機值的故障傳感器,或其餘團隊的輸出過期)。 這對於在線學習系統尤其重要。
    3. 按期在新的數據上模型從新訓練(儘量自動化)
相關文章
相關標籤/搜索