原文來自於《Hands-On Machine Learning with Scikit-Learn and TensorFlow》,這是一本系統學習機器學習和深度學習非常不錯的入門書籍,理論和實踐兼而有之。
此清單可以指導你完成機器學習專案。主要有八個步驟:
- 將問題框架化並且關注重點。
- 獲取資料。
- 探索資料以洞悉資料。
- 準備資料以更好地將基礎資料模式暴露給機器學習演算法。
- 探索多種不同的模型並列出最好的那些。
- 微調模型並將它們組合成一個很好的解決方案。
- 展示你的解決方案。
- 啟動,監督並維護你的系統。
顯然,你應該根據你的需求調整此清單。
將問題框架化並且關注重點
- 用業務術語定義目標。
- 你的解決方案將如何使用?
- 目前的解決方案/解決方法(如果有的話)是什麼?
- 你應該如何解決這個問題(監督/非監督,線上/離線等)?
- 如何度量模型的表現?
- 模型的表現是否和業務目標一致?
- 達到業務目標所需的最低效能是多少?
- 類似的問題如何解決?是否可以複用經驗或工具?
- 人員是否專業?
- 你如何動手解決問題?
- 列出目前你(或者其他人)所做的假設。
- 如果可能,驗證假設。
獲取資料
注意:儘可能自動化,以便你輕鬆獲取新資料。
- 列出你需要的資料和資料量。
- 查詢並記錄你可以獲取該資料的位置。
- 檢查它將佔用多少儲存空間。
- 檢查法律義務並在必要時獲取授權。
- 獲取訪問許可權。
- 建立工作目錄(擁有足夠的儲存空間)。
- 獲取資料。
- 將資料轉換為你可以輕鬆操作的格式(不更改資料本身)。
- 確保刪除或保護敏感資訊(比如,匿名)。
- 檢查資料的大小和型別(時間序列,樣本,地理資訊等)。
- 抽樣出測試集,將它放在一邊,以後不需要關注它(沒有資料窺探!)。
探索資料
注意:嘗試從領域專家那獲取有關這些步驟的見解。
- 建立用於探索的資料副本(如有必要,將其取樣為可管理的大小)。
- 建立一個 Jupyter 筆記本來記錄你的資料探索。
- 研究每個屬性及其特徵:
- 名稱;
- 型別(分類,整數/浮點數,有界/無界,文字,結構化資料等);
- 缺失資料的百分比;
- 噪聲點和它的型別(隨機點,異常點,舍入誤差等);
- 對任務可能有用嗎?
- 分佈型別(高斯分佈,均勻分佈,對數分佈等)。
- 對於監督學習任務,確定目標屬性。
- 視覺化資料。
- 研究屬性間的相關性。
- 研究怎如何手動解決問題。
- 確定你想要應用的有效的轉換。
- 確定有用的額外資料。
- 記錄你所學到的知識。
準備資料
注意:
- 處理資料副本(保持原始資料集完整)。
- 為你應用的所有資料轉換編寫函式,原因有五:
- 你可以在下次獲得新資料集時輕鬆準備資料
- 你可以在未來的專案中應用這些轉換
- 用來清洗和準備測試資料集
- 一旦專案上線你可以用來清洗和準備新的資料集
- 為了便於將你的準備選擇視為超引數
- 資料清洗:
- 修正或移除異常值(可選)。
- 填補缺失值(比如用零,平均值,中位數等)或者刪除所在行(或者列)。
- 特徵提取(可選):
- 丟棄不提供有用資訊的屬性;
- 適當的特徵工程:
- 連續特徵離散化。
- 分解特徵(比如分類,日期/時間等)。
- 對特徵新增有益的轉換(比如 log(x),sqrt(x),x^2 等)
- Aggregate features into promising new features. 將一些特徵融合為有益的新特徵
- 特徵縮放:標準化或者正規化特徵。
列出有用模型
注意:
- 如果資料量巨大,你可能需要取樣出較小的訓練集,以便在合理的時間內訓練許多不同的模型(請注意,這會對諸如大型神經網路或隨機森林等複雜模型進行處罰)。
- 再次嘗試儘可能自動化這些步驟。
- 使用標準引數訓練許多快速、粗糙的模型(比如線性模型,樸素貝葉斯模型,支援向量機模型,隨機森林模型,神經網路等)。
- 衡量並比較他們的表現。
- 對於每個模型,使用 N 折交叉驗證法,並且計算基於 N 折交叉驗證的均值與方差。
- 分析每種演算法的最重要變數。
- 分析模型產生的錯誤型別。
- 人們用什麼資料來避免這些錯誤?
- 進行一輪快速的特徵提取和特徵工程。
- 對之前的五個步驟進行一兩次的快速迭代。
- 列出前三到五名最有用的模型,由其是產生不同型別錯誤的模型。
微調系統
注意:
- 這一步你將會使用盡可能多的資料,特別是當你微調結束時。
- 像之前一樣儘可能自動化。
- 使用交叉驗證方法調節超引數
- 要像調節超引數那樣對待資料轉換的過程,特別是當你不知如何下手的時候(比如,我應該是用零或中值替換缺失值嗎?或者直接丟棄它們?)
- 除非要探索的超引數值非常少,否則最好使用隨機搜尋而非網格搜尋。如果訓練的時間很長,你應該使用貝葉斯優化方法(比如,使用在 Jasper Snoek,Hugo Larochelle 和 Ryan Adams 的論文中描述的,用高斯處理先驗)
- 嘗試整合方法,結合最佳模型通常比單獨執行它們更好。
- 一旦你對最終的模型有自信,請在測試集上測量其效能以估計泛化誤差。
在測量泛化誤差後不要調整模型:你會開始過度擬合測試集的。
展示你的解決方案
- 將你做的工作整理成文件。
- 製作精美的演示。
- 確保你首先突出重點。
- 解釋你的解決方案實現業務目標的原因。
- 不要忘記展示在這過程中你注意到的有趣的點。
- 描述哪些有效,哪些無效。 -列出你的假設和系統的限制。
- 確保通過精美的視覺化或易於記憶的陳述來傳達你的主要發現(例如,“收入中位數是房價的第一預測因子”)。
啟動
- 準備好生產解決方案(插入生產資料輸入,編寫單元測試等)。
- 編寫監控程式碼以定期檢查系統的實時效能,並在訊號丟失時觸發警報。
- 謹防模型退化:隨著資料的進入,模型往往會“腐爛”。
- 評估模型可能需要大量的人力(比如,通過眾包服務可以解決這個問題)
- 同時監控輸入資料的質量(例如,一個有故障的感測器傳送隨機資料,或者另外一個團隊的輸出變得陳舊),這對於線上學習系統尤其重要。
- 定期在新資料上重新訓練模型(儘可能自動化)。