機器學習項目流程清單
翻譯自 《Hands On Machine Learning with Scikit Learn and TensorFlow》的APPENDIX B: Machine Learning Project Checklist 翻譯過程根據我的習慣進行了文字的調整,如果不當請指出
這份列表可以知道你部署自己的機器學習項目。總共有八個步驟:
- 首先你要有一個要解決的問題
- 獲取解決問題需要的數據
- 探索數據,對數據有一個清楚的理解
- 預處理數據以便更好地輸入給機器學習演算法
- 探索不同的模型並且找到最好的那個
- 調整你的模型參數,並將這些參數組合成一個更好的解決方案
- 展示你的結果
- 對你的系統進行上線、監控和維護
1 規範化問題:Frame the Problem and Look at the Big Picture
- 用商業術語來定義你的目標
- 您的解決方案將如何使用?
- 如果有的話,目前的解決方案/方法是什麼?
- 你如何規範化這個問題(有監督/無監督,在線/離線)?
- 模型的效果如何測量?
- 模型測量的指標是否與業務目標(原文為business objective)保持一致?
- 達到業務目標所需的最低模型性能是多少?
- 類似的問題有哪些? 你可以重複使用他們的經驗或工具嗎?
- 是不是人類專長的問題?
- 你如何人工手動解決這個問題?
- 列出目前為止,你或其他人所做出的假設
- 如果可能的話,驗證假設
2 獲取數據:Get the Data
注意:儘可能自動化獲取數據,這樣您可以輕鬆獲取最新的數據
- 列出你需要的數據和你需要的數據量
- 查找並記錄可以獲取該數據的位置
- 檢查這些數據需要多少空間
- 檢查法律義務,並在必要時獲得授權
- 獲取訪問許可權
- 創建一個有足夠的存儲空間的工作區(可以簡單理解為計算機上的文件夾)
- 獲取數據
- 將數據轉換為您可以輕鬆操作的格式(不要更改數據本身)
- 確保刪除或保護敏感信息(例如:使用匿名)
- 檢查數據的大小和類型(時間序列,樣本,地理信息等)
- 抽樣出一個測試集,放在一邊,不要管它
3 探索數據:Explore the Data
注意:嘗試從領域專家那裡獲取這些步驟的見解
- 為探索數據創建一份數據副本(如果需要,可將其抽樣為可管理的大小)
- 在Jupyter notebook上以記錄您的數據探索過程
- 研究每個屬性及其特徵
- 名字
- 類型:分類,int / float,有界/無界,文本,結構化等
- 丟失數據的百分比
- 噪音和噪音類型(隨機,異常值,舍入誤差等)
- 對任務的有用性
- 數據分布的類型(高斯分布,均勻分布,對數分布等)
4. 對於有監督學習任務,確定標籤值
5. 可視化數據
6. 研究樣本屬性之間的關係
7. 思考如何手動解決這個問題
8. 確定您可能想要應用的數據轉換
9. 確認可能有用的額外數據
10. 將你學到的東西記錄下來
4 數據預處理:Prepare the Data
注意:
- 在數據副本上進行處理(保持原始數據集的完整)
- 對所有數據轉換的函數編寫代碼,原因有五:
- 可以在下次獲取新數據集時輕鬆處理數據
- 可以在未來的項目中應用這些轉換
- 對測試集進行預處理
- 在解決方案生效後清理並準備新的數據實例
- 輕鬆地將預處理選擇作為超參數來處理
- 數據清理
- 根據需要,修復或刪除異常值
- 補全異常值(利用零、均值、中位數等)或者刪掉此行(或者列)
2. 特徵選擇
- 刪除對任務無用的屬性
3. 適當的特徵工程
- 對連續特徵離散化處理
- 分解特徵(例如,分類,日期/時間等)
- 添加有希望的特徵轉換(例如,log(x),sqrt(x),x ^ 2等)
- 將特徵聚合成新的特徵
4. 特徵縮放:對特徵進行歸一化或標準化處理
5 列出可能的模型:Short-List Promising Models
注意:
- 如果數據很大,您可能需要抽取較小的訓練集,以便在合理的時間內訓練不同的模型(在複雜模型中要特別注意,如大型神經網路或隨機森林)。
- 再次嘗試,儘可能自動執行這些步驟
- 使用標準參數訓練不同類別的快速模型(例如,線性,樸素貝葉斯,SVM,隨機森林,神經網路等)
- 測量並比較他們的性能
- 對於每個模型,使用N折交叉驗證並計算N折性能的均值和標準差
3. 分析每種演算法的重要變數
4. 分析模型產生的錯誤類型
- 人們用什麼數據來避免這些錯誤?
5. 快速進行特徵選擇和特徵工程
6. 對前面五個步驟進行一兩次更快的迭代
7. 簡短列出前三到五個最有希望的模型,特別是不同類型的錯誤的模型
6 模型調整:Fine-Tune the System
注意:
- 在此步驟,您需要使用儘可能多的數據,特別是在您微調結束的時候
- 一如既往地自動化你所能做的事
- 使用交叉驗證對超參數進行微調
- 將數據轉換選擇視為超參數,特別是當您不確定轉換是否合適時(例如,是否應該用零或中位數替換缺失的值?或者只是刪除指定行?)
- 當探索的超參數值很少,首選利用網格搜索上進行隨機搜索。 如果訓練時間很長,您可能更喜歡貝葉斯優化方法(例如,使用高斯過程先驗,請參考[Practical Bayesian optimization of machine learning algorithms)。
2. 嘗試集成方法。 結合你最好的幾個模型往往會比單獨更好
3. 一旦你對你的最終模型充滿信心,在測試集上運行以檢測泛化誤差
7 展示你的方案:Present Your Solution
- 記錄下你所做的事情
- 創建一個不錯的演示
- 確保首先突出重點。
3. 解釋您的解決方案為何能夠達到業務目標
4. 不要忘記提出你一路注意到的有趣觀點
- 描述什麼工作是有效的,什麼沒效
- 列出您的假設和模型系統的局限性
5. 確保您關鍵的研究結果通過美觀的可視化或易於記憶的陳述進行傳達(例如,「收入中位數是房價的頭號預測指標」)
8 上線:Launch!
- 準備好生產環境下的解決方案(插入數據輸入,編寫單元測試等)
- 編寫監控代碼,定期檢查系統的實時性能,並在性能下降時時觸發警報
- 小心模型緩慢的退化:隨著數據的發展,模型往往會「腐爛」。
- 衡量吸能可能需要人工流程(例如,通過眾包服務)。
- 同時監控您輸入的數據質量(例如發送隨機值的故障感測器,或其他團隊的輸出過時)。 這對於在線學習系統尤為重要。
3. 定期在新的數據上模型重新訓練(儘可能自動化)
推薦閱讀:
※準備應對 AI 的惡意使用
※Perceptual loss for Real time Style Transfer and Super-Resolution 論文閱讀
※複習:決策樹
※從建立清晰的步驟開始——Machine Learning Project Checklist
※Google機器學習速總結
TAG:機器學習 |