機器學習項目清單

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

此清單能夠指導你完成機器學習項目。主要有八個步驟:網絡

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

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

<!--more-->機器學習

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

  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. 研究每一個屬性及其特徵:性能

    • 名稱;
    • 類型(分類,整數/浮點數,有界/無界,文本,結構化數據等);
    • 缺失數據的百分比;
    • 噪聲點和它的類型(隨機點,異常點,舍入偏差等);
    • 對任務可能有用嗎?
    • 分佈類型(高斯分佈,均勻分佈,對數分佈等)。
  4. 對於監督學習任務,肯定目標屬性。
  5. 可視化數據。
  6. 研究屬性間的相關性。
  7. 研究怎如何手動解決問題。
  8. 肯定你想要應用的有效的轉換。
  9. 肯定有用的額外數據。
  10. 記錄你所學到的知識。

準備數據

注意:單元測試

    • 處理數據副本(保持原始數據集完整)。
    • 爲你應用的全部數據轉換編寫函數,緣由有五:學習

      • 你能夠在下次得到新數據集時輕鬆準備數據
      • 你能夠在將來的項目中應用這些轉換
      • 用來清洗和準備測試數據集
      • 一旦項目上線你能夠用來清洗和準備新的數據集
      • 爲了便於將你的準備選擇視爲超參數
    1. 數據清洗:測試

      • 修正或移除異常值(可選)。
      • 填補缺失值(好比用零,平均值,中位數等)或者刪除所在行(或者列)。
    2. 特徵提取(可選):

      • 丟棄不提供有用信息的屬性;
    3. 適當的特徵工程:

      • 連續特徵離散化。
      • 分解特徵(好比分類,日期/時間等)。
      • 對特徵添加有益的轉換(好比 log(x),sqrt(x),x^2 等)
      • Aggregate features into promising new features. 將一些特徵融合爲有益的新特徵
    4. 特徵縮放:標準化或者正規化特徵。

    列出有用模型

    注意:

    • 若是數據量巨大,你可能須要採樣出較小的訓練集,以便在合理的時間內訓練許多不一樣的模型(請注意,這會對諸如大型神經網絡或隨機森林等複雜模型進行處罰)。
    • 再次嘗試儘量自動化這些步驟。
    1. 使用標準參數訓練許多快速、粗糙的模型(好比線性模型,樸素貝葉斯模型,支持向量機模型,隨機森林模型,神經網絡等)。
    2. 衡量並比較他們的表現。

      • 對於每一個模型,使用 N 折交叉驗證法,而且計算基於 N 折交叉驗證的均值與方差。
    3. 分析每種算法的最重要變量。
    4. 分析模型產生的錯誤類型。

      • 人們用什麼數據來避免這些錯誤?
    5. 進行一輪快速的特徵提取和特徵工程。
    6. 對以前的五個步驟進行一兩次的快速迭代。
    7. 列出前三到五名最有用的模型,由其是產生不一樣類型錯誤的模型。

    微調系統

    注意:

    • 這一步你將會使用盡量多的數據,特別是當你微調結束時。
    • 像以前同樣儘量自動化。
    1. 使用交叉驗證方法調節超參數

      • 要像調節超參數那樣對待數據轉換的過程,特別是當你不知如何下手的時候(好比,我應該是用零或中值替換缺失值嗎?或者直接丟棄它們?)
      • 除非要探索的超參數值很是少,不然最好使用隨機搜索而非網格搜索。若是訓練的時間很長,你應該使用貝葉斯優化方法(好比,使用在 Jasper Snoek,Hugo Larochelle 和 Ryan Adams 的論文中描述的,用高斯處理先驗)
    2. 嘗試集成方法,結合最佳模型一般比單獨運行它們更好。
    3. 一旦你對最終的模型有自信,請在測試集上測量其性能以估計泛化偏差。
    在測量泛化偏差後不要調整模型:你會開始過分擬合測試集的。

    展現你的解決方案

    1. 將你作的工做整理成文檔。
    2. 製做精美的演示。

      • 確保你首先突出重點。
    3. 解釋你的解決方案實現業務目標的緣由。
    4. 不要忘記展現在這過程當中你注意到的有趣的點。

      • 描述哪些有效,哪些無效。

    -列出你的假設和系統的限制。

    1. 確保經過精美的可視化或易於記憶的陳述來傳達你的主要發現(例如,「收入中位數是房價的第一預測因子」)。

    啓動

    1. 準備好生產解決方案(插入生產數據輸入,編寫單元測試等)。
    2. 編寫監控代碼以按期檢查系統的實時性能,並在信號丟失時觸發警報。

      • 謹防模型退化:隨着數據的進入,模型每每會「腐爛」。
      • 評估模型可能須要大量的人力(好比,經過衆包服務能夠解決這個問題)
      • 同時監控輸入數據的質量(例如,一個有故障的傳感器發送隨機數據,或者另一個團隊的輸出變得陳舊),這對於在線學習系統尤爲重要。
    3. 按期在新數據上從新訓練模型(儘量自動化)。
    相關文章
    相關標籤/搜索